我想要一个名为\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}