我正在排版自然演绎证明。这些由几个编号的语句以及理由组成。我正在使用该logicproof
包,一个最小示例如下所示:
\documentclass[article]
\usepackage{logicproof}
\begin{document}
text
\begin{logicproof}{0}
statement & justification
\end{logicproof}
我希望证明能与文本的其余部分对齐,但我看不到任何关于如何做到这一点的说明。包装文档。我相信该包tabular
在引擎盖下使用。
我试图重新定义\center
以解决这个问题,下面的代码似乎可以解决问题 - 但我不确定这是否是一种好的做法。
\def\center{\trivlist\item\relax}
\def\endcenter{\endtrivlist}
有没有更好的方法?我应该改用\renewcommand
吗?
答案1
在环境定义中,使用logicproof
命令\center
和。\endcenter
解决这个问题最简单的方法是使用包\patchcmd
中的命令etoolbox
:
\documentclass{article}
\usepackage{logicproof,etoolbox}
\patchcmd{\logicproof}{\center}{\flushleft}{}{}
\patchcmd{\endlogicproof}{\endcenter}{\endflushleft}{}{}
\begin{document}
\noindent text
\begin{logicproof}{0}
statement & justification
\end{logicproof}
\end{document}
另一个解决方法是简单地用\flushleft
和替换序言\endflushleft
中的这些内容\renewenvironment{logicproof}
:
\documentclass{article}
\usepackage{logicproof}
\makeatletter
\renewenvironment{logicproof}[1]{%
\setcounter{lp@line}{0}%
\setcounter{lp@nested}{0}%
\setcounter{lp@total@nests}{#1}%
\setlength{\tabcolsep}{0mm}%
\let\lp@orig@arraycr\@arraycr%
\renewcommand{\@arraycr}{\lp@cr}%
\renewcommand{\@currentlabel}{\p@lp@line\thelp@line}%
\ifthenelse{%
0=#1%
}{%
\def\lp@tab@format{{r@{~~~}>{$}l<{$}@{~~~~}l}}%
}{%
\def\lp@tab@format%
{{r@{~~~}*{#1}{l}@{~}>{$}l<{$}@{~~~~}l@{~}*{#1}{r}}}
}%
%\center% <-- REMOVED
\flushleft% <-- ADDED
\expandafter\tabular\lp@tab@format%
\lp@start@proof@line%
}{%
\lp@stop@proof@line%
\endtabular%
%\endcenter% <-- REMOVED
\endflushleft% <-- ADDED
\setcounter{lp@total@nests}{0}%
\ifthenelse{%
0=\value{lp@nested}
}{% All is well.
}{% There are still open subproofs.
\def\@currenvir{subproof}%
}
}
\makeatother
\begin{document}
\noindent text
\begin{logicproof}{0}
statement & justification
\end{logicproof}
\end{document}
两种解决方案均产生相同的输出: