悬挂缩进和 \newenvironment 的问题

悬挂缩进和 \newenvironment 的问题

我是 Latex 的新手,我做了很多搜索,但似乎找不到解决这个问题的方法:

我想要一个非常直接的证明环境,证明之后跟着一个悬挂缩进。

像这样:

\documentclass{article}
\parindent=0pt
\parskip=\medskipamount
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{amsmath}

\begin{document}
 \paragraph{Proof:}
 \hangindent=4em
 hello there!\\
 testing testing\\
 \begin{flalign*}
 A &= B \\
 C &= D \end{flalign*}
 bla bla bla!\\
\end{document}

看起来效果不错。 图片1

但是当我尝试用它创建一个 \newenvironment 时,它似乎不起作用:

\documentclass{article}
\parindent=0pt
\parskip=\medskipamount
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{amsmath}

\newenvironment{pf}
  {\paragraph{Proof:} \hangindent=4em}{}

\begin{document}
\begin{pf}
  hello there!\\
  testing testing\\
  \begin{flalign*}
  A &= B \\
  C &= D \end{flalign*}
  bla bla bla!\\
\end{pf}
\end{document}

缩进不再保留(最后一行已关闭),我不知道为什么......

在另一次更复杂的尝试中,我尝试在 \tabu 中使用 \tabu:

\documentclass[12pt,parskip=full]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{amsmath, tabu}
\usepackage{graphicx}
\usepackage{tabularx}

\newenvironment{pfa}
  {
    \begin{tabu}{l|p{16cm}}
      \textit{Proof:} & 
      \begin{tabu}{p16cm}
      }
      { \qed
      \end{tabu}
    \end{tabu} 
    }

\begin{document}
\hrulefill

\begin{tabu}{l|p{16cm}}
  Proof: & \begin{tabu}{p{16cm}}
            hello there!\\
            testing testing\\
            {\begin{align}
               A &= B \\
               C &= D \end{align}}
           \qed
           \end{tabu}
\end{tabu}

\hrulefill 

\begin{pfa}
      hello there!\\
      {\begin{align}
               A &= B \\
               C &= D \end{align}}
\end{pfa}

\end{document}

再次,手动编写的版本可以工作,但是 \newevironment 失败并且抛出错误,我似乎无法修复。

答案1

使用表格进行证明肯定是错误的,因为这不会跨页显示。在证明中使用列表(或)也\hangindent无法正常工作。enumerateitemize

您可以轻松修改proof提供的环境以amsthm使用\list而不是\trivlist,从而允许设置左边距。

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}

% the following two are just for the example
\usepackage[a4paper,margin=3cm]{geometry}
\usepackage{lipsum}

\makeatletter
\renewenvironment{proof}[1][\proofname]
 {\par
  \pushQED{\qed}%
  \normalfont
  \topsep6\p@\@plus6\p@\relax
  \list{}{%
    \settowidth\leftmargin{\textbf{#1:}}%
    \addtolength\leftmargin{\labelsep}%
  }%
  \item[\hskip-\leftmargin\bfseries #1:]\ignorespaces
 }
 {%
  \popQED\endlist\@endpefalse
 }
\makeatother

\begin{document}

\lipsum[2]

\begin{proof}
\lipsum*[3]
\begin{align*}
 A &= B \\
 C &= D
\end{align*}
\lipsum*[3]
\end{proof}

\begin{proof}
\lipsum*[3]
\begin{align*}
 A &= B \\
 C &= D \qedhere
\end{align*}
\end{proof}

\end{document}

在此处输入图片描述

答案2

ntheorem您只需使用定义长度的包即可\theoremindent。我修补了nonumberplain定理样式以使其适应此缩进。您可以使用环境的可选参数

另一个优点是,您可以有一个证明结束符号(您可以根据需要选择),即使证明以显示的方程式结束,它也会自动放置。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.2pt}

\parindent=0pt
\parskip=\medskipamount
%\usepackage{amsthm}
\usepackage{amssymb, amsfonts}
\usepackage{amsmath}

\usepackage[thmmarks,  thref, amsmath]{ntheorem}
\makeatletter
\newtheoremstyle{proof}%
  {\item[\theorem@headerfont\hskip-\dimexpr\labelsep + 0.15em\relax\rlap{##1\theorem@separator}]}%
  {\item[\theorem@headerfont\hskip-\dimexpr\labelsep + 0.15em\relax  ##1\ (##3)\theorem@separator]}
 \makeatother
\theoremindent=4em
\theoremstyle{proof}
\theoremheaderfont{\bfseries}
\theorembodyfont{\normalfont}
\theoremseparator{:}
\theoremsymbol{\ensuremath{\square}}
\newtheorem{proof}{\llap{Proof}}

\begin{document}

 \begin{proof}
 hello there!\\
 testing testing
 \begin{flalign*}
 A &= B \\
 C &= D
 \end{flalign*}
  \end{proof}

 \begin{proof}[of some theorem]
 hello there!\\
 testing testing
 \begin{flalign*}
 A &= B \\
 C &= D
 \end{flalign*}
 Blah blah blah
  \end{proof}

\end{document} 

在此处输入图片描述

相关内容