我正在尝试在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的命令,而不是等到输出的页面被写入脚本运行.(有关出货例程的更多信息,请参阅此问题.)
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.
在 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”中的数字即可)