我有一些短文本(書籍作者姓名)儲存在序列中。有些作者姓名很長,因此我必須手動插入換行符號(\\
)。在特定情況下,我必須將這些名稱完全小寫排版。
感謝以下人士的協助約瑟夫·賴特, 這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}