我注意到它includegraphics
采用了看似命名的参数:
\includegraphics[width=50,height=25,trim=1 2 3 4,clip]{an_img.png}
我想将我的一些includegraphics
调用包装在一个宏中,以便以下命令
\happygraphics{an_img.png}
\happygraphics{an_img.png}{rotate=90}
扩大至
\includegraphics[width=50,height=25,trim=1 2 3 4,clip]{an_img.png}
\includegraphics[width=50,height=25,trim=1 2 3 4,clip,rotate=90]{an_img.png}
分别。
我试过使用
\DeclareDocumentCommand\song{ m g }{
\includegraphics[width=50,height=25,trim=1 2 3 4,clip,rotate=90\IfNoValueF{#2}{,#2}]{#1}
}
但我得到了可怕的
! Package keyval Error: keepaspectratio,trim=0 0 0.5in 0,clip undefined.
错误。
我该如何做呢?
答案1
通过定义稍微修改的接口
\newcommand{\happygraphics}[2][,]{%
\includegraphics[width=50,height=25,trim=1 2 3 4,clip,#1]{#2}}%
将允许根据需要添加选项\happygraphics[<options>]{<file>}
。
类似的接口通过xparse
:
\usepackage{xparse}% http://ctan.org/pkg/xparse
\NewDocumentCommand{\happygraphics}{O{,} m}{%
\includegraphics[width=50,height=25,trim=1 2 3 4,clip,#1]{#2}}%
上述利用了提供空(默认)键值作为的优势,
。
由于键值接口可以接受空选项(或连续的逗号,,,...
),因此无需额外测试可选参数是否存在。当然,除非您想根据用户是否提供了可选参数来做更多的事情。
答案2
你不需要定义新的顶级命令,如果你执行
\setkeys{Gin}{width=50,height=25,trim=1 2 3 4,clip}
那么这些键将被自动设置为声明\includegraphics
范围内的所有内容\setkeys
。