大家晚上好。在阅读了你们许多精彩的问答(感谢你们的真知灼见)后,我对这个问题苦苦思索,想提出一个问题:
我打算从部分(其作用是作为手册集中的书名)仅包含一个特殊子字符串(可以通过在“-”后进行裁剪得出,并且(除了输出它之外)将其输入到索引中。
使用以下 MWE (有问题的部分被注释掉)可以“手动”完成此操作:
\documentclass[a4paper,11pt,parskip=full]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{xstring}
\usepackage{nameref}
\usepackage{imakeidx}
\usepackage{hyperref}
\makeindex
\newtoks\VATemp{}
\makeatletter
\newcommand{\getnamereftext}[1]{%
\@ifundefined{r@#1}{}{%
\unexpanded\expandafter\expandafter\expandafter{%
\expandafter\expandafter\expandafter\@thirdoffive\csname r@#1\endcsname
}%
}%
}
\makeatother
\newcommand{\VA}[1]{
\StrBehind{\getnamereftext{VA #1-Start}}{ - }[\VATemp]
\index{VA #1 - \VATemp}%
}
\begin{document}
\part{Verfahrensanweisung 145-1.8 - Just a Test}% ä to test for Umlaut
\label{VA 145-1.8-Start}
\VA{145-1.8}
\printindex
\end{document}
编辑:当我在部分标题中使用“ä”时,我没有得到任何索引条目(或看起来如此)。确切地说,main.idx 包含以下内容:
\indexentry{VA 145-1.8 - 只需 \unhbox \voidb@x \bgroup \U@D 1ex{\setbox \z@ \hbox {\char 127}\dimen@ -.45ex\advance \dimen@ \ht \z@ \fontdimen 5\font \dimen@ }\accent 127\fontdimen 5\font \U@D a\egroup Test|hyperpage}{1}
这意味着变音符号的扩展非常奇怪(并导致 Overleaf 中有关 UTF-8 的错误)。
有人知道解决这个问题的方法吗?我是否必须查看 nameref 提取的 thepartname 或索引过程……?或者我是否错过了 inputenc / imakeidx 或任何其他包中的任何选项?
答案1
可以使用以下方法解决该问题\noexpandarg
:使字符串不受完全扩展的影响,从而消除\unexpanded
对它的保护。
然而,为了移除,还需要一个进一步的扩展步骤\@thirdoffive
。
\expandarg
不使用标准xstring
,而是使用\edef
,它将删除\unexpanded
,但不会进行进一步扩展。
\documentclass[a4paper,11pt,parskip=full]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{xstring}
\usepackage{nameref}
\usepackage{imakeidx}
\usepackage{hyperref}
\makeindex
\makeatletter
\newcommand{\getnamereftext}[1]{%
\@ifundefined{r@#1}{}{%
\unexpanded\expandafter
\expandafter\expandafter\expandafter
\expandafter\expandafter\expandafter
{%
\expandafter\expandafter\expandafter\@thirdoffive\csname r@#1\endcsname
}%
}%
}
\makeatother
\newcommand{\VA}[1]{%
\begingroup\noexpandarg
\begingroup\edef\x{\endgroup
\noexpand\StrBehind
{\getnamereftext{VA #1-Start}}}%
\x{ - }[\VATemp]%
\index{VA #1 - \VATemp}%
\endgroup
}
\begin{document}
\part{Verfährensanweisung 145-1.8 - Just a Test}% ä to test for Umlaut
\label{VA 145-1.8-Start}
\VA{145-1.8}
\printindex
\end{document}