使用 Etoolbox 命令时未找到图像

使用 Etoolbox 命令时未找到图像

我在编译以下代码时遇到问题:

\documentclass{article}
\usepackage{etoolbox}
\usepackage[pdftex]{graphicx}

\newcommand{\newInfo}[3][]{%
\edef\@creatingInfo{1}%
\edef\@printingInfo{0}%
\edef\currentname{#2}%
\ifstrempty{#1}{}{\csedef{info#2Img}{#1}}%
\csedef{info#2Cnt}{#3}%
\nullfont#3\normalfont%
\edef\@creatingInfo{0}
}

\newcommand{\printInfo}[1]{%
\edef\currentname{#1}%
\edef\@printingInfo{1}%
\section{#1}\label{info:#1}%
\ifcsname info#1Img\endcsname%
\begin{figure}
\includegraphics[width=\linewidth]{\csuse{info#1Img}}
\end{figure}%
\fi%
\csuse{info#1Cnt}%
\ifcsname info#1Ref\endcsname
\begin{longtable}{p{9cm}}
  \csuse{info#1Ref}
\end{longtable}
\fi
}

\begin{document}

\newInfo[./images/myimage.eps]{Test}{Information content}

\printInfo{Test}


\end{document}

它说./images/myimage.eps not found(无论名称、类型、绝对/相对路径等)。

但是,如果你将第 21 行替换为\includegraphics[width=\linewidth]{./images/myimage.eps},那么它就能正确显示图像。

答案1

为了实现从 EPS 到 PDF 的自动转换,参数中的文件名应该\includegraphics是明确的,因此您可以将代码更改为

  \ifcsname info#1Img\endcsname
    \begin{figure}
    \begingroup\edef\x{\endgroup
      \noexpand\includegraphics[width=\linewidth]{\csuse{info#1Img}}%
    }\x
    \end{figure}
  \fi

一些评论:您的示例代码缺少\makeatletter\makeatother,因为您想在命令@名称中定义 。顺便说一下,\edef\@creatingInfo{1}和 完全相同\def\@creatingInfo{1},只是效率较低。

此外,代码的几个部分似乎根本没有做任何事情,可能是因为显示的代码只是一个摘录。但是

\nullfont#3\normalfont

这是我完全无法理解的。为什么将文件名排版为\nullfont,却什么都没有出现?

最后,永远不要使用pdftex选项graphicx

相关内容