我想将输入文件中导入的每个 EPS 图像转换为 PDF 版本,并分别以原始名称保存。下面的代码模拟了我们不想进行大量修改的实际情况。所以我必须\includegraphics
通过在末尾附加转换过程来更新的定义。
转换利用了template.tex
在编译时动态创建的外部模板 () 。对于中inputfilename.tex
的每次调用,\includegraphics
inputfilename.tex
\immediate\write18{latex -jobname=#2 \unexpanded{"\def\varone{#1} \def\vartwo{#2} \input{template}"} && dvips #2 && ps2pdf -dAutoRotatePages=/None #2.ps}
将被调用。它使用模板并从和中template.tex
获取两个参数\varone
和。\vartwo
#1
#2
\includegraphics
但是,以下代码无法编译,您可以自己查看错误。必须使用 编译该代码pdflatex -shell-escape inputfilename
。
% inputfilename.tex
\documentclass{book}
\usepackage{filecontents}
\begin{filecontents*}{template.tex}
\documentclass[preview,border=0pt,graphics]{standalone}
\usepackage{graphicx}
%\makeatletter
%\define@key{Gin}{width}{}
%\define@key{Gin}{scale}{}
%\define@key{Gin}{height}{}
%\makeatother
\begin{document}
\includegraphics[\varone]{\vartwo}
\end{document}
\end{filecontents*}
\usepackage{graphicx}
\let\temp\includegraphics
\renewcommand\includegraphics[2][]{%
\temp[#1]{#2}%
%\immediate\write18{latex -jobname=#2 "\def\noexpand\varone{#1} \def\noexpand\vartwo{#2} \noexpand\input{template}" && dvips #2 && ps2pdf -dAutoRotatePages=/None #2.ps}%
\immediate\write18{latex -jobname=#2 \unexpanded{"\def\varone{#1} \def\vartwo{#2} \input{template}"} && dvips #2 && ps2pdf -dAutoRotatePages=/None #2.ps}%
}
\begin{document}
\chapter{A}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=.5]{example-image-a}
\caption{A}
\label{fig:A}
\end{figure}
A \ldots
\chapter{B}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=.75]{example-image-b}
\caption{B}
\label{fig:B}
\end{figure}
B \ldots
\chapter{B}
\begin{figure}[hbtp]
\centering
\includegraphics[scale=1]{example-image-c}
\caption{C}
\label{fig:C}
\end{figure}
C \ldots
\end{document}
如何解决?
答案1
keyval
付出一些努力不是扩展参数列表中的宏
\edef\z{\noexpand\includegraphics[\varone]{\vartwo}}\z
不是
\includegraphics[\varone]{\vartwo}