Das Einfügen von \\ mit einem Befehl hat nicht dasselbe Ergebnis wie das direkte Einfügen

Das Einfügen von \\ mit einem Befehl hat nicht dasselbe Ergebnis wie das direkte Einfügen

Ich verwende diemathpartirPaket und ich habe Code (von LyX) generiert, der eine Umgebung (die ich nenne lines) in das einfügt \inferrule*, und es scheint zu stören pdflatex, wenn mehr als zwei Zeilen (getrennt durch ) darin sind \\. Ich habe verschiedene Dinge ausprobiert, aber ich konnte nichts kompilieren, solange ein \\zwischen zwei Zeilen in einer linesUmgebung vorhanden war.

Der folgende Code ist genau der, den ich auf Pastebin hochgeladen habe:http://pastebin.com/yBfm1zQ0

\documentclass{article}
\usepackage{mathpartir}
\begin{document}

\newcommand{\testa}{
  This is the intended use:
  \begin{mathpar}
    \inferrule*{
      1\\
      2
    }{
      3
    }
  \end{mathpar}
}

\newcommand{\testb}{
  % LaTeX Error: \begin{mathpar} on input line 68 ended by \end{lines}. [\testb]
  But (because the code is generated), I have an environment in the rule:
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\\
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

\newcommand{\testc}{
  If \textbackslash\textbackslash is renamed \textbackslash{}plop, it works (or well, the output isn't what is expected but I know how to fix it and at least it compiles):

  \newcommand{\plop}{\\\relax}
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\plop
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

\newcommand{\testd}{
  % LaTeX Error: \begin{mathpar} on input line 70 ended by \end{lines}. [\testd]
  And it's not the \textbackslash{}relax that fixes it:
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\\\relax
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

% Line 66
%\testa
\testb
%\testc
%\testd


\end{document}

Vielen Dank im Voraus für Ihre Hilfe.

Antwort1

eine Umgebung ist eine Gruppe, also ist Ihr Code wie

 {#1\\#2}

was nicht funktioniert, können Sie eine Nicht-Umgebung definieren, die die Gruppierung zunichte macht, so dass die Definition eher wie folgt lautet:

{}#1\\#2{}

mit zwei falschen leeren Gruppen statt einer Gruppe um das Ganze.

\documentclass{article}
\usepackage{mathpartir}
\begin{document}

\newcommand{\testa}{
  This is the intended use:
  \begin{mathpar}
    \inferrule*{
      1\\
      2
    }{
      3
    }
  \end{mathpar}
}

\makeatletter
  \newenvironment{lines}{\endgroup}{\begingroup\def\@currenvir{lines}}
\makeatother
\newcommand{\testb}{
  % LaTeX Error: \begin{mathpar} on input line 68 ended by \end{lines}. [\testb]
  But (because the code is generated), I have an environment in the rule:
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\\
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

\newcommand{\testc}{
  If \textbackslash\textbackslash is renamed \textbackslash{}plop, it works (or well, the output isn't what is expected but I know how to fix it and at least it compiles):

  \newcommand{\plop}{\\\relax}
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\plop
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

\newcommand{\testd}{
  % LaTeX Error: \begin{mathpar} on input line 70 ended by \end{lines}. [\testd]
  And it's not the \textbackslash{}relax that fixes it:
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      \begin{lines}
        1\\\relax
        2
      \end{lines}
    }{
      3
    }
  \end{mathpar}
}

% Line 66
%\testa
\testb
%\testc
%\testd


\end{document}

Antwort2

Ich habe eine Lösung gefunden, aber ich verstehe sie nicht >_<

\newcommand{\teste}{
  I finally found a fix. Apparently, \textbackslash{}inferrule* doesn't like having several things in its content so if you wrap everything in \{...\}, it works...
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{
      {
        \begin{lines}
          1\\
          2
        \end{lines}
      }
    }{
      3
    }
  \end{mathpar}
}

Das Seltsamste daran ist, dass es fehlschlägt, wenn sich die beiden { und auch die } berühren >_<

\newcommand{\teste}{
  I finally found a fix. Apparently, \textbackslash{}inferrule* doesn't like having several things in its content so if you wrap everything in \{...\}, it works...
  \newenvironment{lines}{}{}
  \begin{mathpar}
    \inferrule*{{
      \begin{lines}
        1\\
        2
      \end{lines}
    }}{
      3
    }
  \end{mathpar}
}

verwandte Informationen