解释3:理解使用序列的新命令如何处理参数

解释3:理解使用序列的新命令如何处理参数

我刚刚开始expl3。我有一个上一个问题它启动了自动打印特定论文作者及其更多信息的过程。

Alan Munn 的解决方案非常有效。为了仅使用命令中定义的作者,我尝试创建自己的命令来从序列中获取特定信息,并用破折号分隔它们(因此,我将其他变量保留在 MWE 之外,并且下面提到的两个命令仅打印作者。\printauthormeta通常会打印其他信息)。

如果我使用一个简单的新定义命令,\NewDocumentCommand{\printauthornames}{}{\seq_use:Nn \l_dai_authors_seq {~--~}}当我回忆时它可以正常工作\printauthornames

正确排列的名字

但是,如果我尝试从解决方案中复制工作流程:首先定义一个新expl3命令\cs_new_protected:Nn \dai_map_author_names:nn,然后在中使用它\NewDocumentCommand(就像原作者所做的那样\dai_map_author_info:nn,参见 MWE),作者会被多次打印:

名字打印得太频繁

以下是完整的 MWE,其中注释掉了可用的简单命令:

\documentclass[%
]{article}
\usepackage[T1]{fontenc}

\ExplSyntaxOn
% First define three sequences for storing the data
\seq_new:N \l_dai_authors_seq

% User command to enter authors (comma separated)
\NewDocumentCommand{\authors}{m}{
    \seq_set_from_clist:Nn \l_dai_authors_seq {#1}
}

% command to print only authors seperated by dash's: not working
\cs_new_protected:Nn \dai_map_author_names:nn {
    {\seq_use:Nn \l_dai_authors_seq {~--~}}
}

% internal command to print an author/affiliations/email block
\cs_new_protected:Nn \dai_map_author_info:nn {
    {\parindent=0pt
        {\seq_item:Nn \l_dai_authors_seq {#1}\par}
        \vspace{\baselineskip}
    }
}
% User command to print all the author blocks which would include additional information in the full document
\NewDocumentCommand \printauthormeta {} {
    \seq_map_indexed_function:NN \l_dai_authors_seq \dai_map_author_info:nn
}
%\NewDocumentCommand{\printauthornames}{}{\seq_use:Nn \l_dai_authors_seq {~--~}}
\NewDocumentCommand \printauthornames {} {
    \seq_map_indexed_function:NN \l_dai_authors_seq \dai_map_author_names:nn
}
\ExplSyntaxOff

\authors{Margaret Atwood, Zadie Smith, Madeleine Thien}

\begin{document}

\section{Autoren}

\printauthormeta

\printauthornames

\end{document}

由于简单的解决方案仅能NewDocumentComman完美运行,我只想了解我第二次提到的尝试首先定义一个内部expl3命令,然后可以在“常规”Latex 命令中使用它时出了什么问题。我猜这可能与参数有关:nn。当它们嵌套在多个命令/定义中时,我仍然无法识别如何使用它们。

相关内容