【问题标题】:how to line break if the equation not fits in the width?如果等式不适合宽度,如何换行?
【发布时间】:2012-04-07 13:37:53
【问题描述】:

我有一个 MathML 脚本,它显示了一个方程式及其用法,我希望在其中最大宽度为 600 PX。

<span style="color: red;max-width: 600px;">
    <math>
    <mn>2</mn>
    <mfenced>
    <mrow><mi>l</mi><mi>b</mi><mo>+</mo><mi>b</mi><mi>h</mi><mo>+</mo><mi>h</mi><mi>l</mi></mrow>
    </mfenced>
    <mo>=</mo>
    <mn>2</mn><mo mathvariant="sans-serif">x</mo><mfenced>
    <mrow><mn>26</mn><mtext>cm</mtext><mo mathvariant="sans-serif">x</mo><mn>32</mn><mtext>cm</mtext><mo>+</mo><mn>28</mn><mtext>cm</mtext><mo mathvariant="sans-serif">x</mo><mn>58</mn><mtext>cm</mtext><mo>+</mo><mn>69</mn><mtext>cm</mtext><mo mathvariant="sans-serif">x</mo><mn>98</mn><mtext>cm</mtext></mrow>
    </mfenced>
    </math>
</span>

如果它不适合 600PX,我不想将行从“=”符号换成新行。 并且还需要右侧的那块碎片 谢谢

【问题讨论】:

    标签: css mathml


    【解决方案1】:

    你可以使用

    <mo linebreak="goodbreak" indentalign="right">=</mo>
    

    使等号成为首选断点,第二行右对齐。但是这是否有效取决于您使用的 MathML 渲染器的功能(并非所有渲染器都实现了 MathML3 的换行功能)。它应该适用于 MathJax,但不适用于 Firefox 的原生 MathML 渲染。

    但是请注意,公式缩进仅适用于块级数学;即,您需要使用 &lt;math display="block"&gt; 才能进行右对齐。

    还要注意max-width 仅适用于块级元素,因此它不会影响&lt;span&gt;。您需要改用 &lt;div&gt; 之类的东西。

    您还应该为“times”使用正确的符号,而不是“x”。例如,

    <mo>&#xD7;</mo>
    

    应该这样做。这将获得正确的间距以及为乘法提供正确的语义。

    【讨论】:

    • 我使用 mathjax(在 chrome 中工作 MathML 代码)这是你的意思吗? &lt;div style="color: red;max-width: 600px;"&gt; &lt;math display="block"&gt; &lt;mn&gt;2&lt;/mn&gt; &lt;mfenced&gt; &lt;mrow&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo&gt;&lt;/mrow&gt; &lt;/mfenced&gt; &lt;mo linebreak="goodbreak" intentalign="right"&gt;=&lt;/mo&gt; &lt;mn&gt;2&lt;/mn&gt;&lt;mo&gt;&amp;#xD7;&lt;/mo&gt;&lt;mfenced&gt; &lt;mrow&gt;&lt;mn&gt;26&lt;/mn&gt;&lt;mo&gt;&amp;#xD7;&lt;/mo&gt;&lt;mn&gt;32&lt;/mn&gt;&lt;/mrow&gt; &lt;/mfenced&gt; &lt;/math&gt; &lt;/div&gt;(删除了一些代码,因为不适合评论)它不适合我。请帮忙
    • 是的,这是正确的代码。但请注意,默认情况下,自动换行在 MathJax 中是关闭的,因此您需要在配置中启用它。详情请见the documentation
    • 顺便说一句,你给的表达式我查看时不是600px宽,所以不需要中断,所以显示为一行。您可能需要更长的表达式才能看到您想要的效果。
    • 我删除了一些代码以适应评论框。我现在完成了修复和换行工作。但对齐对我不起作用。如果我给出显示块,整个方程就会居中。并且 intentalign="right" 也不起作用。
    • 哎呀!我有一个错字。它是indentalign 而不是intentalign(我已经在上面的答案中修复了它)。那应该注意第二行的缩进。第一个是居中的,因为这是 MathJax 对显示方程的默认设置。您可以使用&lt;math display="block" indentalign="left"&gt; 覆盖它,或者您可能想要&lt;math display="block" indentalignfirst="left" indentalign="right"&gt;,在这种情况下您不需要在&lt;mo&gt; 本身上指定indentalign
    【解决方案2】:

    对于内联元素,max-width 属性将被忽略。您需要在span 元素上设置display: block(或者,更合乎逻辑地,使用divp 而不是span)来强制设置最大宽度。

    如果您希望仅在等号后允许换行,则需要额外的标记。然后,您可以在不允许中断的任何元素上设置white-space: nowrap。或者,如果后面没有其他字符允许换行,您可以使用不间断空格。

    如果您使用 MathML,我认为您还应该正确使用数学符号;具体来说,字母“x”不是乘法符号,正确的符号“×”和“⋅”需要在它们周围加空格。这与主题相关,因为当您使用空格时,您需要考虑它们是破坏性的还是非破坏性的。

    【讨论】:

    • 我也在使用 mathjax 在 chrome 中查看 MathML 代码。我认为 mathjax 覆盖了这个变化。它不适合我。请帮忙
    猜你喜欢
    • 2022-10-31
    • 2016-10-29
    • 2022-01-06
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多