![带有 minipages 的自定义环境导致“\end 定义中的参数编号非法”](https://linux22.com/image/358310/%E5%B8%A6%E6%9C%89%20minipages%20%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E5%AF%BC%E8%87%B4%E2%80%9C%5Cend%20%E5%AE%9A%E4%B9%89%E4%B8%AD%E7%9A%84%E5%8F%82%E6%95%B0%E7%BC%96%E5%8F%B7%E9%9D%9E%E6%B3%95%E2%80%9D.png)
在 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 mode
和You 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 个参数的\newcommand
a解决了我的问题:
\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
方法相比并没有什么特别的优势,至少对于这种用途而言。更多这里和这里。