考虑以下 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
这使