![新的自动检测键/值参数 - 它有什么用途?](https://linux22.com/image/462575/%E6%96%B0%E7%9A%84%E8%87%AA%E5%8A%A8%E6%A3%80%E6%B5%8B%E9%94%AE%2F%E5%80%BC%E5%8F%82%E6%95%B0%20-%20%E5%AE%83%E6%9C%89%E4%BB%80%E4%B9%88%E7%94%A8%E9%80%94%EF%BC%9F.png)
在《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}