我是 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}
看起来效果不错。
但是当我尝试用它创建一个 \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
无法正常工作。enumerate
itemize
您可以轻松修改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}