背景
我想在两列布局中放置平衡的逐项列表。
问题
更改字体会影响平衡布局;字体包括:
代码
以下代码演示了这个问题:
\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=strut
、grid=
、grid=verytolerant
和grid=stretch
; - 添加
[intro]
至列表; - 用来
\testcolumn[3]
防止出现孤立的小节标题;以及 - 对逐项列表和小节标题的和属性的各种组合进行编码
\vskip
。\empty
before
after
问题
使用双列设置,有没有办法减少空间?
在不丢失任何内容的情况下我能获得的最佳结果包含多余的空白:
我想要实现的目标类似于:
答案1
避免\vskip
而赞成\blank[small]
。
例如,在列表中使用:
before={\blank[small]},
after={\blank[small]},
在小节标题上使用:
\setuphead[subsection][
% Avoid orphaned titles.
before={\testcolumn[3]},
after={\blank[small]},
]
这产生了期望的结果。