\includegraphics 的键值错误:未定义选项

\includegraphics 的键值错误:未定义选项

我正在尝试制作一个类文件来帮助我起草俱乐部章程,但我遇到了问题\includegraphics。我希望能够使用\logo命令(参见类文件)定义俱乐部徽标,并可以选择将选项传递给\includegraphics,但它不起作用。

类文件:

\ProvidesClass{bylaws_min}[2012/10/27 version 0.01 "alpha" Bylaws]
\NeedsTeXFormat{LaTeX2e}

\RequirePackage[margin=1in]{geometry}% Sets page margins
\RequirePackage{graphicx}% Allows adding images to documents

\newcommand{\logo}[2][\@empty]{\def\@logoopts{#1}\def\@logoimage{#2}}

\renewcommand{\maketitle}{%
\begin{center}
\ifx\@empty\@logoopts\includegraphics{\@logoimage}\else\includegraphics[\@logoopts]{\@logoimage}\fi
\end{center}%
}

文档文件:

\documentclass{bylaws_min}

\logo[scale=2]{imagefile.jpg}

\begin{document}

\maketitle

\end{document}

我已经尝试了两者\logo[scale=2]{imagefile.jpg}(或除 之外的其他选项scale=2),或者只是\logo{imagefile.jpg},并且我得到了这个错误的变化:

Package keyval Error: scale=2 undefined.
See the keyval package documentation for explanation.
Type H <return> for immediate help.
 ...

1.7 \maketitle

我已经研究了一段时间,似乎有两个问题。首先,\ifx从不将\@logoopts其视为\@empty(换句话说,比较总是失败,并且语句总是发生)。其次,如果我像在中\else一样明确创建图像,则一切都会正常,但如果我尝试将选项传递给它,则会失败。但将图像文件名传递给它总是有效的。\includegrahpics[scale=2]{imagefile.jpg}\maketitle\@logoopts\@logoimage

答案1

不需要\@empty作为默认参数。这只会增加额外的工作量。

\newcommand{\logo}[2][]{\def\@logoopts{#1}\def\@logoimage{#2}}

选项解析器需要明确的键值设置:

\expandafter\includegraphics\expandafter[\@logoopts]{\@logoimage}%

如果我没记错的话,那么\@logoimage会被扩展一次graphics。否则,它也必须被扩展才能解析文件名。

\expandafter\expandafter\expandafter\includegraphics
\expandafter\expandafter\expandafter[\expandafter\@logoopts\expandafter]%
\expandafter{\@logoimage}%

答案2

由于选项和图像文件必须是可扩展的,我们可以避免出现连锁反应\expandafter

\newcommand{\logo}[2][]{\def\@logoopts{#1}\def\@logoimage{#2}}
% Default setting, in case Ben User calls \maketitle without first calling \logo:
\logo{nofile}
\DeclareGraphicsExtensions{jpg}
\renewcommand{\maketitle}{%
  \begin{center}%
    \begingroup
    \edef\x{\endgroup\noexpand\includegraphics[\@logoopts]{\@logoimage}}\x
  \end{center}%
}

相关内容