在 LaTeX 中使用命名参数代替数字

在 LaTeX 中使用命名参数代替数字

ConTeXt 有一个用于模块的 .mkvi 文件扩展名(大致类似于 LaTeX 包),允许使用命名参数,例如:

\def\foo[#parameters]#content{ #parameters ... #content ...}

代替

\def\foo[#1]#2{#1 ... #2 ...}

其实没什么区别,但它的优点是宏更易于阅读。是否有任何软件包或功能允许 LaTeX 实现同样的功能?

答案1

不久前,我写过类似的东西来协助我的另一个项目。一些内部宏开始有太多参数,而我经常更改它们的顺序,因此跟踪参数编号变得很麻烦(并且经常导致错误)。

为了解决这个问题,我写了namedef包,它允许你从(一个无可否认的无聊的例子)进行更改:

\def\Say#1 to #2%
  {#1, #2!}

\named\def\Say#[greeting] to #[whom]%
  {#[greeting], #[whom]!}

#[greeting]我看到的这种语法的优点是,如果您决定交换参数文本中的和的顺序#[whom],则不必在替换文本中更改它们 - 语义优于语法:-)

该代码的工作原理是扫描的定义,用数字替换它们,然后将翻译后的标记交给 TeX 来执行定义。#6[⟨name⟩]

代码托管于https://github.com/PhelypeOleinik/namedef。要构建.sty文件,请运行tex namedef.ins,要构建文档,请运行pdflatex namedef.ins。生成的文件可以在 LaTeX 中使用,也可以在其他格式中.sty使用。\usepackage{namedef}\input namedef.sty

相关内容