我想裁剪 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}
\makeatletter
并且必须使用-commands\makeatother
包围定义@
\renewcommand
不适合\croppedfilename
,你必须完全展开替换文本中的所有内容grffile
文件名中需要多个句点不要忘记保护行尾