ConTeXt:枚举中的空行

ConTeXt:枚举中的空行

考虑以下 MWE:

\setuplayout[backspace=5cm]
\defineenumeration[example][text=Example,alternative=inmargin]

\starttext
\startexample
  One line before
  \startitemize
    \item Test
  \stopitemize
\stopexample
\startexample
  \startitemize
    \item direct itemize
  \stopitemize
\stopexample
\stoptext

这将产生以下图像:

逐项列举

问题:有没有办法删除 itemize 示例中的空白行(将 itemize 提升到与边距文本出现的高度相同)?

一些说明:

  • 我已经尝试过诸如nowhite等键。它们似乎没有任何效果。
  • 由于 itemize 还存在其他一些环境,因此如果可以与环境无关就好了。也许可以应用一些 Lua 魔法(在 LaTeX 中,可以使用回调轻松实现)。

答案1

您可以使用在这种情况下几乎总是有效的临时解决方案,并使用手动取消空格\blank[back,overlay]

\setuplayout[backspace=5cm]
\defineenumeration[example][text=Example,alternative=inmargin]

\starttext
\startexample
  One line before
  \startitemize
    \item Test
  \stopitemize
\stopexample
\startexample
  \blank[back,overlay]
  \startitemize
    \item direct itemize
  \stopitemize
\stopexample
\stoptext

在此处输入图片描述

要自动执行此解决方案,即插入\blank[back,overlay]每当后面\startENUMERATION直接跟上时,\startitemize您可以使用它。请不要使用此...

\appendvalue{\csname ??constructionstarthandler\endcsname enumeration}{\futurelet\next\checkitemize}
\unexpanded\def\checkitemize{%
    \ifx\next\startitemize
        \blank[back,overlay]%
    \fi
}

答案2

首先,让我们试着理解为什么会出现额外的空间。粗略地说,使用alternative=inmargin相当于

\noindent\inmargin{ .. title .. }
... content ...

下面的示例显示了该行为。

\starttext
\noindent
\inmargin{Example 1}
\startitemize
  \item This is how enumeration works.
\stopitemize


\inmargin{Example 2}
\startitemize
  \item This works correctly
\stopitemize
\stoptext

在此处输入图片描述

\noindent一个简单的修复方法是通过\noindentation内部strc-con.mkvi或本地替换:

\unprotect
\startsetups[\??constructionrenderings:\v!margin]
    \let\\=\crlf
    \noindentation
    \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}%
    \useconstructionstyleandcolor\c!style\c!color
    \ignorespaces
\stopsetups
\protect

这样可以修复多余的新行,但会产生错误拼写的标题:

在此处输入图片描述

可以通过删除以下内容来“修复”此问题scope=local

\unprotect
\startsetups[\??constructionrenderings:\v!margin]
    \let\\=\crlf
    \noindentation
    \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}%
    \useconstructionstyleandcolor\c!style\c!color
    \ignorespaces
\stopsetups
\protect

以下是完整的 MWE:

\showboxes

\unprotect
\startsetups[\??constructionrenderings:\v!margin]
    \let\\=\crlf
    \noindentation
    \inmargin{\flushconstructionheadbox}%
    \useconstructionstyleandcolor\c!style\c!color
    \ignorespaces
\stopsetups
\protect

\setuplayout[backspace=5cm]
\defineenumeration[example][text=Example,alternative=inmargin,
titlealign=flushleft]

\starttext
\startexample
  \startitemize
    \item Test
  \stopitemize
\stopexample

\startexample
  Line 1
  \startitemize
    \item Test
  \stopitemize
\stopexample
\stoptext

这使

在此处输入图片描述

相关内容