如何从LaTeX执行shell脚本?

yeg*_*256 49 shell latex

我正在尝试在LaTeX中执行以下操作:

\documentclass{article}
\begin{document}
\execute{/usr/local/bin/my-shell-script.sh}
\end{document}
Run Code Online (Sandbox Code Playgroud)

想法是/usr/local/bin/my-shell-script.sh.tex文档处理时执行并将其输出注入LaTeX流.有可能吗?

Dav*_*d Z 48

我会做类似以下的事情(部分由罗马建议的动机):制作你的LaTeX文件

\documentclass{article}
\begin{document}
\input{scriptoutput.tex}
\end{document}
Run Code Online (Sandbox Code Playgroud)

scriptoutput.tex使用生成文件

/usr/local/bin/my-shell-script.sh > scriptoutput.tex
Run Code Online (Sandbox Code Playgroud)

如果要在必要时自动运行,可以在makefile中对此进行编码.或者,您可以使用TeX \write18命令,

\documentclass{article}
\immediate\write18{/usr/local/bin/my-shell-script.sh > scriptoutput.tex}
\begin{document}
\input{scriptoutput.tex}
\end{document}
Run Code Online (Sandbox Code Playgroud)

我认为每次编译文档时都会自动运行shell脚本.该\immediate是必要的,以确保当遇到LaTeX的命令,而不是等到输出的页面被写入脚本运行.(有关出货例程的更多信息,请参阅此问题.)

  • 为makefile创意+1 (3认同)

Sim*_*rne 36

正如David指出的那样,您可以使用\write18调用外部程序,然后调用\input生成的输出文件.但是,您可能希望\immediate\write18在调用之前确保脚本已执行\input.

或者,如果您使用较新版本的pdf(la)tex(我认为在1.40之后),您可以使用管道输入命令将输出直接传送到文档中:

\documentclass{article}
\begin{document}
\input{|"/usr/local/bin/my-shell-script.sh"}
\end{document}
Run Code Online (Sandbox Code Playgroud)

对于任何一种方法,您都需要启用外部程序调用.对于TeXlive发行版,您需要使用-shell-escape选项调用latex ,或者对于MikTeX,我相信选项是-enable-write18.


qbi*_*qbi 6

您可以在TeX中执行此操作.该论文(PDF)展示了如何编写和内TeX的执行病毒.相同的原则适用于执行shell脚本.但是在我看来,编写一个Makefile是更实际的,它在LaTeX运行之前运行并插入结果.


CPB*_*PBL 5

在 Ubuntu 11.10 GNU/Linux 上

pdflatex --enable-pipes --shell-escape mytexfile
Run Code Online (Sandbox Code Playgroud)

%...
[This section currently is 
\input{|"wc kmb-box.tex| tr -s ' ' | cut -d' ' -f 4"}
% 2000 characters are allowed here

\input{kmb-box}

%...
Run Code Online (Sandbox Code Playgroud)

很好用。即,这使用 wordcount (wc) 来报告文件 kmb-box.tex 中有多少字符,该文件是(包含在)文档的一部分。

(顺便说一句,如果您想要单词而不是字符,只需更改“-f 4”中的数字即可)