问题如下:我需要反复将同一组选项(例如angle=90, scale=0.85
)传递给给定命令(例如\includepdf
)。一种方法是将该选项保存在某个宏中,例如\__Foo
。问题是\includepdf[\__Foo]
导致错误。我提出了两种解决方法,一种是使用\expandafter
,另一种是使用命令和选项调用的自定义函数。这两种方法都不能让我满意。有没有一个工具(在 etoolbox 中?)可以从 创建一个新函数\includepdf
,比如\includepdfbis
,这样我就可以像这样使用它:\includepdfbis[\__Foo]
?
\documentclass{article}
\usepackage{mwe}
\usepackage{pdfpages}
\usepackage{xparse}
\ExplSyntaxOn
\def\__Foo{angle=90, scale=0.85}
\cs_new_protected:Nn\__erw_pass_option:Nn{#1[#2]}
\cs_generate_variant:Nn \__erw_pass_option:Nn {Ne}
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
%\includepdf[\__Foo]{example-image-a} % ERROR: Package keyval Error: angle=90,scale=0.85 undefined.
\expandafter\includepdf\expandafter[\__Foo]{example-image-a}
\__erw_pass_option:Ne \includepdf{\__Foo}{example-image-a}
\ExplSyntaxOff
\end{document}
答案1
如果未使用任何选项,则将 expandafter 应用于文件名是无害的,因此您可以无条件地使用所显示但包装在宏中的形式。
\documentclass{article}
\usepackage{pdfpages}
% you would need expl3 package in older latex releases.
\ExplSyntaxOn
\def\__Foo{angle=90, scale=0.85}
% def not really the expl3 way but as you started..
\def\includepdfbis{\expandafter\includepdf\expandafter}
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
\includepdfbis[\__Foo]{example-image-a}
\ExplSyntaxOff
\end{document}
答案2
你最好定义自己的密钥。
\documentclass{article}
\usepackage{pdfpages}
\makeatletter
\define@key{Gin}{Foo}[]{\setkeys{Gin}{angle=90, scale=0.85}}
\makeatother
\begin{document}
\includepdf[Foo]{example-image-a}
\end{document}