我正在创建一个宏,用于将文件列表转换为以逗号分隔的等宽文件名列表,并将其用作标题。
我已经编写了一个简短的脚本来实现这一点: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}