pgffor`foreach`循环遍历databib宏生成的列表

pgffor`foreach`循环遍历databib宏生成的列表

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}

在此处输入图片描述

相关内容