TeX \@for 在章节标题内循环

TeX \@for 在章节标题内循环

我正在创建一个宏,用于将文件列表转换为以逗号分隔的等宽文件名列表,并将其用作标题。

我已经编写了一个简短的脚本来实现这一点:MWE:

\documentclass[10pt]{article}
\usepackage[usenames]{color} %used for font color
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths
\usepackage[utf8]{inputenc} %useful to type directly diacritic characters

\usepackage{url}
\pagestyle{empty}
\begin{document}

\edef\files{file_1.x,file_2.y,file_3.z}

\edef\comma{}%

\makeatletter
\@for\file:=\files\do{%
  \comma%
  \edef\comma{, }%
  \expandafter\url\expandafter{\file}%
}%

\end{document}

但是,我找不到如何使用输出作为标题:只需将\@for循环包装在\section{}标签中就会抛出未定义的控制序列错误。我该如何实现这一点?

答案1

这是一个expl3拆分列表(使用\clist...)并自动设置的版本\section

\documentclass[10pt]{article}
\usepackage[usenames]{color} %used for font color
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths
\usepackage[utf8]{inputenc} %useful to type directly diacritic characters

\usepackage{url}
\usepackage{xparse}
\pagestyle{empty}    
\ExplSyntaxOn
\newcommand{\splitlist}[2]{%
  \clist_set:Nx \l_tmpa_clist {#1}
  \clist_map_inline:Nn \l_tmpa_clist {\csname #2\endcsname{\protect\url{##1}}}
}
\ExplSyntaxOff



\begin{document}

\edef\files{file_1.x,file_2.y,file_3.z}

\splitlist{\files}{section}


\end{document}

在此处输入图片描述

更新

由于文件列表包含_字符,因此转到expl3功能并使用\clist变量也非常方便。但是,最后一项不能有值,,所以不要使用它(我\int_compare为此添加了一个条件)。

为了在带有移动参数的命令中使用此类命令\section,最好使用(而不是一直\DeclareRobustCommand使用带有的命令)\protect

\documentclass[10pt]{article}
\usepackage[usenames]{color} %used for font color
\usepackage{amssymb} %maths
\usepackage{amsmath} %maths
\usepackage[utf8]{inputenc} %useful to type directly diacritic characters

\usepackage{url}
\usepackage{xparse}
\pagestyle{empty}    

\ExplSyntaxOn

\DeclareRobustCommand{\splitlist}[1]{%
  \clist_set:Nx \l_tmpa_clist {#1}
  \int_set:Nn \l_tmpb_int {\clist_count:N \l_tmpa_clist}
  \clist_map_inline:Nn \l_tmpa_clist {
    \int_incr:N \l_tmpa_int
    \url{##1}%
    % is it the last item? If yes, add no , then!
    \int_compare:nNnT{\l_tmpa_int} < {\l_tmpb_int}{,~}
  }
}
\ExplSyntaxOff



\begin{document}

\edef\files{file_1.x,file_2.y,file_3.z}

\section{\splitlist{\files}}


\end{document}

在此处输入图片描述

相关内容