如何创建列表并将其分配给变量?

如何创建列表并将其分配给变量?

我需要创建一个逗号(或其他任何形式)分隔的单词列表以供将来使用,并将其分配给变量(宏)。列表中的单词应放在单独的行中。当我将其用于此目的时,\def需要在行尾\newcommand添加百分号。%

如何避免使用该%标志?

我的想法是使用 expl3 创建列表:

\NewDocumentCommand{\makelist}{ m m}
{
  \tl_set:Nx \l_ty_tl {#1}
  \csc_new:nn {#2}{\tl_use:N \l_ty_tl}

}

并像使用它一样

\makelist{
Elstat, 
Magstat, 
Current
}{\mylist}

\multiinclude{\mylist}

下面的 MWE

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentCommand{\multiinclude}{ mO{} }
 {
  \tl_set:Nx \l_ty_tl {#2}
  %\clist_map_inline:Nn #1 { \include{##1\l_ty_tl}} <= real usage
  \clist_map_inline:Nn #1 { ##1\l_ty_tl} %<= for MWE
 }

\ExplSyntaxOff

\begin{document}

\newcommand\mylist{%
Elstat,% 
Magstat,% 
Current}
\chapter{Problems}
\multiinclude{\mylist}[]

\chapter{Answers}
\multiinclude{\mylist}[-AnswersFile]

\end{document}

答案1

你必须“规范化”该列表:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentCommand{\multiinclude}{ mO{} }
 {
  \clist_set:Nx \l_sergio_mi_clist { #1 }
  \clist_map_inline:Nn \l_sergio_mi_clist { \noindent ##1 #2 \par }
 }
\ExplSyntaxOff

\begin{document}

\newcommand\mylist{
  Elstat,
  Magstat,
  Current
}

\section{Problems}
\multiinclude{\mylist}[]

\section{Answers}
\multiinclude{\mylist}[-AnswersFile]

\end{document}

在此处输入图片描述

另一方面,我会避免\newcommand使用列表,而是直接使用名称:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\NewDocumentCommand{\multiinclude}{ m O{} }
 {
  \clist_map_inline:cn { l_sergio_list_#1_clist } { \noindent ##1 #2 \par }
 }
\NewDocumentCommand{\makelist}{ mm }
 {
  \clist_set:cn { l_sergio_list_#1_clist } { #2 }
 }
\ExplSyntaxOff

\begin{document}

\makelist{mylist}{
  Elstat,
  Magstat, 
  Current
}

\section{Problems}
\multiinclude{mylist}[]

\section{Answers}
\multiinclude{mylist}[-AnswersFile]

\end{document}

相关内容