没有列表环境的列表式段落

没有列表环境的列表式段落

我有一份包含一组段落的文档,其中每个段落都有一个标签/标题。
我需要一种不寻常的行为:

  • 标签应与段落第一行位于同一行
  • 段落应该缩进,但标签应该不是缩进(即放置在段落左侧一定距离)
  • 如果标签大于缩进,则应该稍微碰到第一行以适应(并且两者之间应该有一个空格)

到目前为止,我正在使用描述列表环境执行此操作:

\begin{description}[leftmargin=3em,style=nextline,itemsep=1ex]

这确实很有效,但是有一个问题:我无法使用wrapfig,因为wrapfig不能使用列表。

有没有一种方法可以在没有环境的情况下做同样的事情,description以便我wrapfig也可以使用?

答案1

下面定义了一个非常简单的fakedescription环境(可以进一步增强它,而不是定义间距的自定义长度,而是选择由 LaTeX(或enumitem)为真实description环境定义的间距)。它应该与wrapfig(下面有一个使用的小演示wrapfig,但我没有做任何广泛的测试)。

\documentclass[]{article}

\usepackage{wrapfig}

\makeatletter
\newlength\fakedescription@indent
\newlength\fakedescription@labelsep
\newlength\fakedescription@itemsep
\newlength\fakedescription@topsep
\newcommand\fakeitem[1][]
  {%
    \GenericError{}
      {Error: Usage of \string\fakeitem\space outside of fakedescription}
      {}
      {}%
  }
\AtBeginDocument
  {% setting AtBeginDocument since earlier we can't rely on em being correct
    \fakedescription@indent=3em
    \fakedescription@labelsep=1em
    \fakedescription@itemsep=\smallskipamount
    \fakedescription@topsep=\medskipamount
  }
\newenvironment{fakedescription}
  {%
    \par
    \vspace\fakedescription@topsep
    \renewcommand\fakeitem[1][]
      {%
        \par
        \vskip\fakedescription@itemsep
        \noindent\kern-\fakedescription@indent
        \sbox0{\textbf{##1}}%
        \ifdim\wd0>\dimexpr
                   \fakedescription@indent-\fakedescription@labelsep\relax
          \usebox0\kern\fakedescription@labelsep
        \else
          \makebox[\fakedescription@indent][l]{\usebox0}%
        \fi
        \ignorespaces
      }%
    \advance\leftskip\fakedescription@indent
    \ignorespaces
  }
  {%
    \par
    \vspace\fakedescription@topsep
    \@endpetrue
  }
\makeatother

\usepackage[]{graphicx}

\usepackage{duckuments}

\begin{document}
\blindduck[-]
\begin{wrapfigure}{r}[0pt]{5cm}
  \includegraphics[width=5cm]{example-image-duck}
\end{wrapfigure}
\begin{fakedescription}
  \fakeitem[A] the first one letter of the Latin alphabet
  \fakeitem[AB] the first two letters of the Latin alphabet
  \fakeitem[ABC] the first three letters of the Latin alphabet
  \fakeitem[ABCD] the first four letters of the Latin alphabet
  \fakeitem[ABCDE] the first five letters of the Latin alphabet
  \fakeitem[story] \blindduck[-]
\end{fakedescription}
\blindduck[-]
\end{document}

在此处输入图片描述

相关内容