
Relacionado con la pregunta¿Qué hacen \makeatletter y \makeatother?para LaTeX2e, aquí relacionado con LaTeX3
¿Qué hacer \ExplSyntaxOn
y \ExplSyntaxOff
hacer?
Respuesta1
El lenguaje de codificación LaTeX3, expl3
utiliza :
y _
como 'letras' en los nombres de funciones y variables. Esto permite el uso de expl3
material a nivel de código en un documento.
\cs_new:Npn .... % fails: command \cs followed by characters '_', 'n', 'e', 'w', etc.
\ExplSyntaxOn
\cs_new:Npn .... % works here: command name \cs_new:Npn
El \ExplSyntaxOn
comando activa esto y también altera el tratamiento de los espacios y finales de línea para que se ignoren, lo que significa que
\ExplSyntaxOn
\cs_new:Npn \my_function:nn #1#2
{
% Code hre
}
no requiere %
al final de cada línea (compárese con el código LaTeX2e "normal"). Para permitir la inclusión de espacios en la salida, ~
se convierte en un espacio "normal" mediante \ExplSyntaxOn
. Tenga en cuenta que este cambio en el comportamiento de los espacios no es esencial para acceder a expl3
los nombres, pero los dos están estrechamente relacionados ya que la combinación permite una programación más "clara" en expl3
.
\ExplSyntaxOff
invierte esto, regresando :
y a sus valores anteriores y haciendo que los espacios vuelvan _
a ser "importantes".~
\ExplSyntaxOn
A nivel técnico, la idea de códigos de categoría en los nombres de comandos es exactamente la misma que en¿Qué hacen \makeatletter y \makeatother?, aunque los \ExplSyntax...
interruptores hacen más.
Un par de puntos a tener en cuenta sobre el tratamiento ~
dentro de un bloque de código. Primero, como ~
es un 'espacio' dentro de un bloque de código, ~
TeX ignora un al comienzo de una línea.
\ExplSyntaxOn
~ \cs_new:Npn ....
es exactamente igual que
\ExplSyntaxOn
\cs_new:Npn ....
ya que se ignora el 'espacio'.
En segundo lugar, while ~
es un 'espacio' dentro de un bloque de código, \␣
sigue \~
siendo distinto y tiene las definiciones de LaTeX2e.
Hay algunos detalles más para discutir para que esté completo. \ExplSyntaxOn
también establece catcodes apropiadamente para otros caracteres que implícitamente son parte de su sintaxis:
- TAB: ignorado (al igual que los espacios)
"
— un carácter 'otro', necesario para la entrada hexadecimal como\int_eval:n { "F }
(= 15)&
— carácter de alineación para material tabular^
— carácter de superíndice para^^64
notación de estilo|
— un carácter 'otro', necesario paraexpl3
expresiones booleanas
Respuesta2
Quiero agregar información sobre la combinación de macros del kernel de LaTeX2e y funciones expl3. El comando \ExplSyntaxOn
no cambia el código cat del token especial @
. Entonces, para combinar las macros del kernel de LaTeX2e y las funciones expl3, también debes llamar \makeatletter
:
\ExplSyntaxOn
\makeatletter
\cs_set:Npn \@maketitle…