如何用 LaTeX3 实现 biblatex 的 \cites 命令?

如何用 LaTeX3 实现 biblatex 的 \cites 命令?

我是zepinglee/citeproc-lua并且已经具有\cite[⟨prenote⟩][⟨postnote⟩]{⟨key⟩}对单个引用项采用可选的 ⟨prenote⟩ 和 ⟨postnote⟩ 的功能。我计划实现一个用于多项引用的命令,如“[参见 21:第 21、77 页,22:第 3 页]”,其中每个项可能都有相应的 prenote 和/或 postnote。from 命令\cites采用biblatex形式\cites[⟨prenote⟩][⟨postnote⟩]{⟨key⟩}...[⟨prenote⟩][⟨postnote⟩]{⟨key⟩},它接收不确定数量的参数。但是,其实现中的扩展控制命令太多了,我无法理解。如何使用expl3/实现这样的命令xparse

答案1

您可以像这样组织解析参数:

\documentclass{article}
\usepackage{xparse}

\makeatletter
\NewDocumentCommand{\cites}{oom}{'#1','#3','#2'\next@cites}
\NewDocumentCommand{\next@cites}{oog}{%
  \IfNoValueF{#3}{; '#1','#3','#2'\next@cites}%
}
\makeatother

\begin{document}
\cites{key1}

\cites[1]{key2}

\cites[1][2]{key3}[4]{key5}

\cites[1][2]{key3}[4]{key5}[6][7]{key8}{key9}
\end{document}

上面的代码使用了可选的带括号参数,g而文档中不推荐使用这种参数xparseIfNoValueF如果找到下一组参数,则打印它们并添加\next@cites以搜索更多参数。如果前面没有带括号的参数,则停止。为简单起见,如果存在带括号的参数但没有带括号的参数,则当前代码会默默忽略它们。

相关内容