左对齐逻辑证明

左对齐逻辑证明

我正在排版自然演绎证明。这些由几个编号的语句以及理由组成。我正在使用该logicproof包,一个最小示例如下所示:

\documentclass[article]
\usepackage{logicproof}
\begin{document}
text
\begin{logicproof}{0}
    statement & justification
\end{logicproof}

它编译成这样(黑条显示页面的几何形状):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}

两种解决方案均产生相同的输出:

输出

相关内容