Benutzerdefinierte Umgebung mit Minipages verursacht „Ungültige Parameternummer in der Definition von \end“

Benutzerdefinierte Umgebung mit Minipages verursacht „Ungültige Parameternummer in der Definition von \end“

Verwenden von MiKTeX mit PDFLaTeX unter Windows

Ich möchte eine Umgebung erstellen, die zwei Miniseiten enthält; die erste hat ein Beschreibungselement und die zweite einen kleinen Text (oder ein Bild). Dieser Codeabschnitt funktioniert wie gewünscht:

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

Ich wollte ein Makro oder eine Umgebung erstellen, die es mir leicht macht, diese Art von Inhalten einzuführen. Also erstelle ich die folgende Umgebung mit zwei Argumenten:

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

Aber wenn ich versuche, es mit

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

Ich bekomme Illegal parameter number in definition of \endmyenvironment.einen Verweis auf die Zeile, die die newenvironmentDeklaration beendet. Nachdem ich einige Stunden damit gekämpft hatte, versuchte ich, doppelte Hashes ( ##) zu verwenden und bekam zwei neue, unterschiedliche Fehler: You can't use `macro parameter character #' in restricted horizontal modeund You can't use `macro parameter character #' in internal vertical mode. Dieses Mal zeigten die Fehler auf die Zeilen, als ich die Umgebung verwenden wollte, aber keine Beanstandungen bezüglich der Definition hatte.

Was mache ich falsch?

Antwort1

Das ##hatte nichts mit meinem Problem zu tun. Es scheint, dassSie können keine Argumente innerhalb des schließenden oder beendenden Codes einer benutzerdefinierten Umgebung verwenden. Es gibt Workarounds dafür, aber meiner Meinung nach sollte dies einhaben müssenFunktion. Mithilfe einer möglichen Problemumgehung – einer Hilfsvariable – gelangte ich zu dieser Arbeitsumgebung:

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

Diese Lösung kam spät. In der Zwischenzeit hatte ich es geschafft, mein Problem mit einem \newcommanda mit 3 Argumenten zu lösen:

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

Kann verwendet werden mit:

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

Ich hoffe es hilft.


[a] Es scheint, dass der newcommandAnsatz gegenüber dem newenvironmentAnsatz keinen besonderen Vorteil bietet, zumindest für diese Anwendung. MehrHierUndHier.

verwandte Informationen