在 foreach 循环中的索引命令中使用 expandafter for databib 命令时出错

在 foreach 循环中的索引命令中使用 expandafter for databib 命令时出错

我正在尝试使用 databib 包 (datatool) 捆绑包创建作者索引。我可以循环遍历 BibTeX 数据库中的条目,并针对每个条目使用\foreachpgffor 包中的命令循环遍历作者。然后我想将作者添加到索引中,但失败了。

以下最小示例说明了这个问题:

\begin{filecontents}{data.bib}
@inproceedings{test,
  Author = {Author One and Auteur Twee},
}
\end{filecontents}
\documentclass{article}
\usepackage{databib,pgffor}
\usepackage{imakeidx}
  \makeindex[name=test]

\newcommand*{\invertfourargs}[4]{#4 #3 #2 #1}

\begin{document}
  \invertfourargs{a}{b}{c}{d}

  ***

  \def\multiplefourargs{{c}{d}{e}{f},{g}{h}{i}{j}}
  \foreach \fourargs in \multiplefourargs {%
    \expandafter\invertfourargs\fourargs+}
  \foreach \fourargs in \multiplefourargs {%
    \index[test]{\expandafter\invertfourargs\fourargs}}

  ***

  % GET DATA OUT OF BIBFILE INTO DB
  \nocite{*}
  \DTLloadbbl{data}{data.bib}

  \DTLforeachbibentry*{data}{
    \DTLbibfieldlet{\Authors}{Author}
    \foreach \Author in \Authors {%
      \expandafter\DTLformatauthor\Author+}
%     \foreach \Author in \Authors {% THIS DOES NOT WORK
%       \index[test]{\expandafter\DTLformatauthor\Author}}
  }

  \printindex[test]
\end{document}

我收到的错误是:

Runaway definition?
->\write \test@idxfile {\indexentry{\let \global \advance \dtlforeachlevel \ETC
.
! File ended while scanning definition of \reserved@a.
<inserted text> 
                }

我应该怎样做才能修复我的代码?

答案1

你的问题不是扩展\Author(\index 无论如何都会这样做),而是\DTLformatauthor在写入索引时阻止扩展。因此使用

 \index[test]{\protect\DTLformatauthor\Author}}

相关内容