Unterschiede zwischen privatem Befehl ohne Parameter oder lokaler Token-Listenvariable

Unterschiede zwischen privatem Befehl ohne Parameter oder lokaler Token-Listenvariable

Welche praktischen und philosophischen Unterschiede gibt es in LaTeX3 zwischen einem privaten Befehl ohne Parameter und einer lokalen Token-Listenvariable? In welchen Situationen sollte das eine dem anderen vorgezogen werden? Gibt es eine anerkannte bewährte Vorgehensweise?

Nehmen wir beispielsweise an, dass ich eine Taste zum Speichern von Schriftartenschaltern wie definiere \color{red}\itshape. Wenn ich einen privaten Befehl zum Speichern der Schriftartenschalter verwende, könnte ich Folgendes definieren:

\cs_new:Npn \@@_font: { }

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

Andererseits könnte ich mithilfe einer lokalen Token-Listenvariable Folgendes definieren:

\tl_new:N \l_@@_font_tl

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

Welche dieser beiden Versionen wird in LaTeX3 bevorzugt?

Antwort1

Dies ist ein Grenzfall. Der Unterschied zwischen Funktionen und Variablen besteht darin, dass

  • Funktionen führen Aktionen aus
  • Variable Speicherwerte

Das Ändern der aktuellen Schriftart ist eine Aktion, daher tendiere ich in diesem Fall eher zu einer Funktion.

Die sauberste Vorgehensweise wäre etwa so:

\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 = ,
}

mit

\@@_use_font:V \l_@@_font_tl

am Einsatzort.

Andererseits ist die direkte Verwendung einer Token-Listenvariable in vorhandenem expl3Code aus Effizienzgründen recht üblich. In einem Fall wie diesem ist es also eher eine persönliche Präferenz als die strikte Einhaltung von Richtlinien: Der dadurch verursachte Mehraufwand \@@_use_font:Vist in diesem Fall vernachlässigbar, in anderen ähnlichen Fällen könnte die Effizienz die Verwendung der Variable attraktiver machen.

verwandte Informationen