我正在尝试{
使用以下方法将其xindy
作为索引处理器并xelatex
作为排版格式:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{fontspec}
\begin{document}
This is a test
\index{\texttt{\{}}
\printindex
\end{document}
但是,我收到以下错误:
Runaway argument?
{\texttt{\{}} \printindex \end{document}
! File ended while scanning use of \@wrindex.
<inserted text>
\par
<*> test.tex
出了什么问题?如何解决?
答案1
有两个问题:
如果要使用 或类似命令来格式化索引条目
\texttt
,\textbf
请使用以下形式的索引条目:\index{word@\textbf{word}
对于非字母数字的索引条目,您应该提供排序键。因此,如果您想将左括号排序为braceleft,请使用以下命令:
\index{braceleft@\texttt{\textbraceleft}}
.ind
运行后将创建以下文件
xindy -L english -C utf8 -M texindy filename.idx
\begin{theindex}
\providecommand*\lettergroupDefault[1]{}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
\nopagebreak
}
\lettergroup{B}
\item \texttt{\textbraceleft}, 1
\end{theindex}
如果你不想按照某个字母排序,可以使用
\index{\relax@\texttt{\textbraceleft}}
结果是:
\begin{theindex}
\providecommand*\lettergroupDefault[1]{}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
\nopagebreak
}
\lettergroupDefault{default}
\item \texttt{\textbraceleft}, 1
\end{theindex}
答案2
我可以这样做
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{fontspec}
\begin{document}
This is a test
\index{\texttt{\textbraceleft}}
\printindex
\end{document}
但这次xindy
给出了以下错误信息:
ERROR: CHAR: index 0 should be less than the length of the string
或者
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{fontspec}
\begin{document}
This is a test
\index{\texttt{\char"007B}}
\printindex
\end{document}
但再次,将(在文件中)xindy
转换为(在文件中)可能是因为具有特殊含义而简单地忽略它。\char"007B
.idx
\char007B
.ind
"
xindy
xindy
或者,我可以这样做
\documentclass{article}
\usepackage{makeidx}
\makeindex
\usepackage{fontspec}
\chardef\mylb="007B
\begin{document}
This is a test
\index{\texttt{\mylb}}
\printindex
\end{document}
但这次xindy
给出了以下错误信息:
ERROR: CHAR: index 0 should be less than the length of the string
答案3
我发现以下解决方案作者:Heiko Oberdiek:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begingroup
\lccode`0=`\{
\lccode`1=`\}
\lowercase{%
\endgroup
\newcommand\BraceLeft{0}%
\newcommand\BraceRight{1}%
}
\newcommand*{\Index}[1]{%
\index{#1}%
}
\begin{document}
foo\Index{"\BraceLeft @\string\textbraceleft}
\printindex
\end{document}
我不懂德语,我只是复制了他的 TeX 代码。如果你会说德语,请编辑我的答案并添加一些详细信息。