喂食
\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
跟随它的箭头之间换行,因此您会在行首得到一个粗的麝香。