我正在编写一个带有许多参数的宏,其中许多参数可能是可选的。我想象的示例如下:
\newcommand{\mycommand}[width, height, density=1, joy=0]{Only \texttt{width} of value #width is used.}
\mycommand[width=10, joy=-1, height=2]
我知道 LaTeX 支持可选参数,但我无法通过名称引用它们,这在更复杂的宏中对可读性有很大帮助。此外,如果我想从中间删除一个参数,我需要重新枚举宏主体中使用的所有参数,这很麻烦。
实现此目标最方便、最明智的方法是什么?我更喜欢 LaTeX 解决方案,但如果它能显著改善体验,我可以切换到其他引擎。
答案1
我将使用 l3keys 做一个演示,如下所示......
\documentclass{article}
\usepackage{l3draw}
\ExplSyntaxOn
\keys_define:nn{rectangle}
{
width.dim_set:N = \l_width_dim,
width.default:n = 2cm,
width.initial:n = 2cm,
height.dim_set:N = \l_height_dim,
height.default:n = 3cm,
height.initial:n = 3cm,
linewidth.dim_set:N = \l_linewidth_dim,
linewidth.default:n = 1pt,
linewidth.initial:n = 1pt,
color.tl_set:N = \l_color_tl,
color.default:n = cyan,
color.initial:n =cyan
}
\NewDocumentCommand{\rectangle}{O{}}
{
\group_begin:
\keys_set:nn{rectangle}{#1}
\draw_begin:
\draw_linewidth:n{\dim_use:N \l_linewidth_dim}
\draw_path_rectangle:nn{0,0}{\dim_use:N \l_width_dim,\dim_use:N \l_height_dim}
\color_select:x{\tl_use:N\l_color_tl}
\draw_path_use:n { stroke }
\draw_end:
\group_end:
}
\cs_generate_variant:Nn\color_select:n{x}
\ExplSyntaxOff
\begin{document}
\rectangle\par
\rectangle
[
width = 3cm,
height = 2cm,
color = red
]
\end{document}