我是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
而文档中不推荐使用这种参数xparse
。IfNoValueF
如果找到下一组参数,则打印它们并添加\next@cites
以搜索更多参数。如果前面没有带括号的参数,则停止。为简单起见,如果存在带括号的参数但没有带括号的参数,则当前代码会默默忽略它们。