我希望下面代码中示例环境中的边距稍微缩进。实现此目的的最简单方法是什么?它应该适用于所有示例环境。
在下面的例子中,只有标题缩进,但我希望整个环境从两侧(稍微)缩进。
\documentclass{amsart}
\newtheoremstyle{ugh}
{3pt}% hSpace above
{3pt}% hSpace below
{}% hBody font
{1cm}% hIndent amount
{\bfseries}% hTheorem head font
{:}% hPunctuation after theorem head
{.5em}% hSpace after theorem head
{}% hTheorem head spec (can be left empty, meaning ‘normal’)
\theoremstyle{ugh}
\newtheorem{example}{Example}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\begin{example}
% I want this automatically indented a bit at both sides for any example
\lipsum[3-4] \qed
\end{example}
\lipsum[5-6]
\end{document}
答案1
\@thm
我会在环境中本地修补该命令example
。当然,你无法在环境中正确陈述定理,但我认为你不会这样做。
\documentclass{amsart}
\usepackage{etoolbox}
\usepackage{lipsum}
\theoremstyle{definition}
\newtheorem{innerexample}{Example}
\makeatletter
\patchcmd{\endinnerexample}{\endtrivlist}{\endlist}{}{}
\newenvironment{example}
{\patchcmd{\@thm}{\trivlist}{\list{}{\leftmargin=3em \rightmargin=3em}}{}{}%
\innerexample\pushQED{\qed}}
{\popQED\endinnerexample}
\makeatother
\begin{document}
\lipsum*[1]
\[
e^x=\sum_{k\ge0}\frac{x^k}{k!}
\]
\lipsum[2]
\begin{example}
\lipsum*[3]
\[
e^x=\sum_{k\ge0}\frac{x^k}{k!}
\]
\lipsum*[4]
\end{example}
\lipsum[5-6]
\end{document}
这个想法是修补\@thm
do\list
而不是\trivlist
,所以我们能够使用\leftmargin
和\rightmargin
。修补发生在example
环境内部,因此当环境结束时它将消失。
我还在最后添加了自动 QED。\qedhere
如果示例以列表或显示结尾,则照常使用。
答案2
这是一个基于changemargin环境的解决方案
编辑:这并没有回答显示方程的问题
\documentclass{amsart}
\newtheoremstyle{ugh}
{3pt}% hSpace above
{3pt}% hSpace below
{}% hBody font
{}% hIndent amount
{\bfseries}% hTheorem head font
{:}% hPunctuation after theorem head
{.5em}% hSpace after theorem head
{}% hTheorem head spec (can be left empty, meaning ‘normal’)
\theoremstyle{ugh}
\newtheorem{eexample}{Example}
\newenvironment{changemargin}{%
\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{1cm}%
\setlength{\rightmargin}{1cm}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{\parskip}%
}%
\item[]}{\end{list}}
\newenvironment{example}{%
\begin{changemargin}\vskip-\baselineskip
\begin{eexample}}{%
\end{eexample}\end{changemargin}}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\begin{example}
% I want this automatically indented a bit at both sides for any example
\lipsum[3-4] \qed
\end{example}
\lipsum[5-6]
\end{document}
如果
\documentclass{amsart}
取而代之
\documentclass[leqno]{article}
\usepackage{amsmath,amsthm}
它是正确的。
编辑:使用 amsart 完成解决方案这不是正确的方法,但它可以完成工作
\documentclass{amsart}
\newtheoremstyle{ugh}
{3pt}% hSpace above
{3pt}% hSpace below
{}% hBody font
{}% hIndent amount
{\bfseries}% hTheorem head font
{:}% hPunctuation after theorem head
{.5em}% hSpace after theorem head
{}% hTheorem head spec (can be left empty, meaning ‘normal’)
\theoremstyle{ugh}
\newtheorem{eexample}{Example}
\newenvironment{changemargin}{%
\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{1cm}%
\setlength{\rightmargin}{1cm}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{\parskip}%
}%
\item[]%
}{\end{list}}
\newenvironment{example}{%
\begin{changemargin}%
\eeq\vskip-\baselineskip%
\begin{eexample}}{%
\end{eexample}\end{changemargin}}
\usepackage{lipsum}
\makeatletter\def\eeq{% this may be bad idea
\def\maketag@@@##1{\makebox[1.5cm][r]{\m@th\normalfont##1}}}
\makeatother
\begin{document}
\lipsum[1-2]
\begin{example}
% I want this automatically indented a bit at both sides for any example
\lipsum[3-4]
\begin{equation}
x+y
\end{equation}
\qed
\end{example}
\lipsum[5-6]
\end{document}