![数学模式下 \index 前的自动换行符后出现虚假空格](https://linux22.com/image/441785/%E6%95%B0%E5%AD%A6%E6%A8%A1%E5%BC%8F%E4%B8%8B%20%5Cindex%20%E5%89%8D%E7%9A%84%E8%87%AA%E5%8A%A8%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%90%8E%E5%87%BA%E7%8E%B0%E8%99%9A%E5%81%87%E7%A9%BA%E6%A0%BC.png)
喂食
\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
跟随它的箭头之间换行,因此您会在行首得到一个粗的麝香。