为什么 \includegraphics[\varone]{\vartwo} 无法编译?

为什么 \includegraphics[\varone]{\vartwo} 无法编译?

我想将输入文件中导入的每个 EPS 图像转换为 PDF 版本,并分别以原始名称保存。下面的代码模拟了我们不想进行大量修改的实际情况。所以我必须\includegraphics通过在末尾附加转换过程来更新的定义。

转换利用了template.tex在编译时动态创建的外部模板 () 。对于中inputfilename.tex的每次调用,\includegraphicsinputfilename.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}

相关内容