据我所知,ConTeXt 中唯一一个不可中断空格命令是波浪号 (~) 命令,但我希望能够更精确地控制不可中断空格的长度。在 LaTeX 中,我可以使用 \hspace* 来实现这一点,但 ConTeXt 仅提供该命令的非星号版本,这会产生可中断空格。
ConTeXt 是否提供了 \hspace 命令的非中断版本,或者在 ConTeXt 中是否有其他首选方法?我愿意暂时修改 ~ 空间的宽度,但我也不确定如何做到这一点。
答案1
您可以\kern
按照 Mico 在评论中所建议的方式使用,但是,它的缺点是它不会拉伸或收缩。
为了获得不能被打破的水平空间,并且可以像单词间空间一样拉伸和收缩,你可以使用
\nobreak\hskip1em plus 1em minus .5em\nobreak
但是,这也不符合 ConTeXt 的一流 Unicode 支持理念。与其手动指定空间,不如看看所有预定义的水平空间spac-chr.mkiv
,ConTeXt 本身支持这些格式。它们最大的优点是可以正确导出为 XML 格式,并且可以从 PDF 复制粘贴。如果它们是可拆分的,那么应该可以像\nobreak
上面一样将它们括起来。
以下是摘录自spac-chr.mkiv
:
\edef\nobreakspace {\normalUchar"00A0} % space
\edef\softhyphen {\normalUchar"00AD} % softhyohen
\edef\enquad {\normalUchar"2000} % quad/2
\edef\emquad {\normalUchar"2001} % quad
\let\ideographicspace \enquad
\let\ideographichalffillspace \emquad
\edef\twoperemspace {\normalUchar"2002} % quad/2
\edef\threeperemspace {\normalUchar"2004} % quad/3
\edef\fourperemspace {\normalUchar"2005} % quad/4
\edef\sixperemspace {\normalUchar"2006} % quad/6
\edef\figurespace {\normalUchar"2007} % width of zero
\edef\punctuationspace {\normalUchar"2008} % width of period
\edef\breakablethinspace {\normalUchar"2009} % quad/8
\edef\hairspace {\normalUchar"200A} % quad/8
\edef\zerowidthspace {\normalUchar"200B} % 0
\edef\zerowidthnonjoiner {\normalUchar"200C} % 0
\edef\zerowidthjoiner {\normalUchar"200D} % 0
\edef\narrownobreakspace {\normalUchar"202F} % quad/8
\udef\zerowidthnobreakspace {\penalty\plustenthousand\kern\zeropoint}
\udef\fiveperemspace {\hskip\dimexpr\emwidth/5\relax}