展开后问题

展开后问题

问题如下:我需要反复将同一组选项(例如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}

相关内容