\input 命令中的文件数量未知

\input 命令中的文件数量未知

我需要files.tex在文件夹中加载未知数量的“ ”并使用\input命令运行 LaTeX。我正在尝试以下代码:

\bash[stdout]<br>
find . -type f | wc -l
\END

并运行\input{file.tex}未知次数。

答案1

管道可以与 shell 转义功能(-shell-escapeTeX Live 中的选项或MiKTeX 中的--enable-pipes/ )一起使用:--enable-write18

\documentclass{article}
\newread\mypipe
\begin{document}

% Open a pipe and read the files line by line.
% Line ends are disabled by \endlinechar=-1
\begingroup
  \openin\mypipe="|find . -name \string\*.tex"
  \endlinechar=-1
  \xdef\FileList{}
  \let\do\relax
  \makeatletter
  \@whilesw\unless\ifeof\mypipe\fi{%
    \read\mypipe to \x
    \xdef\FileList{\FileList\do{\x}}%
  }    
\endgroup
% The file list is now in macro `\FileList`, each file name
% as argument to `\do`.

\def\do#1{%
  \texttt{\detokenize{#1}}\par
  % \input{#1}%
}
\FileList
\end{document}

答案2

这是一个\globinput宏,它以路径(默认代表工作目录)作为可选参数.,以要传递find用于搜索文件的字符串作为强制参数。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\globinput}{O{.}m}
 {
  \alexandre_globinput:fn { \tl_to_str:n { #2 } } { #1 }
 }

\ior_new:N \g_alexandre_globinput_stream

\cs_new_protected:Nn \alexandre_globinput:nn
 {
  \ior_open:Nn \g_alexandre_globinput_stream
   {% the pipe
    "|find~#2~-name~#1"
   }
  \ior_map_inline:Nn \g_alexandre_globinput_stream
   {
    \input{##1}
   }
 }
\cs_generate_variant:Nn \alexandre_globinput:nn { f }
\ExplSyntaxOff

\begin{document}

\globinput[tmp]{\*.tex}

\end{document}

ls -R以下是为了显示设置的输出:

> ls -R
alexandre.aux   alexandre.log   alexandre.pdf   alexandre.tex   tmp/

./tmp:
a.tex   b.tex   c.txt   d.tex

在启用的文档上运行 LaTeX-shell-escape将输入a.texb.texd.tex。事实上,这就是控制台中显示的内容。

> pdflatex -shell-escape alexandre.tex 
This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) (preloaded format=pdflatex)
 \write18 enabled.
entering extended mode
(./alexandre.tex
LaTeX2e <2016/03/31> patch level 3
Babel <3.9r> and hyphenation patterns for 83 language(s) loaded.
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2016/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/expl3-code.tex)
(/usr/local/texlive/2016/texmf-dist/tex/latex/l3kernel/l3pdfmode.def)))
No file alexandre.aux.
(./tmp/a.tex) (./tmp/b.tex) (./tmp/d.tex) [1{/usr/local/texlive/2016/texmf-var/
fonts/map/pdftex/updmap/pdftex.map}] (./alexandre.aux) )</usr/local/texlive/201
6/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on alexandre.pdf (1 page, 10280 bytes).
Transcript written on alexandre.log.

请注意,如果您在当前目录下运行(没有路径参数),您还将输入主文件,这实际上并不理想。可以在映射中添加一个测试以排除\jobname.tex

相关内容