5 在 LaTeX 中如何使用 for-loop 包含一组文件呢?

发布于 2023-02-05 09:30:02

请问一下,在 LaTeX 中如何使用 for-loop 包含一组文件呢?
MWE.tex 如下。

\documentclass[12pt,UTF8]{ctexart}
\usepackage{listings}
\begin{document}
%List of files:
%    bco0.dat  fco1.dat hcpm0.dat, ...
\lstinputlisting{./src/bmdl/bco0.dat}
\lstinputlisting{./src/bmdl/fco1.dat}
\lstinputlisting{./src/bmdl/hcpm0.dat}
% ...
\end{document} 

可以发现在上述代码中多次重复使用 lstinputlisting 语句,现在希望将该语句放在 foreach 循环中重复执行,所要表达的意思如下的伪代码所示。
伪代码如下。

ListOfFiles = {bco0.dat, fco1.dat, hcpm0.dat}; % 这是一个文件列表,用于存放需要包含的文件的名字
NumOfFiles = NumOfElements(ListOfFiles); % 这是文件的总数,用于 for 循环
for i = 1:1:NumOfFiles
    path = "path/to/file" & ListOfFiles(i);
    \lstinputlisting{path};
endfor

下面这一段代码可以实现 foreach 的功能,但是我还是希望把文件集合放置在一个单独的数组 ListOfFiles 中,即 ListOfFiles = {bco0.dat, fco1.dat, hcpm0.dat}。

\foreach \i in {bco0.dat, fco1.dat, hcpm0.dat}
{
    \lstinputlisting{./src/bmdl/\i}
}

查看更多

关注者
0
被浏览
1.2k
2 个回答
追风少年
追风少年 2023-02-05
这家伙很懒,什么也没写!
\newcommand*{\ListOfFiles}
{
bco0.dat,
fco1.dat,
hcpm0.dat
}

\foreach \i in \ListOfFiles
{
    \lstinputlisting{./src/bmdl/\i}
}
鱼香肉丝没有鱼先生
脾气不好,别来惹我!!!

如果待使用的文件在同一文件夹内,命名无规则且文件数量多,可以参考下
用LaTeX3通过遍历插入指定目录中的所有图像

% 使用LaTeX3遍历图像目录中的图像并实现插图
\documentclass{ctexart}

% 需要的宏包
\usepackage{expl3}
\usepackage{xparse}
\usepackage{graphicx}
\usepackage{zhlipsum}

% 开启LaTeX3环境
\ExplSyntaxOn

% 插图标签处理函数
\cs_new_protected:Nn \fig_label:N
{
  #1 % 可以是\label 或 \ref
  {
    fig \c_colon_str
    % 整数转换为小写罗马数字
    \int_to_roman:n {\l_cnt_int}
  }
}
% 声明计数整数变量,并赋初值为1
\int_new:N \l_cnt_int
\int_set:Nn \l_cnt_int {1}
% 声明文件名列表变量
\tl_new:N \l_figs_tl
% 创建clist
\clist_new:N \l_figs_clist
% 定义排版命令,默认排版当前目录下figs目录下的图像
\NewDocumentCommand{\figslist} {O{figs}}
{
  % 调用命令“ls -m #1/*”命令列出当前指定目录下的文件,并保存在\l_figs_tl中
  \sys_get_shell:nnN {ls~-m~#1/*}{}\l_figs_tl
  % 设置clist
  \clist_set:NV \l_figs_clist \l_figs_tl
  % 遍历clist并实现插图及label和ref引用
  \clist_map_inline:Nn \l_figs_clist
  {
    \zhlipsum[1]\par
    如``图\fig_label:N \ref''所示\par
    \begin{figure}[!htb]
      \centering
      \includegraphics[width=0.35\textwidth]{##1}
      \caption{##1}
      \fig_label:N \label
    \end{figure}
    \int_incr:N \l_cnt_int
  }
}

\ExplSyntaxOff

\begin{document}
  \figslist

  \figslist[pics]
\end{document}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览