背景

背景

背景

我想在两列布局中放置平衡的逐项列表。

问题

更改字体会影响平衡布局;字体包括:

代码

以下代码演示了这个问题:

\starttypescript [sans] [TestSans]
  \definefontsynonym [Sans]           [name:chivoregular]
  \definefontsynonym [SansBold]       [name:chivoblack]
  \definefontsynonym [SansItalic]     [name:chivoitalic]
  \definefontsynonym [SansBoldItalic] [name:chivoblackitalic]
\stoptypescript

\starttypescript [serif] [TestSerif]
  \definefontsynonym [Serif]           [name:gentiumbasic]
  \definefontsynonym [SerifBold]       [name:gentiumbasicbold]
  \definefontsynonym [SerifItalic]     [name:gentiumbasicitalic]
  \definefontsynonym [SerifBoldItalic] [name:gentiumbasicbolditalic]
\stoptypescript

\definetypeface [TestFont] [rm] [serif] [TestSerif] [default]
\definetypeface [TestFont] [ss] [sans]  [TestSans]  [default]

\usetypescript[TestFont][ec]
%\setupbodyfont[TestFont]

\define[1]\IngredientName{\expanded{\index{#1+\namedstructurevariable{section}{title}}{#1}}}

\define[1]\IngredientUnit{#1}

\define[1]\IngredientMeasure{
  \if\relax\detokenize{#1}\relax
    %
  \else
    #1
  \fi
}

\define[3]\ingredient{\startitem\IngredientUnit{#1}\IngredientMeasure{#2}\IngredientName{#3}\stopitem}

\definestartstop[TestIngredientGroup]
\defineitemgroup[TestIngredient]

\setupstartstop[TestIngredientGroup][
  before={\startmixedcolumns[balance=yes,grid=,]},
  after={\stopmixedcolumns},
]

\defineitemgroup[TestIngredient]
\setupitemgroup[TestIngredient][each][packed][
  width=\zeropoint,
  %before={\vskip-.5em},
  %after={\vskip.5em},
  symbol=,
]

\setuphead[subsection][
  number=no,
  %before={\testcolumn[2]},
  %after={\empty},
  style=\ss,
]

\starttext

\startTestIngredientGroup
\startsubsection[title={Main Ingredients},]
\startTestIngredient
  \ingredient{1}{}{egg}\ingredient{1}{}{avocado}
  %\ingredient{1}{pkg}{applewood-smoked bacon}\ingredient{1}{}{onion}\ingredient{2}{tbsp}{flour}\ingredient{2\vfrac{1}{2}}{cup}{fish stock}\ingredient{1}{}{potato}\ingredient{\vfrac{1}{2}}{tsp}{cayenne pepper}\ingredient{\vfrac{1}{2}}{tsp}{nutmeg}\ingredient{1\vfrac{1}{2}\emdash{}2}{cup}{milk}\ingredient{\vfrac{1}{2}}{cup}{cream}\ingredient{1}{pinch}{salt}\ingredient{1}{pinch}{pepper}\ingredient{1}{tsp}{lime juice}
\stopTestIngredient
\stopsubsection
\stopTestIngredientGroup

\stoptext

结果最初看起来令人满意;当尝试调整空白、字体或两者时,就会出现问题。

重现问题

通过取消注释来应用字体:%\setupbodyfont[TestFont],结果如下:

字体更改

列内容已从左列移至右列。可通过取消注释来解决此问题:%before={\vskip-.5em},,结果为:

垂直跳跃

这适用于两行,但启用%\ingredient{1}{pkg}{applewood-smoked bacon}...会导致文本丢失:

缺少文字

无论使用哪种字体,几行文字都完全消失了。虽然这些文字可以再次显示出来,但当列表中只有几项内容时,内容又会从左列移到右列。

我试过了:

  • 设置grid=strutgrid=grid=verytolerantgrid=stretch
  • 添加[intro]至列表;
  • 用来\testcolumn[3]防止出现孤立的小节标题;以及
  • 对逐项列表和小节标题的和属性的各种组合进行编码\vskip\emptybeforeafter

问题

使用双列设置,有没有办法减少空间?

在不丢失任何内容的情况下我能获得的最佳结果包含多余的空白:

多余的空白

我想要实现的目标类似于:

期望结果

答案1

避免\vskip而赞成\blank[small]

例如,在列表中使用:

before={\blank[small]},
after={\blank[small]},

在小节标题上使用:

\setuphead[subsection][
  % Avoid orphaned titles.
  before={\testcolumn[3]},
  after={\blank[small]},
]

这产生了期望的结果。

也可以看看:http://wiki.contextgarden.net/Command/blank

相关内容