在宏中命名可选参数的便捷方法

在宏中命名可选参数的便捷方法

我正在编写一个带有许多参数的宏,其中许多参数可能是可选的。我想象的示例如下:

\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}

在此处输入图片描述

相关内容