我正在尝试排版 Leslie Lamport 定义的分层证明结构如何撰写证明。
特别是,我正在尝试排版部分
Assume: 1. $r \in \mathbf{Q}$
2. $r^2 = 2$
Prove: False
通过将一个enumerate
放入一个中tabular
。
我目前最好的尝试是
\documentclass{article}
\begin{document}
\begin{tabular}{lp{10cm}}
\scshape Assume: &
\begin{enumerate}
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\\
\scshape Prove: &
False
\end{tabular}
\end{document}
如您所见,环境前后有一些相当难看的额外垂直空间enumerate
。我该如何摆脱这些额外的垂直空间?
答案1
如果你想保留表格:
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{tabular}{lp{10cm}}
\scshape Assume: &
\begin{minipage}[t]{\linewidth}
\begin{enumerate}[leftmargin=*,itemsep=-4pt]
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\end{minipage}
\\[3ex]
\scshape Prove: &
False\\
\end{tabular}
\end{document}
答案2
我会考虑做些不同的事情,而是使用itemize
环境:
\begin{itemize}
\item[Assume]
\begin{enumerate}
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\item[Prove] False
\end{itemize}
您可以scshape
通过加载enumitem
包裹:
\begin{itemize}[font=\sc]
\item[Assume]
\begin{enumerate}
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\item[Prove] False
\end{itemize}
使用itemize
环境是有益的,因为它允许分页;tabular
环境将事物牢固地包装在一个盒子中。
这是一个完整的 MWE。
% arara: pdflatex
% !arara: indent: {overwrite: yes}
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{itemize}
\item[Assume]
\begin{enumerate}
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\item[Prove] False
\end{itemize}
\begin{itemize}[font=\sc]
\item[Assume]
\begin{enumerate}
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\item[Prove] False
\end{itemize}
\end{document}
答案3
还有另一个版本enumitem
:
代码:
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\noindent some text before
\begin{description}[font=\normalfont\scshape,nosep,labelwidth=45pt,leftmargin=\dimexpr\labelwidth+\labelsep]
\item[Assume:]
\begin{enumerate}[leftmargin=*,nosep]
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\end{enumerate}
\item[Prove:] False
\end{description}
\end{document}
答案4
这是 cmhughes 解决方案的一个变体。它使用description
和enumerate
来enumitem
定义两个新列表和一些新命令以保持一致性。
无论如何,我们的想法是提供以下新命令:
\mythm
\myproofsketch
\myassume
\myprove
用于启动证明的各个部分。以及以下环境:
mytheorem
分别包含整个内容并以枚举形式列出假设。
\documentclass{article}
\usepackage{enumitem}
\newlength{\mylstindent}
\settowidth\mylstindent{\bfseries Theorem}
\newlist{mytheoremlst}{description}{1}
\setlist[mytheoremlst]{leftmargin=0pt,itemindent=\mylstindent,style=sameline,font={\normalfont\textsc},noitemsep}
\newlist{myassumptions}{enumerate}{1}
\setlist[myassumptions]{nosep,label=\arabic*.,align=left,itemindent=\mylstindent,before={\hspace*{-\mylstindent}\vspace*{-1.2em}}}
\newcommand*{\myproofsketch}{%
\vskip 5pt
\item[Proof Sketch:]}
\newcommand*{\myassume}{\item[Assume:]\begin{myassumptions}}
\newcommand*{\myprove}{\end{myassumptions}\item[Prove:]}
\newcommand*{\mythm}{\item[\normalfont\bfseries Theorem]}
\newenvironment{mytheorem}{%
\begin{mytheoremlst}%
}%
{\end{mytheoremlst}%
}
\begin{document}
\begin{mytheorem}
\mythm There does not exist $r$ in $\mathbf{Q}$ such that $r^2=2$.
\myproofsketch We assume $r^2=2$ for $r \in \mathbf{Q}$ and argue to a \emph{reductio}. Writing $r=\frac{a}{b}$ where the HCD of $a$ and $b$ is $1$, we deduce from $\frac{m}{n}^2=2$\dots
\myassume%
\item $r \in \mathbf{Q}$
\item $r^2 = 2$
\myprove False
\end{mytheorem}
\end{document}
生成:
有人能建议一种更好的设置方法,myassumption
让第一个假设与“假设:”垂直对齐,而不会丢失与第二个假设的水平对齐吗?这有点像黑客行为,而且可能很脆弱……