快问快答,有没有办法定义宏的默认参数?例如,我有一页充满了这些内容:
\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}
我可以在某处告诉它height
andbordercolor
吗,这样我就不必在每一行都重复它们?
答案1
\@ifnextchar
采用标准方式或更复杂的\NewDocumentCommand
包版本xparse
。
请注意,在\MakeMyTextField[width=10cm]{}
方式中,默认参数当然被否决,在 中也是如此\MyTextField
。
更好的方法是使用keyval
或xkeyval
或(如果真的需要;-))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}