从下面的 MWE 中可以看出,当我有一个theorem
环境后跟一个proof
环境时,证明不会进入下一行;它会直接呈现在我为该定理所写的文本之上。
\documentclass{book}
\usepackage{color}
\newcounter{theorem}
\setcounter{theorem}{0}
\def\thetheorem{\thesection.\arabic{theorem}}
\newenvironment{theorem}[1][]{%
\refstepcounter{theorem}
\vspace{5mm}
\makebox[-15pt][r]{
\normalfont\large\color{cyan} Theorem\ \thetheorem$\;\;\;\;$}\setbox0\hbox{\ }
\hspace{-\the\wd0}
\ifx\relax#1\relax \else{\large\color{cyan} #1\\[1mm]}\fi
}
{\ignorespacesafterend\medskip}%
\newcounter{example}
\setcounter{example}{0}
\def\theexample{\thesection.\arabic{example}}
\newenvironment{example}[1][]{%
\refstepcounter{example}
\vspace{5mm}
\makebox[-15pt][r]{
\normalfont\large\color{cyan} Example\ \theexample$\;\;\;\;$}\setbox0\hbox{\ }
\hspace{-\the\wd0}
\ifx\relax#1\relax \else{\large\color{cyan} #1\\[1mm]}\fi
}
{\ignorespacesafterend\medskip}%
\newenvironment{proof}{%
\vspace{5mm}
\makebox[-15pt][r]{
\normalfont\large\color{cyan} Proof$\;\;\;\;$}\setbox0\hbox{\ }
\hspace{-\the\wd0}
}
{\ignorespacesafterend\medskip}%
\begin{document}
\begin{theorem}
asdf
\end{theorem}
\begin{proof}
fdsa
\end{proof}
\end{document}
答案1
\medskip
和朋友在水平模式下不起作用。将 a \par
(或 a \\
) 放入环境闭包中。(然后使用水平间距进行操作 ;-)
答案2
你做了很多事情,方式很复杂,所以对空间的控制很差。这里有一个更好的实现建议。
\documentclass{book}
\usepackage{color}
\usepackage{lipsum} % for mock text
\newcounter{theorem}[section]
\def\thetheorem{\thesection.\arabic{theorem}}
\newenvironment{theorem}[1][]{%
\par\addvspace{5mm}%
\refstepcounter{theorem}%
\noindent\makebox[0pt][r]{%
\normalfont{\large\color{cyan}Theorem\ \thetheorem}\quad}%
\ifx\relax#1\relax \else{\large\color{cyan}#1\\[1mm]}\fi
\ignorespaces}
{\par\addvspace{\medskipamount}}
\newcounter{example}[section]
\def\theexample{\thesection.\arabic{example}}
\newenvironment{example}[1][]{%
\par\addvspace{5mm}%
\refstepcounter{example}%
\noindent\makebox[0pt][r]{%
\normalfont{\large\color{cyan}Example\ \theexample}\quad}%
\ifx\relax#1\relax\else{\large\color{cyan}#1\\[1mm]}\fi
\ignorespaces}
{\par\addvspace{\medskipamount}}
\newenvironment{proof}{%
\par\addvspace{5mm}
\noindent\makebox[0pt][r]{%
\normalfont{\large\color{cyan}Proof}\quad}%
\ignorespaces}
{\par\addvspace{\medskipamount}}
\begin{document}
\lipsum[1]
\begin{theorem}
\lipsum*[2]
\end{theorem}
\begin{proof}
\lipsum*[3]
\end{proof}
\end{document}
使用
\newcounter{theorem}[section]
顺序重置每个部分的计数器。使用
\par\addvspace{5mm}
这样的东西,当遵循使用相同命令(例如列表)的其他环境时,它不会添加过多的空间。你
\noindent
可以精确控制标签的放置位置。不要忘记\ignorespaces
在“开始部分”的末尾\ignorespacesafterend
在“结束部分”是无用的,因为你强制结束一个段落;无论如何,这必须是最后的令牌。小心定义中的虚假空格。我使用
%
比必要更多的行尾来保护,但谨慎一点总比后悔好。