LaTeX执行系统命令
2023年11月13日,
实现了使用dtx
编写python
及其他程序代码的工作,这带来的好处就是可以文学化编程,在LaTeX
中可以详细的记录程序的编写思路和使用方法,但是仍然存在一个没有解决的问题:
提取程序源码的过程中自动建立文件夹,并把源程序放在文件夹中。本身这个工作可以单独建立一个文件夹然后再执行分离程序,但是考虑到二合一文件的目标就是为了方便维护单一文件,所以需要添加这个LaTeX
自动创建文件夹的功能。
LaTeX执行外部命令
通过阅读latex2e.pdf
获得,LaTeX
执行终端命令是通过\write18{cmd}
向终端输出命令cmd
然后实现一系列的操作,但是由于这条命令的特殊性,当前的LaTeX
的发行版都默认禁用了这一命令!
所以需要通过编译时追加选项来开启,即
1 | xelatex --shell-escape yourfile |
其中选项--shell-escape
是TeXLive
中内置的选项,其他的可以执行--enable-write18
。但是根据latex2e.pdf
所述,LaTeX
提供了一个宏包shellesc
基于\write18
,
它最初的目的是提供命令\ShellEscape{cmd}
在所有的TeX
引擎下工作,所以为了实现LaTeX
运行外部命令的目标,还是引用shellesc
宏包更可靠一些。
注意:详细的说明请参考文件latex2e.pdf 第17.5.4
节 \write18
。
多个Shell命令写在一行
为了配合LaTeX
执行外部命令,需要将简单命令写为一行,或单独写成一个脚本调用,这时候使用分号分开即可,例如我的LaTeX
源文档中自动检测及生成一个文件夹的操作如下:
1 | \ShellEscape{if [ ! -e out ]; then mkdir out ; fi} |