LaTeX执行系统命令

2023年11月13日, 实现了使用dtx编写python及其他程序代码的工作,这带来的好处就是可以文学化编程,在LaTeX中可以详细的记录程序的编写思路和使用方法,但是仍然存在一个没有解决的问题: 提取程序源码的过程中自动建立文件夹,并把源程序放在文件夹中。本身这个工作可以单独建立一个文件夹然后再执行分离程序,但是考虑到二合一文件的目标就是为了方便维护单一文件,所以需要添加这个LaTeX自动创建文件夹的功能。

LaTeX执行外部命令

通过阅读latex2e.pdf获得,LaTeX执行终端命令是通过\write18{cmd} 向终端输出命令cmd然后实现一系列的操作,但是由于这条命令的特殊性,当前的LaTeX的发行版都默认禁用了这一命令! 所以需要通过编译时追加选项来开启,即

开启write18执行个外部命令
1
2
3
xelatex --shell-escape    yourfile
or
xelatex --enable-write18 yourfile

其中选项--shell-escapeTeXLive中内置的选项,其他的可以执行--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}