我的程序产生多个输出:我编译了一个 .tex 文件,其中一些是在命令行中生成的。pdf-latex 的编译信息对我来说没用,我想隐藏它以使我的命令行输出可读。
我见过这网站提到一些盒子加厚应该可以做到这一点,但我还没有找到等效的命令行。
答案1
您可以重定向所有pdflatex
输出:
- 对于 sh:
pdflatex ... > /dev/null 2>&1
- 对于cmd:
pdflatex ... > NUL 2>&1
或者您可以使用以下-quiet
选项:
pdflatex -quiet ...
答案2
在我的例子中,没有-quiet
模式。所以我不得不-interaction=batchmode
使用安德鲁的评论。
但随后又出现了另一个问题——你不会看到哪里出了问题以及为什么会出现问题,因为错误也被抑制batchmode
。
我最终使用的结果是pdflatex
通过grep
仅输出错误来抑制所有输出:
: | pdflatex -halt-on-error src.tex | grep '^!.*' -A200 --color=always
我之所以使用是-halt-on-error
因为在出现错误的情况下,您基本上无法使用交互模式(grep
禁用程序和用户之间的对话)。此外,为了确保pdflatex
永远不会提示输入,让我们通过管道输入没有输出的命令(:
命令)。
让我也解释一下这些grep
论点:
^!.*
- 在 pdflatex 输出中搜索的字符串
- 它匹配所有以 开头的行
!
,这些行被视为错误行
-A200
- 每场比赛后输出 200 行
- 这样我就能确保还打印匹配的错误行后面的相关信息
--color=always
- 这为我们提供了彩色输出,以便我们可以清楚地看到出了什么问题以及原因 -问题以粗体红色显示
包装脚本
pdflatex
我创建了一个包装器脚本,以提供更方便的解决方案。它的用法几乎与/本身相同pdftex
。您可以将其作为CTAN 包或GitLab 存储库。
快速安装
以下是使用这一行命令安装最新版本的方法:
curl -s https://gitlab.com/jirislav/pdftex-quiet/raw/latest/pdftex-quiet | \
sudo tee /usr/local/bin/pdftex-quiet >/dev/null \
&& sudo chmod +x /usr/local/bin/pdftex-quiet \
&& sudo ln -sf /usr/local/bin/pdftex-quiet /usr/local/bin/pdflatex-quiet
以下是如何运行包装器脚本的示例:
pdftex-quiet compile-me.tex
# You may also provide additional attributes to `pdflatex`
pdflatex-quiet -output-format=dvi -output-directory=/tmp compile-me.tex
您还可以显示pdflatex-quiet
/pdftex-quiet
脚本的版本或帮助:
pdflatex-quiet -v # or --version
pdflatex-quiet -h # or --help
pdflatex-quiet
和pdftex-quiet
之间的区别正如这里解释的那样受到尊重——感谢 Denis Bitouzé 的评论。
答案3
FWIW,https://ctan.org/pkg/texfot是我尝试解决这个问题 —— 消除来自 tex 引擎的详细输出,同时仍然显示有趣的消息(我真正想要做些什么的消息)。——karl
答案4
更新 2023-02-05
我已经切换到构造并且不再使用下面的解决方案。
tex-to-pdf 编译器 bash 函数
我最终将以下答案结合起来
鲁本,
安德鲁和
伊里斯拉夫
并将其作为函数放在我的.bashrc
.
简洁版本
所有输出都重定向到一个.txt
文件中。显示该文件的错误消息并.txt
删除该文件。
您可以将以下函数放入您的.bashrc
:
function tex-pdf {
pdflatex -halt-on-error -interaction=nonstopmode $1 > $1.txt
grep '^!.*' --color=always $1.txt
rm $1.txt
}
export -f tex-pdf
你可以像这样使用它
$ tex-pdf report
长版本
如果您使用 BibTeX 或者想要删除编译过程中创建但不需要的文件,您可以通过以下方式扩展该功能:
function tex-pdf {
printf "Step 1/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 2/4 - bibtex\n"
bibtex $1.aux > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 3/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
printf "Step 4/4 - pdflatex\n"
pdflatex -halt-on-error -interaction=nonstopmode $1.tex > $1.txt
grep '^!.*' --color=never $1.txt
rm -f $1.txt $1.aux $1.bbl $1.blg $1.log $1.out $1.toc
}
export -f tex-pdf
如果您的代码没有错误,则输出将是:
$ tex-pdf report
Step 1/4 - pdflatex
Step 2/4 - bibtex
Step 3/4 - pdflatex
Step 4/4 - pdflatex