我有一份包含大量索引字符串的文档,希望将它们拆分成多行以便于阅读!前两个 \index 命令按预期工作,但在 @ 之后拆分的命令在一行上仅生成 G 而不是 G,在下一行上生成缩进的 I 和页码。
Gold Man 建议的修复方法很有效:
\documentclass[draft]{amsart}
% suppress verbatim for \index
\newcommand \indexfold [1] {\index{#1}}
% Generate paired subindex entries
\newcommand \indexpair [2] {\index{#1!#2}\index{#2!#1}}
% Generate paired subsubindex entries 2!3, 3!2, 1!2!3, 1!3!2
\newcommand \indextriple [3]%
{%
\index{#2!#3}%
\index{#3!#2}%
\index{#1!#2!#3}%
\index{#1!#3!#2}%
}
\makeindex
\begin{document}
\begin{flushleft}
{\textbackslash}index\{A!B@C\}
\index{A!B@C}
{\textbackslash}index\{D!\% \\
E@F\}
\index{D!%
E@F}
{\textbackslash}index\{G!H@\% \\
I\}
\index{G!H@%
I}
{\textbackslash}indexfold\{text1!sublabel1@\% \\
subtext1\}
\indexfold{text1!sublabel1@%
subtext1}
{\textbackslash}indexpair\{\{text2\}\{sublabel2@subtext2\}\}
\indexpair{text2}{sublabel2@subtext2}
{\textbackslash}indextriple\% \\
\{text3\}\% \\
\{sublabel3@subtext3\}\% \\
\{subsublabel3@subsubtext3\}
\indextriple%
{text3}%
{sublabel3@subtext3}%
{subsublabel3@subsubtext3}
\end{flushleft}
\printindex
\end{document}
答案1
index 命令按字面意思接受参数,并且仅在排版后才进行处理。这意味着您的注释字符实际上是作为文字 % 符号读入的。如果您查看 .idx 文件,您会发现以下条目:
\indexentry{D!% E@F}{1}
\indexentry{G!H@% I}{1}
这两种情况都是不正确的,因为您没有将第二个条目排序在 % 下,并且您希望读取第三个条目中 % 之后的任何内容。
您可以通过定义一个接受参数并将其提供给以下命令来解决此问题,\index
如下所示:
\def\myindex#1{\index{#1}}
这将使 TeX 首先扫描输入,并正确忽略 %。
答案2
的参数\index
是“逐字”读取的,因此使用你的代码,.idx
文件将类似于
\indexentry{A!B@C}{1}
\indexentry{D!% E@F}{1}
\indexentry{G!H@% I}{1}
并且,在运行 MakeIndex 时,该.ind
文件将
\begin{theindex}
\item A
\subitem C, 1
\indexspace
\item D
\subitem F, 1
\indexspace
\item G
\subitem % I, 1
\end{theindex}
因此,不可以:您不能将其%
用于此目的,除非您将其%
重新转换为注释字符:
\documentclass[draft]{amsart}
\usepackage{xpatch}
\makeindex
\makeatletter
\xpatchcmd{\index}
{\@sanitize}
{\@sanitize\catcode`\%=14 }
{}{}
\makeatother
\begin{document}
{\textbackslash}index\{A!B@C\}
\index{A!B@C}
{\textbackslash}index\{D!\% \\
E@F\}
\index{D!%
E@F}
{\textbackslash}index\{G!H@\% \\
I\}
\index{G!H@%
I}
\printindex
\end{document}
请注意,行首的空格不会被忽略。这样,.idx
文件将看起来像
\indexentry{A!B@C}{1}
\indexentry{D! E@F}{1}
\indexentry{G!H@ I}{1}
是的,你没看错:\%
没有通过。恐怕你无法同时拥有两者。