根据文件所含关键字进行有条件输入

根据文件所含关键字进行有条件输入

我有几个文件,每个文件都包含一个练习,为了制作文档,我包含了一组这样的文件。其中一些文件需要特殊处理,因此我需要创建一个条件输入命令,在包含该文件之前先测试该文件第一行上的关键字。

有些文件以以下内容开头:

\begin{minipage}

另一个 :

something else

\item我只想在文件不以 开头时在包含之前添加\begin{minipage}

答案1

这是一个概念证明,因为问题中缺少细节。\tarassinput只有当第一行与第二个参数一致时,命令才会输入文件。

\begin{filecontents*}{typea.tex}
% type A
here latex stuff
\end{filecontents*}

\begin{filecontents*}{typeb.tex}
% type B
here latex stuff
\end{filecontents*}

\documentclass{article}

\makeatletter
\newread\tarass@read
\newcommand{\tarassinput}[2]{%
  % #1 is the name of the file, #2 is the first line
  \openin\tarass@read=#1\relax
  \begingroup\catcode`\%=12
  \edef\tarass@tempa{\@percentchar\space#2\space}%
  \read\tarass@read to\tarass@tempb
  \closein\tarass@read
  \ifx\tarass@tempa\tarass@tempb
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {\endgroup\input{#1}}%
  {\endgroup}%
}
\makeatother

\begin{document}

Yes: \tarassinput{typea}{type A}

No: \tarassinput{typeb}{type A}

\end{document}

在此处输入图片描述

现在有了更多的信息,以下是可能性l3regex

\begin{filecontents*}{typea.tex}
here latex stuff
\end{filecontents*}

\begin{filecontents*}{typeb.tex}
\begin{minipage}{5cm}
here latex stuff
\end{minipage}
\end{filecontents*}

\documentclass{article}
\usepackage{xparse,l3regex}

\ExplSyntaxOn
\NewDocumentCommand{\tarassinput}{m}
 {
  \tl_set_from_file:Nnn \l_tarass_input_tl { } { #1 }
  % \A matches the start
  % \c{begin} matches \begin
  % \cB. matches any "group begin" token
  % \cE. matches any "group end" token
  \regex_match:nVF { \A \c{begin} \cB. minipage \cE. } \l_tarass_input_tl { \item }
  \tl_use:N \l_tarass_input_tl
 }
\cs_generate_variant:Nn \regex_match:nnF { nV }
\ExplSyntaxOff

\begin{document}

\begin{itemize}

\item Start

\tarassinput{typea}

\tarassinput{typeb}

\end{itemize}

\end{document}

在此处输入图片描述

相关内容