
Использование 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}
}
Это решение пришло поздно. Тем временем мне удалось решить свою задачу с \newcommand
a с 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
подходом, по крайней мере для этого использования. Подробнеездесьиздесь.