estou usando omathpartir
pacote e tenho um código gerado (pelo LyX) que coloca um ambiente (que chamarei de lines
) no \inferrule*
e parece incomodar pdflatex
sempre que há mais de duas linhas (separadas por \\
) nele. Tentei várias coisas, mas não consegui compilar nada enquanto houvesse \\
duas linhas separando em um lines
ambiente.
O código a seguir é exatamente aquele que carreguei no 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}
Agradeço antecipadamente por sua ajuda.
Responder1
um ambiente é um grupo, então seu código é como
{#1\\#2}
o que não funciona, você pode definir um não ambiente que anula o agrupamento, então a definição é mais parecida
{}#1\\#2{}
com dois grupos falsos e vazios, em vez de um grupo em torno de tudo.
\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}
Responder2
Encontrei uma solução, mas não entendi >_<
\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}
}
O mais estranho é que se os dois { se tocam e o } também, falha >_<
\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}
}