带有 nameref 内容的索引条目导致紧急停止

带有 nameref 内容的索引条目导致紧急停止

大家晚上好。在阅读了你们许多精彩的问答(感谢你们的真知灼见)后,我对这个问题苦苦思索,想提出一个问题:

我打算从部分(其作用是作为手册集中的书名)仅包含一个特殊子字符串(可以通过在“-”后进行裁剪得出,并且(除了输出它之外)将其输入到索引中。

使用以下 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}

相关内容