You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LaTeX中执行shell命令并将输出插入生成的PDF文件

问题原因及解决方法

空文件生成的核心原因

  • LaTeX执行\write18时的工作目录和你手动执行命令的终端目录不一致,找不到对应*.py文件,grep执行无输出
  • grep匹配不到内容时返回非0退出码,会被\write18判定为执行失败,截断输出
  • 错误输出未被重定向,执行报错时无内容写入文件

完整修复方案

步骤1:修正shell命令写法

优先推荐导入currfile包自动获取当前tex文件所在目录,避免硬编码路径,导言区完整代码如下:

\usepackage{verbatim}
\usepackage{currfile} % 用于自动获取当前tex文件目录
% 执行grep命令,写入输出文件
\immediate\write18{cd "\currfiledir" && grep -FIrn TODO *.py > scriptoutput.txt 2>&1 || echo "当前暂无待完成TODO项" > scriptoutput.txt}

命令各部分说明:

  • cd "\currfiledir":切换到当前tex文件所在目录,确保能找到同目录下的py文件
  • 2>&1:将grep的错误输出也重定向到目标文件,执行报错时也能看到错误信息排查问题
  • || echo ...:grep匹配不到内容或者执行出错时,兜底写入提示文本,避免完全空输出

步骤2:正文插入TODO内容

在「未来工作」章节插入如下代码即可将结果写入PDF:

\section{未来工作}
\verbatiminput{scriptoutput.txt}

步骤3:确认编译参数

确认你的编译工具的pdflatex命令已正确添加--shell-escape参数,示例编译命令如下:

pdflatex --shell-escape -synctex=1 -interaction=nonstopmode 你的文件名.tex

如果使用TeXstudio等IDE,需要在构建配置的Pdflatex命令中添加该参数。

可选优化

如果需要更美观的带格式输出,可以替换verbatim包为listings包,自定义代码块样式展示TODO列表。

内容的提问来源于stack exchange,提问作者Joshua Snider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 01:21:04