可能重复:
在文件名中包含带有下划线的图形(来自宏)
我正在尝试使用 LaTeX 进行第一次演示比默环境。为了包含一些图形,我选择前列腺素包,因为它会自动随 Beamer 一起加载。
我试图放一张简单的图片,但失败了。我试图让它尽可能简单,以找出我犯错的地方,但我没有成功。
我遵循了本手册:TikZ & PGF 2.10 版手册
我正在使用 MikTeX ver 0.4.3. r.857、2012-04-17 的 Beamer 和 2011-11-05 的 Pgf。
代码:
\documentclass[slidestop,cmpress,mathsefir,red]{beamer}
\usetheme{sidebar}
\usecolortheme{dove}
\setbeamercolor{structure}{green}
\pgfdeclareimage[width=3cm]{Transmitlogo}{transmit_round}
\begin{document}
\section*{Outline}
\frame {
\pgfuseimage{Transmitlogo}
\frametitle{Outline}
\tableofcontents
}
\end{document}
如果我注释掉,\pgfuseimage{Transmitlogo}
一切都会正常。保留该行,我收到错误:
! Missing $ inserted.
<inserted text>
$
l.38 }
第 38 行是帧结束的行}
。
感谢您的点击。
答案1
这是宏的一个错误功能\pgfdeclareimage
,它吸收了文件名而没有对文件名中应该允许的字符(例如下划线)采取预防措施。
但是 PGF/TikZ 手册指出这\includegraphics
是更好的选择(参见第 79.1 节),因此使用
\includegraphics[width=3cm]{transmit_round}
您的实验将不会遇到任何问题。
如果你更喜欢使用\pgfuseimage
,一个可能的修复方法,它还允许在文件名中包含宏(例如,以抽象方式表示目录),如下所示
\documentclass[slidestop,cmpress,mathsefir,red]{beamer}
\usetheme{sidebar}
\usecolortheme{dove}
\setbeamercolor{structure}{green}
%%% PATCH STARTS
\makeatletter
\let\original@pgf@declareimage\pgf@declareimage
\def\pgf@declareimage[#1]#2#3{%
\def\temppatch@declareimage{\original@pgf@declareimage[#1]{#2}}%
\edef\temppatch@declareimagearg{#3}%
\expandafter\temppatch@declareimage\expandafter{\detokenize\expandafter{\temppatch@declareimagearg}}%
}
\makeatother
%%% PATCH ENDS
\newcommand{\mygraphics}{figures}
\pgfdeclareimage[width=3cm]{Transmitlogo}{transmit_round}
\pgfdeclareimage[width=3cm]{try}{\mygraphics/abc_def}
\begin{document}
\section*{Outline}
\frame {
\pgfuseimage{Transmitlogo}
\frametitle{Outline}
\tableofcontents
}
\frame{\pgfuseimage{try}}
\end{document}
子目录中的文件figures
被正确找到。