我刚刚经历了LaTeX 宏的维基页面并尝试使用以下语法创建一个带有可选参数的新命令:
\documentclass{article}
\newcommand{\wbalTwo}[2][Wikimedia]{This is the Wikibook about LaTeX supported by {#1} and {#2}}
\begin{document}
\wbalTwo[lots of users]{John Doe}
\end{document}
我还尝试切换上面的可选参数和必需参数:
\documentclass{article}
\newcommand{\wbalTwo}[2][Wikimedia]{This is the Wikibook about LaTeX supported by {#1} and {#2}}
\begin{document}
\wbalTwo{John Doe}[lots of users]
\end{document}
这也可以很好地编译,但在生成的 pdf 中方括号被保留:
这表明 LaTeX需求指定可选参数第一的在指定新定义的命令正常工作所需的参数之前。
然而,在第 4 页titlesec 手册声明如下:
\titleformat{<命令>}[<形状>]{<格式>}{<标签>}{<sep>}{<before-code>}[<after-code>]
我猜titleformat
这和其他命令一样。它怎么允许将方括号参数放在括号参数之间?我是不是漏掉了什么?
答案1
在原始层面上,TeX 没有可选参数。
虽然你的声明
\newcommand{\wbalTwo}[2][Wikimedia]{... #1 #2}
或许想到定义一个带有一个可选参数和一个强制参数的命令,该命令\wbalTwo
根本没有参数(您可以使用它来检查,\meaning\wbalTwo
它被定义为一个向前查找[
并根据是否[
存在进行分支的命令,内部辅助命令实际上会拾取参数。
\newcommand
提供用于声明带有强制参数或一个可选初始参数的命令的语法简写。 \NewDocumentCommand
为更广泛的命令集提供简单的语法,但您始终可以单独定义辅助宏并构建所需的参数语法,例如使用以下命令定义尾随可选参数\newcommand
:
\documentclass{article}
\newcommand{\wbalTwo}[1]{This is the Wikibook about LaTeX supported by {#1} and \wbalTwoaux}
\newcommand{\wbalTwoaux}[1][Wikimedia]{#1}
\begin{document}
\small
1 \wbalTwo{John Doe}
2 \wbalTwo{John Doe}[lots of users]
\end{document}