如何在示例环境中缩进标签后的所有文本

如何在示例环境中缩进标签后的所有文本

example我为正在撰写的一篇论文构建了自己的环境。我创建了一个计数器来标记生成的文本块。现在我想在标签后缩进文本,如下所示:

(1)   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Nullam hendrerit tempor purus in interdum. Ut nec augue
      ipsum.

(2)   Sed volutpat aliquet mauris non porta. Vivamus sagittis
      ante dapibus tellus vehicula ullamcorper. Quisque tris-
      tique commodo nisi et semper.

...

(10)  Sed volutpat aliquet mauris non porta. Vivamus sagittis
      ante dapibus tellus vehicula ullamcorper. Quisque tris-
      tique commodo nisi et semper.

这是迄今为止我编写的代码:

\newcounter{examplectr}

\newenvironment{example}[1][]{
    \ignorespaces
    \refstepcounter{examplectr}
    (\theexamplectr)
    \hfill
}{}

但不幸的是,最终的输出看起来更像这样:

(1)   Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nullam hendrerit tempor purus in interdum. Ut nec augue ipsum.

(2)   Sed volutpat aliquet mauris non porta. Vivamus sagittis
ante dapibus tellus vehicula ullamcorper. Quisque tristique
commodo nisi et semper.

有人知道如何实现这一点吗?

答案1

以下答案与 OP 的原始代码紧密相关,仅在前言中添加了一些低级 TeX 代码来设置悬挂缩进的宽度。基本上,它定义了一个名为的长度变量\alength,然后将其值设置为由“ ”填充的“框”的宽度(\theexamplectr)(加上一个微小的模糊因子,根据经验确定)。指示环境example将段落除第一行以外的所有行悬挂缩进量为\alength。请注意,当计数器变量从 1 切换到 2、3 等数字时,缩进量会自动调整。

从设计上来说,这段代码并不像简单地设置包的一些选项那样“优雅” 。相反,它的优点(恕我直言)在于不依赖于这个包,而是演示了如何通过设置和参数enumitem来实现 OP 的目标。:-)\hangafter\hangindent

附录:我根据 OP 的评论编辑了代码,以便可以提前知道最大示例数,这样示例的主体就可以全部设置为相同的(悬挂)缩进。这是通过定义一个counter名为maxexamplectr来实现的;如果此变量大于零,则其值将被视为任何示例环境中的最大数字。相反,如果其值为零,则将为每个标签单独计算悬挂缩进的值。

\documentclass{article}
\usepackage{lipsum,ifthen}

\newcounter{maxexamplectr}  %% largest possible number of examples
\setcounter{maxexamplectr}{1002} 

\newcounter{examplectr} %% counter of current example environment
\setcounter{examplectr}{0}  %% initialize this counter

\newlength\alength   

\makeatletter
% if maxexamplectr>0, calculate \alength only once 
\ifthenelse{\themaxexamplectr>0}{
    \sbox\@tempboxa{(\themaxexamplectr)\ \ }
    \setlength{\alength}{\the\wd\@tempboxa}}{}

\newenvironment{example}{%
    \refstepcounter{examplectr}%
    \ifthenelse{\themaxexamplectr=0}{% calculate \alength if maxexamplectr=0
       \sbox\@tempboxa{(\theexamplectr)\ \ }
       \setlength{\alength}{\the\wd\@tempboxa}}{}
    % start a "generic list" with a single, numbered item
    \begin{list}{{}(\theexamplectr)}%
       {\leftmargin\alength
        \labelwidth\alength
        \topsep0pt}
        \ignorespaces\item }
{\unskip \end{list}}
\makeatother

\begin{document}
\noindent
The quick brown fox \ldots

\begin{example}
\lipsum[2]
\end{example}

\setcounter{examplectr}{20}
\begin{example}
\lipsum[2]
\end{example}

\setcounter{examplectr}{1001}
\begin{example}
\lipsum[2]
\end{example}

\noindent
The quick brown fox \ldots
\end{document}

答案2

使用enumitem包您可以轻松创建类似列表的环境来实现所需的结果:

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{example}{enumerate}{4}
\setlist[example,1]{label=(\arabic*),leftmargin=*,resume,ref=\arabic*}

\begin{document}

\begin{example}
\item \lipsum[1]
\end{example}
\lipsum[1]
\begin{example}
\item \lipsum[1]
\item \lipsum[1]
\end{example}

\end{document}

在此处输入图片描述

编辑:你可以使用,将类似列表的环境包装在另一个环境中series=resume= options

\documentclass{article}
\usepackage{enumitem}
\usepackage{lipsum}

\newlist{example}{enumerate}{4}
\setlist[example,1]{label=(\arabic*),leftmargin=*,ref=\arabic*}
\newenvironment{myexample}
  {\begin{example}[series=lafter,resume=lafter]\item}
  {\end{example}}

\begin{document}

\begin{myexample}
\lipsum[1]
\end{myexample}
\lipsum[1]
\begin{myexample}
\lipsum[1]
\end{myexample}

\end{document}

答案3

下面是使用的解决方案ntheorem下面是使用和changepage

\documentclass{report}
\usepackage{ntheorem}
\usepackage{lipsum}
\usepackage[showframe]{geometry}
\usepackage{changepage}

\makeatletter
\newtheoremstyle{marginjustnumber}%
{\item[\theorem@headerfont \llap{(##2) }]}%
{\item[\theorem@headerfont \llap{(##2)} (##3)]}%
\makeatother

\newlength{\examplelabel}
\theoremstyle{marginjustnumber}
\theorembodyfont{}
\theoremseparator{}
\theoremprework{%
\settowidth{\examplelabel}{(\themyexample)\quad}%
\begin{adjustwidth}{\examplelabel}{}}
\theorempostwork{\end{adjustwidth}}
\newtheorem{myexample}{}

\begin{document}

\begin{myexample}
\lipsum[1]
\end{myexample}
\begin{myexample}
\lipsum[2]
\end{myexample}
\begin{myexample}
\lipsum[3]
\end{myexample}

\end{document}

相关内容