![我可以标记内联数学中的换行符吗?](https://linux22.com/image/317026/%E6%88%91%E5%8F%AF%E4%BB%A5%E6%A0%87%E8%AE%B0%E5%86%85%E8%81%94%E6%95%B0%E5%AD%A6%E4%B8%AD%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%90%97%EF%BC%9F.png)
有时内联数学中的换行符是可以接受的,但有时它会分散信息的注意力。我希望能够准确地看到这种换行符(即内联数学模式中的任何换行符)在我的 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 或其他代码自动找到它们。