![在 LaTeX 中使用命名参数代替数字](https://linux22.com/image/415994/%E5%9C%A8%20LaTeX%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%91%BD%E5%90%8D%E5%8F%82%E6%95%B0%E4%BB%A3%E6%9B%BF%E6%95%B0%E5%AD%97.png)
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