本文简单介绍一下如何在 LaTeX
定义一个可接受 key-value
(键值对)参数的命令(如 \foo[height=3in, shadow = true ]{bar}
), 在 LaTeX
中, 想要使用键值对,其实有很多宏包,比如 l3keys
, pgfkeys
, keyval
, xkeyval
, kvoptions
, 等等.
这里简单介绍一下 keyval
宏包,在导言区使用 \usepackage{keyval}
即可使用,这个包主要提供了两个命令
\define@key
\setkeys
\define@key
该命令用于定义一个 key
, 使用如下
latex
\define@key{family}{key}{code}
- family 可以理解为该
key
所处的模块 - key 为
key
的名字 - code 块中暴露一个参数占位符
#1
用于对接受到的value
进行操作
latex
\def\myname{Ljguo}
\define@key{test}{name}{\def\myname{#1}}
如上定义了一个 test
模块下的名为 name
的 key
, 其功能是修改命令 \myname
的内容
\setkeys
该命令用于设置 key
的值, 使用如下
latex
\setkeys{family}{code}
- family 对应
\define@key
定义的 family - code 为具体的内容, 如
latex
\setkeys{test}{name = ZhangSan}
的作用是设置模块 test 中的 name 为 ZhangSan.
综合案例
latex
\documentclass{ctexart}
\usepackage{xcolor}
\usepackage{keyval}
\makeatletter
\def\foo@color{cyan}
\def\foo@style{\Large\bfseries}
\define@key{foo}{color}{\def\foo@color{#1}}
\define@key{foo}{style}{\def\foo@style{#1}}
\newcommand\foo[2][]{%
\begingroup
\setkeys{foo}{#1}%
\color{\foo@color}\foo@style #2
\endgroup
}
\makeatother
\begin{document}
\foo{Hello Test}, \foo[color = red, style = \small\itshape]{Hello Test}
\end{document}