expl3: elementos de sequência em letras minúsculas com quebras de linha

expl3: elementos de sequência em letras minúsculas com quebras de linha

Tenho alguns textos curtos (nomes dos autores dos livros) armazenados em uma sequência. Alguns nomes de autores são longos e, portanto, tenho que inserir manualmente uma quebra de linha ( \\). Em um caso específico, tenho que digitar esses nomes completamente em minúsculas.

Graças à ajuda deJosé Wright, oLowerCase funciona bem com texto que contém quebras de parágrafo( \\).

Mas agora, armazeno o texto em uma sequência \g_sbmcpm_listofauthors_seqe depois crio uma nova sequência com o texto em minúsculas \g_sbmcpm_listofauthors_lowercase_sequsando \seq_map_function:NN.

Quando tento imprimir os nomes, \seq_use:Nnrecebo erros de compilação. Se os nomes não tiverem, \\funciona bem. Mas se houver algum \; só funciona quando a string que contém o \\token está na última posição da sequência. (Não importa se eu uso \\, \parou \newline). Recebo uma mensagem de erro como esta

! Undefined control sequence.
<inserted text> ... }{Author NameOne \\ TooLong}\\
                                                  \__xparse_start_expandable...
l.54     \printauthorslowercase

Se em vez de \\no \seq_use:Nn, eu usar um ;caractere o erro ficará assim:

! Undefined control sequence.
<argument> \\

l.54     \printauthorslowercase

Abaixo está o 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}

Responder1

Não tenho certeza se acompanho, mas não vejo problemas em passar \\para \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}

informação relacionada