¿Por qué el comando creado con expl3 no funciona con el comando como argumento?
Estoy tratando de crear mi comando regex, con expl3, que empujará el guión detrás de las palabras de menos de tres caracteres. Eso no es problema y funciona con texto simple, pero cuando lo intento \inputo \includecomo argumento, mi expresión regular no funciona. Después de eso, creo un nuevo comando con texto incluido en el archivo, pero eso tampoco funciona.
Como ejemplo, estoy escribiendo código a continuación, es el mismo que el núcleo de mi problema.
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\tl_new:N \l_myCommand_tl
\cs_new:Npn \myCommand #1 {
\tl_set:Nn \l_myCommand_tl {#1}
\regex_replace_all:nnN {([\ \t\n\_\/]{1})(.{1,3})([\ \t\n]{1})} {\1\2\-} \l_myCommand_tl
\tl_use:N \l_myCommand_tl
}
\ExplSyntaxOff
\newcommand{\SomeText}{Just put dast behind words with three or less length.}
\begin{document}
\myCommand{Just put dast behind words with three or less length.}
\myCommand{\SomeText}
\end{document}
Y aquí está la pdflatexsalida.
¿Hay algo que pueda hacer? Traté de usar \expandafter, pero esto no me funciona. ¿Debo usar \NewDocumentCommand? Si es cierto, ¿cómo puedo hacerlo, por favor?
Respuestas
Parece que no entendió cómo usar la nueva convención de nomenclatura de LaTeX3, así como la separación entre la capa de programación y la capa de documento. Así es como puedes hacerlo:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_jiri_tmpa_tl
\cs_new:Npn \jiri_dash_putter:n #1 {
\tl_set:Nn \l_jiri_tmpa_tl { #1 }
\regex_replace_all:nnN { \b(\w{1,3})\b } { \1\2- } \l_jiri_tmpa_tl
\tl_use:N \l_jiri_tmpa_tl
}
\cs_generate_variant:Nn \jiri_dash_putter:n { e }
\NewDocumentCommand \myCommand { m }
{ \jiri_dash_putter:e { #1 } }
\ExplSyntaxOff
\newcommand{\SomeText}{Just put dash behind words with three or less length.}
\begin{document}
\myCommand{Just put dash behind words with three or less length.}
\myCommand{\SomeText}
\end{document}
Es decir:
- Agrupe todos los nombres que defina en un módulo, lo llamé
jiriaquí. - Adhiérase a la convención de nomenclatura en la capa de programación. En particular, cualquier función definida con
\cs_new:Npndebe adherirse a esta convención. Eche un vistazo a la documentación de LaTeX3 para obtener más detalles. - Se utiliza xparsepara definir funciones a nivel de documento.
- Para expandir macros antes de aplicar la expresión regular, utilice las capacidades de control de expansión de LaTeX3. (Usé la
evariante aquí).
Como nodo lateral, puede usar la variable cero \l_tmpa_tlaquí, en lugar de definir la suya propia.