语法错误;pgfuseimage

语法错误;pgfuseimage

可能重复:
在文件名中包含带有下划线的图形(来自宏)

我正在尝试使用 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被正确找到。

相关内容