Ambiente personalizado com minipáginas causa “Número de parâmetro ilegal na definição de \end”

Ambiente personalizado com minipáginas causa “Número de parâmetro ilegal na definição de \end”

Usando MiKTeX com PDFLaTeX no Windows

Quero criar um ambiente que contenha duas minipáginas; o primeiro possui um item de descrição e o segundo possui um pequeno texto (ou imagem). Este trecho de código funciona como eu quero:

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

Eu queria criar uma macro ou ambiente para facilitar a introdução desse tipo de conteúdo. Então crio o seguinte ambiente com dois argumentos:

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

Mas quando tento usá-lo com

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

Eu aponto Illegal parameter number in definition of \endmyenvironment.para a linha que finaliza a newenvironmentdeclaração. Depois de algumas horas lutando com isso, tentei usar hashes duplos ( ##) e obtive dois novos erros diferentes: You can't use `macro parameter character #' in restricted horizontal modee You can't use `macro parameter character #' in internal vertical mode. Dessa vez os erros apontavam para as falas quando eu queria usar o ambiente, mas não tive reclamações quanto à definição.

O que estou fazendo de errado?

Responder1

Não teve ##nada a ver com o meu problema. Parece quevocê não pode usar argumentos dentro do código de fechamento ou final de um ambiente personalizado. Existem soluções alternativas para isso, mas na minha opinião isso deveria ser umdeve terrecurso. Usando uma possível solução alternativa --- uma variável auxiliar ---, cheguei a este ambiente de trabalho:

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

Esta solução chegou tarde. Entretanto consegui resolver o meu problema com um \newcommanda com 3 argumentos:

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

Que pode ser usado com:

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

Espero que ajude.


[a] Parece que não há nenhuma vantagem particular da newcommandabordagem sobre a newenvironmentabordagem, pelo menos para este uso. Maisaquieaqui.

informação relacionada