ConTeXt:如何增加标题的行距?

ConTeXt:如何增加标题的行距?

潘多克使用生成 ConTeXT 文档标题标准简单方案设置标题\tfd。我已经更改了默认的字体和大小\tfd。但是,当标题太长以致于占据多行时,标准行距就显得不够了。

在下面的例子中,“space”的“p”和“long”的“l”几乎接触。将其与下面普通文本的“p”和“l”进行比较。

问题:\starttext如何仅通过修改序言(即不改变和之间的任何内容)来获得更大的行距\stoptext

\setuptolerance[horizontal, tolerant, stretch]

\usetypescript[pagella]
\setupbodyfont[pagella,12pt]
\setupbodyfontenvironment[12pt][
  d=30pt,% For title
  a=12pt% For author & date
  ]

\setuppagenumbering[location={footer,center}]

\starttext
\startalignment[center]
  \blank[2*big]
    {\tfd The space between the lines of this long title is not enough!}
  \blank[3*medium]
    {\tfa The author}
  \blank[2*medium]
    {\tfa September 10, 2013}
  \blank[3*medium]
\stopalignment

Space,\crlf
please!
\stoptext

输出

答案1

修复

正如 Aditya 指出的那样,这是pandoc ConTeXt 模板 并且应该在上游修复。目前,您能做的最好的事情就是编辑模板并将标题设置更改为:

[…]
\startalignment[center]
  \blank[2*big]
  {\tfd\setupinterlinespace $title$\par}
[…]

然后可以通过--template开关使用该自定义模板。

pandoc --to=context --template=mytemplate.context input.md

更好的解决方案是存储文档元数据一次并使用 ConTeXt 宏。从语义上讲,这将是从 Markdown 到 ConTeXt 的更好的标记转换。此外,它简化了使用数据时生成的代码,例如在标题页和 PDF 元数据中\setupinteraction

如果你既不想创建自定义模板也不想等待上游修复,这里有一个丑陋的黑客:

\let\oldTFD\tfd
\def\tfd
  {\oldTFD\setupinterlinespace\groupedcommand{}{\par}}

这将重新定义\tfd字体开关以自动调整行间空间并完成段落(参见 \groupedcommand)。然而,这会改变低级\tfd命令的行为,因此可能会破坏其他东西。

原因

行间距错误的原因在于字体切换使用了相当低级的字体命令,该命令不会调整行间距。另一个原因是该行不是段落,而行间距调整是针对段落进行的。比较:

\starttext
  foo\par {\tfd Bar}                          \par
  foo\par {\tfd Bar\par}                      \par
  foo\par {\tfd\setupinterlinespace Bar}      \par
  foo\par {\tfd\setupinterlinespace Bar\par}  \par %% correct spacing

  foo\par {\switchtobodyfont[24pt]Bar}        \par
  foo\par {\switchtobodyfont[24pt]Bar\par}    \par %% correct spacing
\stoptext

正如你所见,\tfd需要设置行间空间以及\par。更高级别的字体切换命令 \switchtobodyfont 处理行间间距。但它们都需要一个 \par

结果

相关内容