我有一个 GrayBox 环境,定义如下。
它使用\begin{GrayBox}...\end{GrayBox}
或\begin{GrayBox}[\textwidth]...\end{GrayBox}
,即它可以向环境传递可选参数。
我猜测 #1 是默认值的设置,而 #2 是给定值的设置。
问题
#2 怎么可能?我的意思是,LaTeX 的规则是不是如果#1
没有给出,[]
则使用中的默认值?有没有关于这个的参考资料?同样的技术可以应用于吗\newcommand
?
\newlength{\RoundedBoxWidth}
\newsavebox{\GrayRoundedBox}
\newenvironment{GrayBox}[1][\dimexpr\textwidth-4.5ex]% **** #1
{\setlength{\RoundedBoxWidth}{\dimexpr#1} **** #2
\begin{lrbox}{\GrayRoundedBox}
\begin{minipage}{\RoundedBoxWidth}}%
{ \end{minipage}
\end{lrbox}
\begin{center}
\begin{tikzpicture}%
\draw node[draw=black,fill=black!10,rounded corners,%
inner sep=2ex,text width=\RoundedBoxWidth]%
{\usebox{\GrayRoundedBox}};
\end{tikzpicture}
\end{center}}
答案1
LaTeX 的规则是,如果可选参数不存在,则#1
采用默认值。也就是说,
\documentclass{article}
\newenvironment{hello}[1][world]{\noindent Hello #1, }{Bye now!\\}
\begin{document}
\begin{hello}
nice to meet you.
\end{hello}
\begin{hello}[Bob]
glad you could make it.
\end{hello}
\end{document}
将产生
你好,世界,很高兴认识你。再见!
你好,鲍勃,很高兴你能来。再见!
作为其输出。对于使用可选参数定义的命令也是如此,例如
\documentclass{article}
\newcommand{\hi}[1][world!]{\noindent Hello #1}
\begin{document}
\hi \\
\hi[Bob]
\end{document}
输出结果为
你好,世界!
你好 Bob