명령과 함께 \\를 삽입하는 것은 직접 삽입하는 것과 동일한 작업을 수행하지 않습니다.

명령과 함께 \\를 삽입하는 것은 직접 삽입하는 것과 동일한 작업을 수행하지 않습니다.

나는mathpartir패키지에 환경(이라고 부를 것 lines) 을 추가하는(LyX에 의해) 생성된 일부 코드가 있는데, 그 안에 두 개 이상의 줄( 로 구분)이 있을 때마다 \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}
}

관련 정보