参数依赖性

参数依赖性

我想要一个名为\defin使用父环境的二级环境,后者接受三个参数。 \defin\statement使用硬连线的第一个参数进行调用,其余参数则表现为父级。

这个实现是不是我必须要做的,对进行一个简单的#2测试\defin

希望能与其\defin完全相同,\statement只是将第一个参数设置为Definition

问题是\begin{defin}{This}[That]不放入That()得到Definition This (That)。但给了我Definition This That

\documentclass[a4paper,12pt]{article}

\begin{document}

\NewDocumentEnvironment{statement}{mmo}
  {
    \IfNoValueTF {#3}
      { \noindent #1 \ #2 \, }
      { \noindent #1 \ #2 \ (#3) }
  }
  { \vspace{0.3cm} }

\NewDocumentEnvironment{defin}{mo}
  { 
    \IfNoValueTF {#2}
      { \statement {Definition} {#1} }
      { \statement {Definition} {#1} {#2} }  
  {}

  \begin{defin}{This}
    Some Text
  \end{defin}    

  \begin{defin}{This}[That]
    Some Text
  \end{defin}

  \end{document}

答案1

如果使用o可选参数,则该参数始终必须放在方括号(而不是花括号)中。

因为statement是一个环境,你还需要使用

\begin{statement}

\end{statement}

我认为,在 的定义中,您还缺少一个右括号defin

我不确定哪些水平空格是故意的,哪些可能是虚假的,所以你可能不希望在我放置注释符号的任何地方都有注释符号,但如果你想避免在输出中引入神秘的空格,你可能需要更加小心行尾和空格。

\documentclass[a4paper,12pt]{article}

\begin{document}

\NewDocumentEnvironment{statement}{mmo}
{%
  \IfNoValueTF {#3}
  {\noindent #1 \ #2 \,}
  {\noindent #1 \ #2 \ (#3)}%
}
{\vspace{0.3cm}}

\NewDocumentEnvironment{defin}{mo}
{%
  \IfNoValueTF {#2}
  {%
    \begin{statement}{Definition}{#1}%
  }{%
    \begin{statement}{Definition}{#1}[#2]%
    }%
  }{%
  \end{statement}%
}
    
\begin{defin}{This}
  Some Text
\end{defin}    

\begin{defin}{This}[That]
  Some Text
\end{defin}

\end{document}

带有和不带有可选参数的定义

相关内容