Пользовательская среда с мини-страницами вызывает «Недопустимый номер параметра в определении \end»

Пользовательская среда с мини-страницами вызывает «Недопустимый номер параметра в определении \end»

Использование MiKTeX с PDFLaTeX в Windows

Я хочу создать среду, содержащую две мини-страницы; на первой есть элемент описания, а на второй — небольшой текст (или изображение). Этот фрагмент кода работает так, как мне нужно:

{
\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}
}

Это решение пришло поздно. Тем временем мне удалось решить свою задачу с \newcommanda с 3 аргументами:

\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подходом, по крайней мере для этого использования. Подробнеездесьиздесь.

Связанный контент