我正在整理一系列书籍,这些书籍使用了其他文件的内容。我希望将每个参考资料放在一个文件中,以避免冗余内容,并更轻松地查看和更正内容。
让我解释一下,我为每个参考编号创建了一个文件,例如:
CEC/n/0001.tex
CEC/n/0002.tex
CEC/n/0003.tex
CEC/n/0004.tex
CEC/n/0005.tex
CEC/n/0006.tex
CEC/n/0007.tex
....
CEC/n/9999.tex
假设我需要在我的一本书中包括数字 1 到 5、数字 22 和数字 17。我目前正在执行以下操作,效果良好:
\input{../../CEC/n/0001}
\input{../../CEC/n/0002}
\input{../../CEC/n/0003}
\input{../../CEC/n/0004}
\input{../../CEC/n/0005}
\input{../../CEC/n/0022}
\input{../../CEC/n/0017}
有没有什么方法可以简化它?
我的想法是能够接收一个数字数组[1,2,3,4,5,22,17]
或[1 to 5 AND 22 AND 17]
使用它来按名称包含每个文件?我需要在卷的不同部分包含许多像上面这样的参考组合,我想简化这个任务。
抱歉,由于文件包含问题,我无法创建一个最小的可验证的示例。
答案1
如果文件名具有通用结构,则以下一组宏可以完成此任务。主命令是
\multiinput{<prefix>}{<format>}{<list>}[<post action>]
在你的情况下
\multiinput{../../CEC/n/}{0000}{1-5,22,17}
代码,在第二种情况下,我将其添加\par
为在文件输入后要执行的后续操作。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\multiinput}{mmm+O{}}
{% #1 = fixed part
% #2 = format for the variable part
% #3 = list
% #4 = post action
\cedano_multiinput:nnnn { #1 } { #2 } { #3 } { #4 }
}
\seq_new:N \l__cedano_multiinput_items_seq
\seq_new:N \l__cedano_multiinput_interval_seq
\cs_new_protected:Nn \cedano_multiinput:nnnn
{
% split the list at commas
\seq_set_split:Nnn \l__cedano_multiinput_items_seq {,} { #3 }
\seq_map_inline:Nn \l__cedano_multiinput_items_seq
{
\__cedano_multiinput_item:nnnn { #1 } { #2 } { ##1 } { #4 }
}
}
\cs_new_protected:Nn \__cedano_multiinput_item:nnnn
{
\seq_set_split:Nnn \l__cedano_multiinput_interval_seq { - } { #3 }
\int_compare:nTF { \seq_count:N \l__cedano_multiinput_interval_seq = 1 }
{% just one item
\__cedano_multiinput_file:nnnn { #1 } { #2 } { #3 } { #4 }
}
{% multiple files
\int_step_inline:nnn
{ \seq_item:Nn \l__cedano_multiinput_interval_seq { 1 } } % start
{ \seq_item:Nn \l__cedano_multiinput_interval_seq { 2 } } % end
{ \__cedano_multiinput_file:nnnn { #1 } { #2 } { ##1 } { #4 } }
}
}
\cs_new_protected:Nn \__cedano_multiinput_file:nnnn
{
\file_input:n { #1 \__cedano_multiinput_pad:nn { #2 } { #3 } } #4
}
\cs_new:Nn \__cedano_multiinput_pad:nn
{
\prg_replicate:nn { \tl_count:n { #1 } - \tl_count:n { #2 } } { 0 } #2
}
\ExplSyntaxOff
\begin{document}
\textbf{From 1 to 10}
\multiinput{inputs/}{0000}{1-10}
\bigskip
\textbf{Selection}
\multiinput{inputs/}{0000}{1-2,4,7,9-10}[\par]
\end{document}
我在子目录中创建了包含以下内容的inputs
文件0001.tex
0010.tex
I'm number XXXX