带有 minipages 的自定义环境导致“\end 定义中的参数编号非法”

带有 minipages 的自定义环境导致“\end 定义中的参数编号非法”

在 Windows 上将 MiKTeX 与 PDFLaTeX 结合使用

我想创建一个包含两个小页面的环境;第一个小页面有一个描述项,第二个小页面有一个小文本(或图片)。这段代码按我想要的方式工作:

{
\noindent
\begin{minipage}{0.5\textwidth}
\begin{description}
    \item[Label] Description
\end{description}
\end{minipage}\hfill
\begin{minipage}{0.3\textwidth}
    Second minipage
\end{minipage}
}

我想创建一个宏或环境,以便于我轻松引入此类内容。因此,我创建了以下带有两个参数的环境:

\newenvironment{myenvironment}[2]% 1:label, 2:second minipage text
{%
    \noindent
    \begin{minipage}{0.5\textwidth}
    \begin{description}
        \item[#1] % Description
}%
{%
    \end{description}
    \end{minipage}\hfill
    \begin{minipage}{0.3\textwidth}
        #2
    \end{minipage}
}

但当我尝试使用它时

\begin{myenvironment}{Label}{Second minipage text}
Description text
\end{myenvironment}

我得到了Illegal parameter number in definition of \endmyenvironment.指向完成newenvironment声明的那一行的错误。经过几个小时的努力,我尝试使用双哈希(##),并得到了两个不同的新错误:You can't use `macro parameter character #' in restricted horizontal modeYou can't use `macro parameter character #' in internal vertical mode。这一次,当我想使用环境时,错误指向了行,但对定义没有任何抱怨。

我究竟做错了什么?

答案1

##与我的问题无关。似乎您不能在自定义环境的结束代码中使用参数。有解决方法,但我认为这应该是一定有功能。使用一个可能的解决方法——辅助变量——,我得到了这个工作环境:

\newenvironment{myenvironment}[2]%
{%
    \def\myenvargumentII{#2}    
    \noindent
    \begin{minipage}{0.5\textwidth}
    \begin{description}
        \item[#1] % Description
}%
{%
    \end{description}
    \end{minipage}\hfill
    \begin{minipage}{0.3\textwidth}
        \myenvargumentII
    \end{minipage}
}

这个解决方案来得有点晚。与此同时,我已经设法用带有3 个参数的\newcommanda解决了我的问题:

\newcommand{\myminipages}[3]% 1:label, 2:secondminipage, 3:Description
{%
    \noindent
    \begin{minipage}{0.5\textwidth}
        \begin{description}
            \item[#1] #3
        \end{description}
    \end{minipage}\hfill
    \begin{minipage}{0.3\textwidth}
        #2
    \end{minipage}
    \medskip % vertical space
}

可与以下产品配合使用:

\myminipages{Label}{Second minipage text}{Description text}

希望能帮助到你。


[a] 看起来该newcommand方法与该newenvironment方法相比并没有什么特别的优势,至少对于这种用途而言。更多这里这里

相关内容