背景
根据用户偏好,创建一个可以有零列、两列或三列布局的文档。我想\columnsets
通过仅重新定义节来保持内容整洁(节和章页面都有独立的样式)。
例如,这会产生所需的结果,但需要重复\startcolumnset
for each \startsection
,我想避免这种情况:
\definecolumnset[StyleColumns][n=2,
%rule=on,
]
\startsection[title={Section1},reference=sec:section1,]
\startcolumnset[StyleColumns]
\placefigure[left]{}{%
\externalfigure[7b104cc5c6.jpg][width=\textwidth]}
This is a sentence that is really, really, really and very long.
\stopcolumnset
\stopsection
\startsection[title={Section2},reference=sec:section2,]
\startcolumnset[StyleColumns]
\placefigure[left]{}{%
\externalfigure[7b104cc5c6.jpg][width=\textwidth]}
This is a sentence that is really, really, really and very long.
\stopcolumnset
\stopsection
(这垂直规则对我来说还不起作用,但那是另一个问题。)
问题
书中可能会有数百个章节会自动生成。我想定义是否在主要内容之外使用多个列单一位置在文档内(即在第一个之前\startbodymatter
)。
请原谅我的口音,我想做这样的事情:
% <CODE BLOCK>
\let\OldSection\section
\define\section{%
\startsection
\startcolumnset[StyleColumns]
\OldSection
\stopcolumnset
\stopsection
% </CODE BLOCK>
\startsection[title={Section1},reference=sec:section1,]
\placefigure[left]{}{%
\externalfigure[7b104cc5c6.jpg][width=\textwidth]}
This is a sentence that is really, really, really and very long.
\stopsection
\startsection[title={Section2},reference=sec:section2,]
\placefigure[left]{}{%
\externalfigure[7b104cc5c6.jpg][width=\textwidth]}
This is a sentence that is really, really, really and very long.
\stopsection
这样,当生成文档时,如果<CODE BLOCK>
不包含,则文档将不会使用多列。
替代方法
我考虑过使用条件模式,但这会导致内容混乱或重复。
问题
如何使用 ConTeXt 创建文档,以便\startsection
...\stopsection
代码块可以制成柱状,而无需实际嵌入每个部分的代码块中\startcolumnset[X]
... ?\stopcolumnset
有关的
答案1
使用after
和aftersection
键来应用给定节的列集。钩子after
被插入到节头和内容之间,在节的末尾。如果不应将列集应用于整个文档,您可以为列文本定义单独的标题。否则只需使用aftersection
重新定义。section
\setuphead[section]
\definecolumnset
[StyleColumns]
[n=2]
\definehead
[ColumnSection]
[section]
[after={\startcolumnset[StyleColumns]},
aftersection=\stopcolumnset]
\starttext
\startColumnSection [title=Section 1]
\dorecurse{4}{\input knuth\par}
\stopColumnSection
\startsection [title=Section 2]
\dorecurse{4}{\input knuth\par}
\stopsection
\stoptext