潘多克使用生成 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
。