背景

背景

背景

根据用户偏好,创建一个可以有零列、两列或三列布局的文档。我想\columnsets通过仅重新定义节来保持内容整洁(节和章页面都有独立的样式)。

例如,这会产生所需的结果,但需要重复\startcolumnsetfor 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

使用afteraftersection键来应用给定节的列集。钩子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

相关内容