datatool 包中的 databib 包允许导入 BibTeX 数据库并在 LaTeX 中使用它们。author 字段可以通过 访问\DTLbibfield{Author}
,它从 bbl 文件返回数据,并以以下格式存储
\DTLnewbibitem {Author}{{von1}{Last1}{jr1}{First1},%
{von2}{Last2}{jr2}{First2}}%
我在 pdf 输出中看到的是von1Last1jr1First1,von2Last2jr2First2
。
我想要做的是循环遍历逗号分隔的列表。
我的第一个问题是我不知道具体\DTLbibfield{Author}
返回什么。首先,我假设{von1}{Last1}{jr1}{First1},{von2}{Last2}{jr2}{First2}
,但是当我尝试使用 pgffor 包中的函数循环遍历此列表时\foreach
,它将其视为单个值。
说明该问题的最小示例:
\begin{filecontents}{data.bib}
@inproceedings{test,
Author = {Author One and Auteur Twee},
Title = {An loopy approach to author list iteration},
}
\end{filecontents}
\documentclass{article}
\usepackage{databib,pgffor}
\newcommand{\Authors}{\DTLbibfield{Author}}
\begin{document}
% GET DATA OUT OF BIBFILE INTO DB
\nocite{*}
\DTLloadbbl{data}{data.bib}
% LOOP OVER ENTRIES
\DTLforeachbibentry*{data}{
\Authors\\
% LOOP OVER AUTHORS IN ENTRY
\foreach \Author in \Authors {\Author\ *** }
% seen as one-item list instead of two-item list
}
\end{document}
答案1
\providecommand
无论如何,你的使用都是错误的。即使它有效,\Authors
也会扩展为\DTLbibfield{Author}
,这不是适合的逗号分隔列表\foreach
,因此唯一的项目作为一个单元进行处理。
您应该使用\DTLbibfieldlet
:
\begin{filecontents}{\jobname.bib}
@inproceedings{test,
Author = {Author One and Auteur Twee},
Title = {An loopy approach to author list iteration},
}
\end{filecontents}
\documentclass{article}
\usepackage{databib,pgffor}
\begin{document}
% GET DATA OUT OF BIBFILE INTO DB
\nocite{*}
\DTLloadbbl{data}{\jobname.bib}
% LOOP OVER ENTRIES
\DTLforeachbibentry{data}{%
\DTLbibfieldlet\Authors{Author}%
% LOOP OVER AUTHORS IN ENTRY
\foreach \Author in \Authors {\Author\ *** }%
}
\end{document}