在《LaTeX News》第 1-36 期中,有这样写道:
自动检测键/值参数为了扩展核心 LATEX 语法,
ltcmd
现在支持=...
在抓取参数时使用修饰符。此修饰符指示 LATEX 将参数作为一组键/值传递给底层代码。如果参数“看起来”不像一组键/值,它将被转换为单个键/值对,并使用参数指定=
该键的名称。例如,\caption 命令可以定义为\DeclareDocumentCommand\caption {s ={short-text}+O{#3} +m}{...}
这种功能的 API 实用程序是什么?
答案1
如果你有一个现有的命令,例如
\section[short version]{long version of title}
并希望获得 key/val 未来
\section[pdfoutline=very short, page-head=quite short,
toc=medium length]{long version of title}
这让你可以通过发现没有=
in来支持这两种语法
\section[short version]{long version of title}
并将其定义为
\section[toc=short version]{long version of title}
在这里我展示了一个调试定义,它显示了即使使用旧形式,参数#2
也始终作为键值列表公开\section[short version]
,因此这允许定义具有多个键的新功能。
\documentclass{article}
\DeclareDocumentCommand\section {s ={short-text}+O{#3} +m}{%
\par
\bigskip
Section:\par
\IfBooleanTF{#1}%
{no number}%
{number}\par
options: \texttt{\detokenize{#2}}\par
main text: \texttt{\detokenize{#3}}\par
}
\begin{document}
\section{aaaa}
\section*[short text]{a section}
\section[toc=a sec.,
page-head =this text,
pdfbookmark= A SECTION]{another section}
\end{document}