我的自定义定理/证明环境无法很好地协同运行

我的自定义定理/证明环境无法很好地协同运行

从下面的 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}
  1. 使用\newcounter{theorem}[section]顺序重置每个部分的计数器。

  2. 使用\par\addvspace{5mm}这样的东西,当遵循使用相同命令(例如列表)的其他环境时,它不会添加过多的空间。

  3. \noindent可以精确控制标签的放置位置。不要忘记\ignorespaces在“开始部分”的末尾

  4. \ignorespacesafterend在“结束部分”是无用的,因为你强制结束一个段落;无论如何,这必须是最后的令牌。

  5. 小心定义中的虚假空格。我使用%比必要更多的行尾来保护,但谨慎一点总比后悔好。

在此处输入图片描述

相关内容