我可以标记内联数学中的换行符吗?

我可以标记内联数学中的换行符吗?

有时内联数学中的换行符是可以接受的,但有时它会分散信息的注意力。我希望能够准确地看到这种换行符(即内联数学模式中的任何换行符)在我的 final-minus-epsilon 草稿中出现的位置,并决定是否应采取任何措施来重新排列句子措辞等(基于我对实例的手动检查)。我知道有自动方法可以防止内联数学中的换行符,但我不想这样做。文档很大,所以手动查看此类换行符是不行的。

有没有办法标记这些事情发生的位置?最好是通过日志中的行号。但如果这样做更简单,那么在 PDF 中突出某种视觉或可搜索的信号也是可以的。


稍后添加:David Carlisle 对相关问题的回答指出\binoppenalty\relpenalty是重要的不良因素。那么我们可以记录这些因素的使用情况吗?

答案1

您没有提到什么是“可接受的”,就内联数学材料中的换行符而言。因此,我能给出的最好建议是,您选择一种突出显示的方法全部用鲜艳的颜色来标记行内数学材料。这样,任何不合适的换行符都会立即跳出来。

如果您担心的主要是行溢出,则可以将选项添加draft\documentclass指令中。这样,将在每行溢出的末尾插入一个大而粗的“slug”,即实心矩形。

在此处输入图片描述

\documentclass[draft]{article}
\usepackage[x11names]{xcolor}
\everymath{\color{DarkOrchid3}} % Is "DarkOrchid3 lurid enough?!
\begin{document}

Completely unimportant text 
$ABC_{1234} = ABC_{1234} + ABC_{1234} - ABCDEFGHI_{1234} \times ABC_{1234} - ABC_{1234} \times ABC_{1234} - ABC_{1234} + ABC_{1234} - ABC_{1234} + ABC_{1234} - ABC_{1234} + ABC_{1234} - ABC_{1234}$
Some more text.

Completely unimportant text 
$ABC_{1234} = ABC_{1234} + ABC_{1234} - ABC_{1234} + ABC_{1234} - ABC_{1234} + ABC_{1234} - ABC_{1234} + ABC_{1234}$
Some more unimportant text.
\end{document}

答案2

\documentclass{article}

\showoutput
\begin{document}


one two three four $1+2+3=3+2+1$ five six
one two three four $1+2+3=3+2+1$ five
one two three four $1+2+3=3+2+1$ five
one two three four $1+2+3=3+2+1$ five
one two three four $1+2+3=3+2+1$ five
one two three four $1+2+3=3+2+1$ five
one two three  $0+1+2+3+4=4+3+2+1+0=10=5\times(5-1)/2$ 
one two three four 
five six   seven  eight nine ten
\end{document}

生产

在此处输入图片描述

因此有几个内联数学列表,其中两个被一行分隔开。

日志文件列出了很多内容,但特别记录了每个内联数学运算的开始和结束(\mathon\mathoff)以及每一行的结束(\rightskip)。(实际上,它不会记录开始一行的数学运算的开始,因为该节点被丢弃)

所以我们只对包含这些命令的行感兴趣。

您可以使用grep或任何搜索工具进行搜索,在这种情况下

grep '\\mathon\|\\mathoff\|\\rightskip' file.log

生产

....\mathon
....\mathoff
....\mathon

....\glue(\rightskip) 0.0

....\mathoff
....\mathon
....\mathoff
....\glue(\rightskip) 0.0
....\mathoff
....\mathon
....\mathoff
....\glue(\rightskip) 0.0
....\mathon
....\mathoff
....\mathon

....\glue(\rightskip) 0.0

....\mathoff
....\glue(\rightskip) 0.0
....\glue(\rightskip) 0.0

\rightskip因此很容易看出,之前出现的恰好两个\mathoff对应于两个损坏的数学列表。

请注意,有些信息\mathon在换行符处被丢弃,这会使全自动测试变得复杂,但信息基本上是存在的。或者,如果你知道 binoppenalty 和 relpenalty 是唯一的,你只需要在之前发现它们,\rightskip这样以破碎的数学列表结尾的两行都标记为

....\penalty 500
....\glue(\rightskip) 0.0

在这里我只是使用了 grep 并通过眼睛在数学中突出显示了右侧跳过,但您可以通过几行 perl 或 python 或 lua 或其他代码自动找到它们。

相关内容