我正在尝试编写(我的第一个)文档类,它将是的扩展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}
。
这似乎如我预期的那样有效,但是,我不知道它有多强大?这是解决这个问题的好方法吗?