![执行外部 bash 文件](https://linux22.com/image/371262/%E6%89%A7%E8%A1%8C%E5%A4%96%E9%83%A8%20bash%20%E6%96%87%E4%BB%B6.png)
使用代码
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx,grffile}
\newcommand{\filename}{}
\newcommand{\croppedfilename}{}
\makeatletter
\newcommand{\includecroppedgraphics}[1]{%
\filename@parse{#1}%
\edef\croppedfilename{\filename@area\[email protected].\filename@ext}%
\immediate\write18{pdfcrop #1 \croppedfilename}%
\fbox{\includegraphics[width=\linewidth]{\croppedfilename}}%
}
\makeatother
\begin{document}
\includecroppedgraphics{mypath/myimage.pdf}
\end{document}
我尝试裁剪 PDF。这对我的多页 PDF 不起作用。起作用的是脚本
#!/bin/bash
temdirname="./croppedpages"
mkdir "$temdirname"
pdftk "$1" burst output "$temdirname"/Page_%03d.pdf
while read -d $'\0' pdfpage ; do
krop --go --autotrim -o "$pdfpage" "$pdfpage"
done < <(find "$temdirname" -print0)
pdftk "$temdirname"/*.pdf output "$2"
rm -R "$temdirname"
我基于
但目前为止,它只能在命令行中使用。现在我想将其包含在 LaTeX 脚本中,但调用不起作用。我想我可以简单地更改
\immediate\write18{pdfcrop #1 \croppedfilename}%
到
\immediate\write18{splitcropmerge.sh #1 \croppedfilename}%
日志中写道
runsystem(splitcropmerge.sh Pakete-Uebersicht/Pakete-Uebersicht.pdf Pakete-Uebe rsicht/Pakete-Uebersicht.cropped.pdf)...已执行。
LaTeX 警告:在输入行 187 上未找到文件“Pakete-Uebersicht/Pakete-Uebersicht.cropped.pdf”。
根据以下说明,Krop 是从 arminstraub.com/downloads/krop/krop_0.5.0-1_all.deb 软件包中安装的https://www.linuxbabe.com/ubuntu/krop-debian-8-ubuntu-16-04-pdf-crop-tool和
sudo dpkg -i krop_0.5.0-1_all.deb
答案1
免责声明:我在评论while
您使用的循环后测试了您的代码krop
。
命令内部内容的\write18
执行方式与您在命令提示符中输入的内容完全相同。如果您执行:
splitcropmerge.sh mypath/myimage.pdf mypath/myimage.cropped.pdf
您将收到来自 shell 的错误。另一方面,如果您运行:
bash splitcropmerge.sh mypath/myimage.pdf mypath/myimage.cropped.pdf
它会起作用(当然,如果文件存在的话)。
因此在以下行中执行相同操作\write18
:
\immediate\write18{bash splitcropmerge.sh #1 \croppedfilename}%
正如 @RobtAll 所指出的,LuaLaTeX 用户可能需要\usepackage{shellesc}
。LuaLaTeX(0.87 及更高版本)没有与 TeX 相同的输出流,因此 18 可以是任何文件。该包shellesc
提供了\ShellEscape
宏来替换 TeX 的\write18
:
\ShellEscape{bash splitcropmerge.sh #1 \croppedfilename}%