LaTeX: параметры ключ=значение
Определение команды:
\ExplSyntaxOn \keys_define:nn { mymodule } { color .tl_set:N = \l_mymodule_color_tl , color .initial:n = { black } , text .tl_set:N = \l_mymodule_text_tl , text .initial:n = { Default~Text } , size .dim_set:N = \l_mymodule_size_dim , size .initial:n = { 12pt } , } \NewDocumentCommand { \mycommand } { O{} } { \keys_set:nn { mymodule } { #1 } \group_begin: \color{\l_mymodule_color_tl} \fontsize{\l_mymodule_size_dim}{\dim_eval:n{\l_mymodule_size_dim * 1.2}}\selectfont \l_mymodule_text_tl \group_end: } \ExplSyntaxOff
Использование:
\begin{document} \mycommand % Uses default values \par \mycommand[color=blue, text=Hello~World, size=18pt] \par \mycommand[size=24pt, color=red]
Свойства ключей в keys_define
Каждый ключ в keys_define может иметь набор свойств:
-
.code:n= code to execute: задает код для выполнения, когда ключ задан, при этом в коде может использоваться#1и туда будет подставлено значение ключа. -
.initial:n= initial value: Задает начальное значение. Оно будет использоваться, если ключ вообще не задан. -
.default:n= default value: Задает значение по умолчанию. Оно будет использоваться если ключ задан без значения (например, key=). -
.choices:nn= { список выбора }: Задает список допустимых значений для ключа. Для каждого возможного значения задается код, который должен выполниться в соответствующем случае. -
.bool_set:N,.bool_set_true:N,.bool_set_false:N: Задает что делать для boolean-ключей, установить значение, true или false. -
.int_set:N,.dim_set:N,.tl_set:N: Задает присвоение переменным для числа, размера или строки.
Пример:
\ExplSyntaxOn \keys_define:nn { mymodule } { color .code:n = \tl_set:Nn \l_mymodule_color_tl { #1 }, color .initial:n = black, shape .choices:nn = { circle .code:n = \tl_set:Nn \l_mymodule_shape_tl { circle }, square .code:n = \tl_set:Nn \l_mymodule_shape_tl { square } }, shape .initial:n = circle, linewidth .int_set:N = \l_mymodule_linewidth_int, linewidth .initial:n = 1 } \ExplSyntaxOff
В этом примере определены ключи color, shape и linewidth для модуля mymodule.
color принимает значение, shape значение из списка, a linewidth задает числовую переменную.