将选项传递给新环境

将选项传递给新环境

我有一个 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

相关内容