文件解析后执行 write18

文件解析后执行 write18

跟进 获取 write18 接受/扩展命令


我想裁剪 PDF 并打印。我的\the\pdfshellescape是 1,所以我的 shell-escape 正在工作。我的 MWE 是

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{graphicx}

\newcommand{\filename}{}
\newcommand{\croppedfilename}{}
\newcommand{\includecroppedgraphics}[1]{%
    \makeatletter
    \filename@parse{#1}
    \renewcommand{\filename}{#1}
    \renewcommand{\croppedfilename}{\filename@area\[email protected].\filename@ext}
    \makeatother
    \immediate\write18{pdfcrop #1 \croppedfilename}%
    \fbox{\includegraphics[width=\linewidth]{\croppedfilename}}
}

\begin{document}

    \includecroppedgraphics{mypath/myimage.pdf}

    \the\pdfshellescape

\end{document}

这不会产生裁剪后的图像。从日志中我得到

runsystem(pdfcrop mypath/myimage.pdf mypath/myimage.pdf@areamypath/myimage.pdf@ base.cropped.mypath/myimage.pdf@ext)...已执行。

显然我从https://tex.stackexchange.com/a/39636/49283没有工作,尽管做过工作获取 write18 接受/扩展命令

我如何在这里获得正确的解析?

答案1

需要修复一些错误:

\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}
  1. \makeatletter并且必须使用-commands\makeatother包围定义@

  2. \renewcommand不适合\croppedfilename,你必须完全展开替换文本中的所有内容

  3. grffile文件名中需要多个句点

  4. 不要忘记保护行尾

相关内容