编写一个 for 循环,遍历文本文件中的文件名

编写一个 for 循环,遍历文本文件中的文件名

我想创建每张幻灯片都包含一张图片的投影仪幻灯片。我有一个文件,其中包含所有图片位置的列表。

这是我的代码:

\documentclass{beamer}

% Import necessary packages
\usepackage{pdfpages}
\usepackage{tikz}

% Set beamer theme and color scheme
\usetheme{Madrid}
\usecolortheme{beaver}

% Define title and author
\title{PDF Slides}
\author{Your Name}

\begin{document}

% Title slide
\begin{frame}
\titlepage
\end{frame}

% Read list of PDF file names from text file
\newread\file
\openin\file=fileloop.txt
\loop
    \read\file to\fileline
    \unless\ifeof\file
        % Remove trailing newline character from file name
        \edef\fileline{\expandafter\stripnewline\fileline}
        % Create slide with PDF image for current file
        \begin{frame}
            \frametitle{\fileline}
            \centering
            \includegraphics[height=0.7\textheight, width=0.8\textwidth]{\fileline}
        \end{frame}
    \repeat
\closein\file

\end{document}

我收到的错误是:

多余的 },或忘记了 $。未定义的控制序列。缺少插入的 }。缺少插入的 $。

错误是由于\repeat 我检查了,没有任何内容未关闭。正确的使用方法是什么\repeat

编辑:

fileloop.txt 如下所示:

file_1.pdf
file_2.pdf
file_3.pdf

所有文件都与 latex 脚本位于同一文件夹中。它们每行列出一个文件,并且没有用逗号分隔。文件名中有下划线。我不确定这是否会导致问题。

答案1

使用expl3

\begin{filecontents*}{\jobname.lst}
example-image-a
example-image-b
example-image-c
\end{filecontents*}

\documentclass{beamer}

% Set beamer theme and color scheme
\usetheme{Madrid}
\usecolortheme{beaver}

%% boilerplate code for image inclusion from a file
\ExplSyntaxOn

\NewDocumentCommand{\dofromfile}{mm}
 {% #1 = file name, #2 = template
  \michal_read_do:nn { #1 } { #2 }
 }

\ior_new:N \g_michal_read_ior

\cs_new_protected:Nn \michal_read_do:nn
 {
  \ior_open:Nn \g_michal_read_ior { #1 }
  \ior_str_map_inline:Nn \g_michal_read_ior { #2 }
  \ior_close:N \g_michal_read_ior
 }

\ExplSyntaxOff

% Define title and author
\title{PDF Slides}
\author{Your Name}

\begin{document}

% Title slide
\begin{frame}
\titlepage
\end{frame}

\dofromfile{\jobname.lst}{
  \begin{frame}
  \frametitle{\texttt{#1}}
  \centering
  \includegraphics[height=0.7\textheight, width=0.8\textwidth]{#1}
  \end{frame}
}

\end{document}

我以前filecontents只是为了使示例独立起来。

在第二个参数中,\dofromfile您可以指定要对文件当前输入行执行的操作,用 表示#1

在此处输入图片描述

相关内容