执行外部 bash 文件

执行外部 bash 文件

这是文件解析后执行 write18


使用代码

\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}%

相关内容