我正在尝试使用 databib 包 (datatool) 捆绑包创建作者索引。我可以循环遍历 BibTeX 数据库中的条目,并针对每个条目使用\foreach
pgffor 包中的命令循环遍历作者。然后我想将作者添加到索引中,但失败了。
以下最小示例说明了这个问题:
\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}}