数学模式下 \index 前的自动换行符后出现虚假空格

数学模式下 \index 前的自动换行符后出现虚假空格

喂食

\documentclass{article}
\pagestyle{empty}
\usepackage{makeidx}
\makeindex
\begin{document}%
\newlength{\myLen}\setlength{\myLen}{33em}%
\noindent 1st line. Plain \(B\), no index:\\
\hspace*{\myLen}\(\Sigma\to B\)\\
\noindent 4th line. Index before plain B:\\
\hspace*{\myLen}\(\Sigma\to \index{B}B\)\\
\noindent 7th line. Index after plain B:\\
\hspace*{\myLen}\(\Sigma\to B\index{B}\)
\printindex
\end{document}

标准pdflatex-makeindex循环或lualatex-makeindex循环产生

输出

如你所见,第 6 行以一个虚假的水平空格开始,然后

答案1

总结

反转顺序

\Sigma\to B\index{B}

因为 B 和索引条目之间没有换行符/分页符。或者添加括号

\Sigma\to{\index{B}B}

有什么问题?

一个显示该问题的最小示例,用于编译pdftex(或者也用于tex查看它是否是基本工具的问题):

\hsize=0pt
\parindent=0pt
\overfullrule=0pt % no distractions
\hfuzz=\maxdimen  % no warnings

\nopagenumbers
\tracingall

$A\to B$

$A\to\special{}B$

\bye

在此处输入图片描述

这是第一段的踪迹:

...\hbox(0.0+0.0)x0.0
...\mathon
...\teni A
...\glue(\thickmuskip) 2.77771 plus 2.77771
...\tensy !
...\penalty 500
...\glue(\rightskip) 0.0
..\penalty 300
..\glue(\baselineskip) 5.16669
..\hbox(6.83331+0.0)x0.0
...\teni B
...\kern0.50172
...\mathoff
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0

第二个

...\hbox(0.0+0.0)x0.0
...\mathon
...\teni A
...\glue(\thickmuskip) 2.77771 plus 2.77771
...\tensy !
...\penalty 500
...\glue(\rightskip) 0.0
..\penalty 300
..\glue(\baselineskip) 5.16669
..\hbox(6.83331+0.0)x0.0
...\special{}
...\glue(\thickmuskip) 2.77771 plus 2.77771
...\teni B
...\kern0.50172
...\mathoff
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0

你也可以用\write-1{}代替\special,结果是一样的:这个食谱的主要成分是任何那是什么

会发生什么?就数学间距的自动计算而言,whatsit 会被忽略,因此A\to\special{}B你得到

秩序相关词条

(在哪里西代表“whatsit”),但插入空格和惩罚项

奥德 \thickmuskip 相对 \relpenalty 西 \thickmuskip 奥德

where\relpenalty允许在 whatsit 之前换行,因此它和空格会转到下一行,而不是预期的

奥德 \thickmuskip 相对 \relpenalty \thickmuskip 单词

TeXbook 没有提及数学列表中 whatsits 的处理方式;然而,最终结果虽然出乎意料,但也是有意义的,因为胶水附着在数学原子上,而不是 whatsits 上。

在内容周围添加括号会将其变成奥德原子并解决问题。在括号中包含以下符号也可以,并且更适合特定情况。

但是,添加\index命令这个符号看起来更好,因为那里不允许换行。

答案2

你可以把一个括号组放在\index{...}

在此处输入图片描述

\documentclass{article}
\pagestyle{empty}

\usepackage{makeidx}
\makeindex
\begin{document}%
\newlength{\myLen}\setlength{\myLen}{33em}%
\noindent 1st line. Plain \(B\), no index:\\
\hspace*{\myLen}\(\Sigma\to B\)\\
\noindent 4th line. Index before plain B:\\
\hspace*{\myLen}\(\Sigma\to {\index{B}}B\)\\
\noindent 7th line. Index after plain B:\\
\hspace*{\myLen}\(\Sigma\to B\index{B}\)
\printindex
\end{document}

当在这种情况下使用时,\write节点最终允许箭头和\thickmuskip跟随它的箭头之间换行,因此您会在行首得到一个粗的麝香。

相关内容