Вставка \\ с помощью команды не делает то же самое, что и вставка его напрямую.

Вставка \\ с помощью команды не делает то же самое, что и вставка его напрямую.

Я используюmathpartirпакет и у меня есть некоторый код, сгенерированный (LyX), который помещает окружение (которое я назову lines) в \inferrule*и, похоже, это мешает pdflatex, когда в нем больше двух строк (разделенных \\). Я пробовал несколько вещей, но не смог ничего скомпилировать, пока \\в окружении были разделяющие две строки lines.

Следующий код — это именно тот, который я загрузил на Pastebin: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}

Заранее спасибо за вашу помощь.

решение1

среда — это группа, поэтому ваш код выглядит так:

 {#1\\#2}

что не работает, вы можете определить не-среду, которая нарушает группировку, поэтому определение больше похоже на

{}#1\\#2{}

с двумя фиктивными пустыми группами вместо группы вокруг всего этого.

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

решение2

Я нашел решение, но не понимаю его >_<

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

Самое странное, что если двое {соприкасаются друг с другом и то же самое}, то ничего не получается >_<

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

Связанный контент