我正在寻找一个具有两个可选参数的宏,并尝试了以下代码:
\documentclass{tufte-handout}
%
\usepackage{xparse}
\usepackage{lipsum}
\usepackage[demo]{graphics}
\usepackage{easyfig}
%
%% Usage \mfig[position][trim]{name-figure}{caption}{label}
%
\NewDocumentCommand{\mfig}{o o m m m}{%
\begin{marginfigure}[\IfValueTF{#1}{#1}{0}cm]
\Figure[trim={.0\width} {\IfValueTF{#2}{#2}{.05}\height}%
{.0\width} {.0\height},clip,%
width=\linewidth,keepaspectratio=true,%
caption={#4},label={#5},center,here]{#3}
\end{marginfigure}%
}
%
\begin{document}
\section{A simple test}
\lipsum[1]
\mfig{myfigure}{This is just a caption to the demo figure.}{fig:test}
Figure~\ref{fig:test} shows a test. \lipsum[3].
\end{document}
第一个可选参数给出边距图形的垂直位置,第二个参数给出修剪坐标(实际上是一个下限截止点)。
可以使用:
\mfig[-1.5]{name}{caption}{label}
例如,将边距图形垂直向上移动约 1.5 厘米,并使用默认修剪坐标 .05,但我无法使用
\mfig[.55]{name}{caption}{label}
截断 55% 的图形,同时使用默认位置 0cm,因为我的“宏”无法识别可选参数 #2,除非明确使用 #1。
所以,我的问题是:有没有办法只指定#2 可选参数,而宏接受像上面一样的默认#1 参数?
答案1
为什么不使用钥匙呢?这样你就可以拥有尽可能多的参数如你所愿。
有很多方法可以实现这一点,下面是其中之一:
在序言中你可以
\usepackage{pgfkeys}
\def\mycaption{default caption}
\def\mylabel{default label}
\def\myfigwidth{0pt}
\def\myfigheight{0.05}
\pgfkeys{/jotagah/myfig/.cd,
caption/.store in=\mycaption,
label/.store in=\mylabel,
fig width/.store in=\myfigwidth,
fig height/.store in=\myfigheight,
}
然后你可以将你的函数定义为
\NewDocumentCommand{\mfig}{om}{%
\pgfkeys{/jotagah/myfig/.cd,
fig width=0cm,
fig height=0.05,
#1}%%
\begin{marginfigure}[\myfigwidth]
\Figure[trim={.0\width} {\myfgheight\height}%
{.0\width} {.0\height},clip,%
width=\linewidth,keepaspectratio=true,%
caption=\mycaption,label=\mylabel,center,here]{#2}
\end{marginfigure}%