私はmathpartir
lines
パッケージには、に環境 ( と呼びます) を配置する (LyX によって) 生成されたコードがあり、 に2 行以上 ( で区切られている) があると\inferrule*
問題が発生するようです。いくつか試してみましたが、環境内に 2 行以上を区切るがある限り、何もコンパイルできませんでした。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{}
全体を囲むグループではなく、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}
}
一番奇妙なのは、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}
}