继承自 beamer

继承自 beamer

我正在尝试编写(我的第一个)文档类,它将是的扩展beamer。特别是我希望这个类能够制作我喜欢的幻灯片。

我想要的一件事是有一个宏\logosmall,它将告诉类在哪里找到将要使用的(小)徽标。这是我尝试过的:

在课堂里:

\let\@logosmall\relax
\def\logosmall#1{\def\@logosmall{#1}}
\pgfdeclareimage[height=0.8cm]{university-logo}{\@logosmall}
\logo{\pgfuseimage{university-logo}}

文档本身也提到:

\logosmall{logos/path_to_logo}

我收到的错误是:

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.25 ...eight=0.8cm]{university-logo}{\@logosmall}

我做错了什么?我想几乎做错了所有事情 - 但正如我所说,这是我的第一次尝试!

答案1

问题实际上是

\let\@logosmall\relax

正如我们所见,如果我们举一个简单的例子

\documentclass{beamer}
\makeatletter
\let\@logosmall\relax
\def\logosmall#1{\def\@logosmall{#1}}
\pgfdeclareimage[height=0.8cm]{university-logo}{\@logosmall}
\logo{\pgfuseimage{university-logo}}
\makeatother
\begin{document}

\end{document}

\tracingall并在之前插入\pgfdeclareimage

\pgfutil@IfFileExists #1#2#3->\openin \pgfutil@inputcheck =#1 \ifeof \pgfutil@i
nputcheck #3\relax \else #2\relax \fi \closein \pgfutil@inputcheck 
#1<-\@logosmall .pdf
#2<-\xdef \pgf@filename {\@logosmall .pdf}
#3<-\def \pgf@mightbeempty {.jpg:.jpeg:.png::}\ifx \pgf@mightbeempty \pgfutil@e
mpty \else \pgf@findfile .jpg:.jpeg:.png::+{\@logosmall }\fi 
{\openin}
{\relax}
{the character .}
\everypar->\@nodocument 

\openin语正在寻找文件名,但\relax终止名称扫描,这意味着它会寻找一个完全空的文件名,导致该.pdf部分“挂起”并触发 LaTeX 的错误。

一个简单的解决方法是

\newcommand*{\@logosmall}{}

因为现在这是一个空的但可扩展的定义。然后它将搜索一个文件.pdf,该文件可能不存在,但至少不会引发错误。当然,这仍然无法正常工作,因为图像声明已经发生。

正如您在自己的回答中指出的那样,正确的方法是做些不同的事情。我不明白您为什么\pgfdeclareimage在这里使用,因为我会选择使用\includegraphics。您可以使用存储的文件名来执行此操作:

\documentclass{beamer}
\makeatletter
\newcommand*{\@logosmall}{}
\newcommand*{\logosmall}[1]{\renewcommand*{\@logosmall}{#1}}
\logo{\includegraphics[height=0.8cm]{\@logosmall}}
\makeatother
\begin{document}

\end{document}

或不包含:

\newcommand*{\logosmall}[1]{%
  \logo{\includegraphics[height=0.8cm]{#1}}%
}

(从问题来看,存储的必要性并不完全清楚。)

答案2

这是我所做的,并且似乎有效:

在课堂上我放了以下内容(而不是你在 OP 中找到的内容):

\newcommand*{\logosmall}[1]{%
  \pgfdeclareimage[height=0.8cm]{university-logo}{#1}
}
\logo{\pgfuseimage{university-logo}}

然后,在文档的序言中我有\logosmall{path/to/logo}

这似乎如我预期的那样有效,但是,我不知道它有多强大?这是解决这个问题的好方法吗?

相关内容