ConTeXt 中的自定义目录样式

ConTeXt 中的自定义目录样式

我想改变目录的样式:

  1. 章节条目不应该有虚线。 (见下文)
  2. 没有编号的章节应该没有左边距。 (见下文)
  3. 无论页码是一位数还是两位数,虚线都应以相同的“x 位置”结束。

这是我当前最小(并非完全)的工作示例代码:

\setupcombinedlist[content][
    alternative=c,
    aligntitle=no  % has no effect?
]

\setuplist[chapter][
    alternative=b,  % has no effect?
    width=1.4em,
    style={\ss\bf},
    aligntitle=no,  % has no effect?
    before={\blank[4*big]}
]

\setuplist[section][width=2.2em]

\setupinterlinespace[line=3.4ex]  % more line spacing
\setupwhitespace[medium]  % space between paragraphs

% maybe there is a better way decrease line spacing for TOC?…
\startsectionblockenvironment[frontpart]
    \setupinterlinespace[line=1.5ex]
\stopsectionblockenvironment

\starttext
    \startfrontmatter
        \completecontent
        \chapter{Bla}
    \stopfrontmatter

    \page[8]  % to get two-digit numbers

    \startbodymatter
        \chapter{Foo}
        \section{Foo Foo}
        \section{Foo Foo}
        \chapter{Bar}
        \section{Bar Bar}
        \chapter{Baz}
        \section{Baz Baz}
    \stopbodymatter

    \startbackmatter
        \chapter{Bibliography}
    \stopbackmatter

    \startappendices
        \chapter{CD Contents}
    \stopappendices
\stoptext

注释结果: ConTeXt 结果


它看起来有点像这个 LaTeX 版本:

\documentclass[a4paper]{scrbook}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage[tocfullflat]{tocstyle}
\usetocstyle{KOMAlike}

\begin{document}

\tableofcontents

\frontmatter
    \chapter{Bla}

\mainmatter
    \setcounter{page}{8}  % to get two-digit numbers
    \chapter{Foo}
    \section{Foo Foo}
    \section{Foo Foo}
    \chapter{Bar}
    \section{Bar Bar}
    \chapter{Baz}
    \section{Baz Baz}

\backmatter
    \chapter{Bibliography}

\appendix
    \chapter{CD Contents}

\end{document}

LaTeX 结果


更新 1:

问题 1 的解决方案非常简单:alternative=c必须从中删除\setupcombinedlist[content],因为此样式传递给全部子列表。而是\setupcombinedlist[section,subsection][alternative=c]仅为章节和子章节启用虚线。

更新 2:

问题 2 似乎在较新的 ConTeXt 版本中不存在。屏幕截图是使用版本 2012.05.30 11:26 创建的。但版本 2013.01.08 01:19 可以正常工作。

答案1

以下是我针对您最后三点提出的解决方案。实际上,它同时涵盖了所有三点。让我们开始吧:

首先,我们定义一个新的列表替代方案。这是一种抽象且非常灵活的设置列表布局的方法(顺便说一下,节标题使用类似的机制)。我称之为dotfix

\unprotect
\definelistalternative
  [dotfix]
  [distance=0pt,
   width=2em,
   stretch=10em,
   filler=\hskip.5em\gleaders\hbox to .5em{\hss.\hss}\hfill\relax,
   renderingsetup=\??listrenderings:abc]
 \protect

width设置调整点和页码之间的距离,这就是您想要的。现在您可以使用新创建的样式,而不是默认样式:

\setupcombinedlist
  [section]
  [alternative=dotfix]

其余部分或多或少是从您的示例中复制而来的。

\setuplist[chapter]
  [alternative=b,
   style=sansbold,
   before={\blank[4*big]}]

\setuplist
  [section]
  [width=2.2em]

\setupwhitespace
  [medium]

\startsectionblockenvironment[frontpart]
  \setupinterlinespace [line=1.5ex]
\stopsectionblockenvironment

\starttext

  \startfrontmatter
    \completecontent
    \startchapter [title=Bla]
    \stopchapter
  \stopfrontmatter

\startbodymatter
    \dorecurse{3}{
      \startchapter [title=Foo]
        \startsection [title=Bar]
        \stopsection
        \startsection [title=Another section]
        \stopsection
      \stopchapter}
    \setcounter [userpage] [1234]
  \stopbodymatter

  \startbackmatter
    \startchapter [title=Bibliography]
    \stopchapter
  \stopbackmatter

\stoptext

结果

相关内容