![使用 Etoolbox 命令时未找到图像](https://linux22.com/image/362873/%E4%BD%BF%E7%94%A8%20Etoolbox%20%E5%91%BD%E4%BB%A4%E6%97%B6%E6%9C%AA%E6%89%BE%E5%88%B0%E5%9B%BE%E5%83%8F.png)
我在编译以下代码时遇到问题:
\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
。