Tengo un texto breve (nombres de autores de libros) almacenado en una secuencia. Algunos nombres de autores son largos y, por lo tanto, tengo que insertar manualmente un salto de línea ( \\
). En un caso específico, tengo que escribir estos nombres completamente en minúsculas.
Gracias a la ayuda deJosé Wright, elLowerCase funciona bien con texto que contiene saltos de párrafo( \\
).
Pero ahora almaceno el texto en una secuencia \g_sbmcpm_listofauthors_seq
y luego creo una nueva secuencia con el texto en minúsculas \g_sbmcpm_listofauthors_lowercase_seq
usando \seq_map_function:NN
.
Cuando intento imprimir los nombres, \seq_use:Nn
aparece errores de compilación. Si los nombres no \\
los tienen, funciona bien. Pero si hay algunos \; solo funciona cuando la cadena que contiene el \\
token está en la última posición de la secuencia. (No importa si uso o \\
) . Recibo un mensaje de error como este\par
\newline
! Undefined control sequence.
<inserted text> ... }{Author NameOne \\ TooLong}\\
\__xparse_start_expandable...
l.54 \printauthorslowercase
Si en lugar de \\
en \seq_use:Nn
, uso un ;
carácter el error se ve así:
! Undefined control sequence.
<argument> \\
l.54 \printauthorslowercase
A continuación se muestra el código completo:
\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand \LowerCase { m }
{
\cs_set_eq:NN \__texnik_newline: \\
\cs_set_protected:Npx \\ { \exp_not:o \\ }
\tl_lower_case:n {#1}
\cs_set_eq:NN \\ \__texnik_newline:
}
\cs_new:Npn \add_lowerauthor #1
{
\tl_set:No \l_tmpa_tl {\LowerCase{#1}}
\seq_gput_right:No \g_sbmcpm_listofauthors_lowercase_seq {\l_tmpa_tl}
\seq_log:N \g_sbmcpm_listofauthors_lowercase_seq
}
\seq_new:N \g_sbmcpm_listofauthors_seq
\DeclareDocumentCommand{\mainauthor} {m} {%
\seq_put_right:Nn \g_sbmcpm_listofauthors_seq {#1}
}
\seq_new:N \g_sbmcpm_listofauthors_lowercase_seq
\NewDocumentCommand \printauthorslowercase { }
{
\seq_map_function:NN \g_sbmcpm_listofauthors_seq \add_lowerauthor
\seq_use:Nn \g_sbmcpm_listofauthors_lowercase_seq {;}
}
\ExplSyntaxOff
%% This works
% \mainauthor{Author NameOne}
% \mainauthor{Author NameTwo}
%%% This also works
% \mainauthor{Author NameOne}
% \mainauthor{Author NameTwo \\ TooLong}
%%% This doesn't works
\mainauthor{Author NameOne \\ TooLong}
\mainauthor{Author NameTwo}
\begin{document}
\begin{tikzpicture}[overlay, remember picture]
\node[align=left] (text1)
{%
\printauthorslowercase
};
\end{tikzpicture}
\end{document}
Respuesta1
No estoy seguro de seguirlo, pero no veo problemas al pasar \\
a \text_lowercase:n
.
\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand{\mainauthor} {m}
{
\seq_put_right:Nn \g_sbmcpm_listofauthors_seq {#1}
}
\NewDocumentCommand \printauthorslowercase { }
{
\seq_map_function:NN \g_sbmcpm_listofauthors_seq \sbmcpm_add_lowerauthor:n
\seq_use:Nn \l_sbmcpm_listofauthors_lowercase_seq {;}
}
\seq_new:N \g_sbmcpm_listofauthors_seq
\seq_new:N \l_sbmcpm_listofauthors_lowercase_seq
\cs_new_protected:Npn \sbmcpm_add_lowerauthor:n #1
{
\seq_put_right:Nn \l_sbmcpm_listofauthors_lowercase_seq { \text_lowercase:n {#1} }
}
\ExplSyntaxOff
\mainauthor{Author NameOne \\ TooLong}
\mainauthor{Author NameTwo}
\begin{document}
\begin{tikzpicture}[overlay, remember picture]
\node[align=left] (text1)
{%
\printauthorslowercase
};
\end{tikzpicture}
\end{document}