짧은 텍스트(책 저자 이름)가 순서대로 저장되어 있습니다. 일부 저자 이름이 길어서 수동으로 줄 바꿈( \\
)을 삽입해야 합니다. 특별한 경우에는 이러한 이름을 완전히 소문자로 조판해야 합니다.
의 도움 덕분에조셉 라이트,LowerCase는 단락 나누기가 포함된 텍스트에서 잘 작동합니다.( \\
).
하지만 이제는 텍스트를 시퀀스에 저장 한 \g_sbmcpm_listofauthors_seq
다음 .\g_sbmcpm_listofauthors_lowercase_seq
\seq_map_function:NN
이름을 인쇄하려고 하면 \seq_use:Nn
컴파일 오류가 발생합니다. 이름이 없으면 \\
제대로 작동합니다. 하지만 \; 토큰을 포함하는 문자열이 \\
시퀀스의 마지막 위치에 있는 경우에만 작동합니다. ( \\
, \par
또는 를 사용해도 상관없습니다 \newline
). 다음과 같은 오류 메시지가 나타납니다.
! Undefined control sequence.
<inserted text> ... }{Author NameOne \\ TooLong}\\
\__xparse_start_expandable...
l.54 \printauthorslowercase
대신 \\
에 문자 \seq_use:Nn
를 사용 하면 ;
오류는 다음과 같습니다.
! Undefined control sequence.
<argument> \\
l.54 \printauthorslowercase
다음은 전체 코드입니다.
\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}
답변1
팔로우하는지는 잘 모르겠지만 \\
으로 전달하는 데 문제가 없는 것으로 보입니다 \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}