ミニページを使用したカスタム環境では、「\end の定義に不正なパラメータ番号があります」というエラーが発生します

ミニページを使用したカスタム環境では、「\end の定義に不正なパラメータ番号があります」というエラーが発生します

Windows で MiKTeX を PDFLaTeX と共に使用する

2 つのミニページを含む環境を作成したいと思います。最初のミニページには説明項目があり、2 番目のミニページには小さなテキスト (または画像) があります。次のコードは、希望どおりに動作します。

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

この種のコンテンツを簡単に導入できるように、マクロまたは環境を作成したいと考えました。そこで、2 つの引数を持つ次の環境を作成します。

\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。これに数時間苦労した後、二重ハッシュ ( ) を使用しようとしたところ、と という##2 つの新しいエラーが発生しました。今回は、環境を使用したいときにエラーが行を指していましたが、定義に問題はありませんでした。You can't use `macro parameter character #' in restricted horizontal modeYou 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 つの引数を持つ\newcommandaで問題を解決することができました。

\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ここそしてここ

関連情報