为宏定义默认参数?

为宏定义默认参数?

快问快答,有没有办法定义宏的默认参数?例如,我有一页充满了这些内容:

\TextField[width=2cm,height=10pt,bordercolor=stuff]{Question 1}
\TextField[width=4cm,height=10pt,bordercolor=stuff]{Question 2}
\TextField[width=3cm,height=10pt,bordercolor=stuff]{Question 3}
\TextField[width=5cm,height=10pt,bordercolor=stuff]{Question 4}

我可以在某处告诉它heightandbordercolor吗,这样我就不必在每一行都重复它们?

答案1

\@ifnextchar采用标准方式或更复杂的\NewDocumentCommand包版本xparse

请注意,在\MakeMyTextField[width=10cm]{}方式中,默认参数当然被否决,在 中也是如此\MyTextField

更好的方法是使用keyvalxkeyval或(如果真的需要;-))pgfkeys

\documentclass{article}

\usepackage{xcolor}
\usepackage{xparse}%
\usepackage{hyperref}
\makeatletter

\newcommand{\MakeMyTextField@@opt}[2][width=2cm,height=10pt,bordercolor=blue]{%
\TextField[#1]{#2}%
}%

\newcommand{\MakeMyTextField@@noopt}[1]{
\MakeMyTextField@@opt{#1}%
}%

\newcommand{\MakeMyTextField}{%
  \@ifnextchar[{\MakeMyTextField@@opt}{\MakeMyTextField@@noopt}
}%


\NewDocumentCommand{\MyTextField}{+O{width=2cm,height=10pt,bordercolor=blue}+m}{%
  \TextField[#1]{#2}%
}%




\makeatother

\begin{document}
\begin{Form}
\begin{enumerate}
\item \MakeMyTextField{Question 1}

\item \MakeMyTextField{Question 2}

\item \MakeMyTextField[width=10cm]{Question 3}

\item \MyTextField{Question 4}
\end{enumerate}
\end{Form}
\end{document}

在此处输入图片描述

答案2

您可以简单地预设新的默认值;仍然可以在本地覆盖它们。

\documentclass{article}

\usepackage{xcolor}
\usepackage{hyperref}

\setkeys{Field}{height=10pt,bordercolor=green}

\begin{document}
\begin{Form}
\begin{enumerate}
\item \TextField{Question 1}

\item \TextField{Question 2}

\item \TextField[width=10cm]{Question 3}

\item \TextField[height=30pt,bordercolor=red]{Question 4}

\item \TextField{Question 5}
\end{enumerate}
\end{Form}
\end{document}

在此处输入图片描述

答案3

我采纳了@Markus 的评论并稍作修改:

\newcommand{\q}[2]{\TextField[width=#1,height=10pt,bordercolor=stuff]{‌​#2}}
...
\q{3cm}{Question}

相关内容