我需要files.tex
在文件夹中加载未知数量的“ ”并使用\input
命令运行 LaTeX。我正在尝试以下代码:
\bash[stdout]<br>
find . -type f | wc -l
\END
并运行\input{file.tex}
未知次数。
答案1
管道可以与 shell 转义功能(-shell-escape
TeX 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.tex
、b.tex
和d.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
。