首先,请对模糊的标题表示歉意,但我对问题的了解不够充分,无法给出更准确的标题。
以下 MWE 无法编译,并且在和missing \endcsname inserted
周围出现错误。\linewidth
pdflatex
lualatex
\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
如果取消注释两行中的任意一行(同时注释掉上面的行),则文件会进行编译,即、beamer
和xparse
的组合\includegraphics
错误。 \AtBeginDocument
重新定义\includegraphics
也解决了问题。
为什么这种组合不起作用?在这种情况下\RenewDocumentCommand
和有什么区别?\renewcommand
答案1
问题在于,它根据文档当时的含义beamer
重新定义文档的开始。\includegraphics
事情\renewcommand
看似顺利,但\RenewDocumentCommand
由于可选参数的扫描机制不同,因此出现混乱。
我不会混合这两种方式。无论如何,重新定义声明为 robust 的命令(就像beamer
一样\includegraphics
)可以非常有风险。