使用 pgfkeys、beamer、xparse 和 \includegraphics 的 MWE 编译错误

使用 pgfkeys、beamer、xparse 和 \includegraphics 的 MWE 编译错误

首先,请对模糊的标题表示歉意,但我对问题的了解不够充分,无法给出更准确的标题。

以下 MWE 无法编译,并且在和missing \endcsname inserted周围出现错误。\linewidthpdflatexlualatex

\documentclass{beamer}
% \documentclass{article}

\usepackage{pgfkeys}
\usepackage{xparse}
\usepackage{graphicx}

\pgfkeys{
    /tikzscale/.is family, /tikzscale,
    width/.code = {\the#1},
}

\RenewDocumentCommand{\includegraphics}{O{}}{%
% \renewcommand{\includegraphics}[1][]{%
        \pgfkeys{/tikzscale, #1}%
}

\begin{document}
    \includegraphics[width=\linewidth]
    text
\end{document}

pgfkeys如果取消注释两行中的任意一行(同时注释掉上面的行),则文件会进行编译,即、beamerxparse的组合\includegraphics错误。 \AtBeginDocument重新定义\includegraphics也解决了问题。

为什么这种组合不起作用?在这种情况下\RenewDocumentCommand和有什么区别?\renewcommand

答案1

问题在于,它根据文档当时的含义beamer重新定义文档的开始。\includegraphics

事情\renewcommand看似顺利,但\RenewDocumentCommand由于可选参数的扫描机制不同,因此出现混乱。

我不会混合这两种方式。无论如何,重新定义声明为 robust 的命令(就像beamer一样\includegraphics)可以非常有风险。

相关内容