对于 LaTeX 包编写者来说,这是一个完全新手的问题。有人可以分享一段代码或一个 MWE 来处理以下情况吗?我想定义一个依赖于键的新命令。类似于
\newcommand{\mycommand}#if key_value=1 {test} else {test2}
应该做类似的事情如下
\mycommand[key=1]
应该打印test
,否则输出应该是test2
。
对于这个问题和其他新手问题,我向经验丰富的软件包编写者表示歉意。我只是被大量我一无所知的简单材料弄得不知所措。
答案1
有多个软件包可用于定义 key=value 语法。我将介绍它,keyval
因为它是基本 latex 发行版的一部分,而且我对它有所了解。
如果你使用 LaTeX 编写以下内容:
\makeatletter % not needed in a .sty file
\RequirePackage{keyval}
\define@key{test}{key}{%
\count@=#1\relax}
\define@key{test}{color}{%
\def\thiscolor{#1}}
\newcommand{\mycommand}[1]{%
\count@=0 % default
\def\thiscolor{}% default
\setkeys{test}{#1}%
\ifodd\count@
\typeout{key=\the\count@: Odd!}%
\else
\typeout{key=\the\count@: Even!}%
\fi
\typeout{the color is \thiscolor}}
\typeout{======}
\mycommand{key=1,color=red]}
\stop
您将看到两个密钥都已处理,并且进行了以下输入
======
key=1: Odd!
the color is red]
)
No pages of output.
其工作原理是,软件包处理逗号分隔设置的拆分,但对于此处的每个键“key”和“color”,您必须定义一个命令来处理该值。此处,键是要保存的数字\count@
,颜色被视为存储在中的文本\thiscolor
,然后在处理键之后,这些值可以用作普通的 TeX 代码。