Перейти к главному содержимому

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 задает числовую переменную.