Различия между частной командой без параметров и локальной переменной списка токенов

Различия между частной командой без параметров и локальной переменной списка токенов

В LaTeX3, каковы различия - как практические, так и философские - между закрытой командой без параметров и локальной переменной списка токенов? В каких ситуациях следует отдавать предпочтение одному из них? Существует ли общепринятая лучшая практика?

В качестве примера предположим, что я определяю клавишу для хранения переключателей шрифтов, например \color{red}\itshape. Используя частную команду для хранения переключателей шрифтов, я мог бы определить:

\cs_new:Npn \@@_font: { }

\keys_define:nn { @@ } {
  font .code:n = { \cs_set:Npn \@@_font: {#1} } ,
  font .value_required:n = true ,
  font .initial:n = ,
}

С другой стороны, используя локальную переменную списка токенов, я мог бы определить:

\tl_new:N \l_@@_font_tl

\keys_define:nn { @@ } {
  font .tl_set:N = \l_@@_font_tl ,
  font .value_required:n = true ,
  font .initial:n = ,
}

Какая из этих двух версий предпочтительнее в LaTeX3?

решение1

Это пограничный случай. Различие между функциями и переменными заключается в том, что

  • функции выполняют действия
  • переменные хранят значения

Изменение текущего шрифта — это действие, поэтому в данном случае я больше склоняюсь к функции.

Самый чистый способ продолжить это сделать что-то вроде

\cs_new_protected:Nn \@@_use_font:n { #1 }
\cs_generate_variant:Nn \@@_use_font:n { V }

\keys_define:nn { @@ }
 {
  font .tl_set:N = \l_@@_font_tl  ,
  font .value_required:n = true ,
  font .initial:n = ,
}

с

\@@_use_font:V \l_@@_font_tl

в месте использования.

С другой стороны, прямое использование переменной списка токенов довольно распространено в существующем expl3коде для эффективности. Таким образом, для такого случая это скорее личное предпочтение, чем строгое соблюдение руководящих принципов: накладные расходы, вносимые с помощью, \@@_use_font:Vв этом случае незначительны, в других подобных случаях эффективность может сделать выбор использования переменной более привлекательным.

Связанный контент