乐趣区

关于tex:LuainConTeXt05时间戳

上一篇:卡片

我要在卡片的页脚区域减少工夫戳,例如

2023 年 01 月 26 日 凌晨 4 时 44 分 

然而,迄今为止,尚未介绍如何让 ConTeXt 反对汉字。

汉字,始终是 TeX 世界之痛。

与仅须要几十个字母的拼音文字不同,汉字要成千上万个字符。为汉字设计字体,全副字符须要应用字体设计软件逐个绘制而成。

字体大多是有版权的,须要付费取得字体设计公司的受权方能应用。中文 Windows 用户之所以能看到汉字,须要感激微软出钱购买了汉字字体的受权,但也无需感激,羊毛出在猪身上。不过,即便你应用的是正版 Windows 零碎,假使将其字体复制到非 Windows 零碎里应用,仍然很有可能是侵权行为。RMS 当年因为感觉相似这样的事件切实是荒谬至极,愤而举起自由软件大旗。

微软 Office,金山 WPS,方正的飞腾以及 Adobe 的 InDesign 等商业排版类软件,它们不为汉字而痛,因为经营它们的这些公司有购买甚至设计汉字字体的实力。TeX 则不然,它是自由软件,负责它的开发和保护的组织是非盈利组织,没有这样的实力。

有些汉字字体是收费的。这份文档仅以此类字体为例,介绍如何在 ConTeXt 里应用,然而所讲述的常识对于任何 TrueType 和 OpenType 格局的汉字字体理当实用。

Google 公司和 Adobe 公司联合开发了蕴含了汉字的思源字体,有黑体 1,也有宋体 2。这份文档仅应用思源宋体,可从以下链接下载:

思源宋体

下载后,将 SourceHanSerifCN.zip 解开,这份文档仅应用其中的 SourceHanSerifCN-Regular.otf 字体。

有很多种方法让 ConTeXt 在须要指定字体的时候可能找到字体文件,最简略的一种办法是将字体文件放在 ConTeXt 的装置目录里的指定地位。

我的机器运行的是 Linux 零碎,我将 ConTeXt 装置到了 $HOME/opt/context 目录。对于不相熟 Linux 系统目录构造及相干术语的 Windows 用户而言,能够设想为,我将 ConTeXt 装置到了 D:\Program Files\context 目录,这个目录就是所谓的 ConTeXt 的装置目录。

因为 SourceHanSerifCN-Regular.otf 是 Adob 公司设计的 OpenType 字体,所以该当将其装置到 ConTeXt 装置目录里的子目录

tex/texmf-fonts/fonts/opentype/adobe/SourceHanSerifCN

假使没有这样的子目录,可自行逐级创立。

实现上述的字体装置过程后,需执行以下命令,为 ConTeXt 制备字体文件索引信息:

$ mtxrun --generate
$ mtxrun --script font --reload

应用以下命令可查看上述命令为 SourceHanSerifCN-Regular.otf 字体在 ConTeXt 里的一些信息:

$ mtxrun --script font --list --file -pattern=SourceHanSerifCN-Regular.otf
familyname         weight   style    width    variant   fontname                  filename                       subfont   fontweight

sourcehanserifcn   normal   normal   normal   normal    sourcehanserifcnregular   SourceHanSerifCN-Regular.otf             conflict: regular

上述命令输入的第 1 列信息 sourcehanserifcn,在 ConTeXt 源文件里通过这个名字应用 SourceHanSerifCN-Regular.otf 字体。

当初,能够在卡片上显示汉字了。例如

\environment card-env
\definefontfamily[myfont][serif][sourcehanserifcn]
\setscript[hanzi]
\setupbodyfont[myfont]

\starttext
新冠,隔离,静默,全员核酸,大号流感,二十条,新十条,布洛芬,辉瑞药……
\stoptext

排版后果为

当初能够将

\definefontfamily[myfont][serif][sourcehanserifcn]
\setscript[hanzi]
\setupbodyfont[myfont]

挪到 card-env.tex 文件里了。

在文档的页脚(footer)写入一些文字,可应用 ConTeXt 的 \setupfootertexts 命令。会设置页脚,就会设置页眉(header),因为 ConTeXt 也有个 \setupheadertexts 命令。

默认状况下,\setupfootertexts 能够在版心之下的页脚区域的两侧搁置文字。例如,

\environment card-env
\setupfootertexts[foo][bar]
\showframe
\starttext
这是页脚的示例,看版心上面……
\stoptext

排版后果如下图所示:

页脚区域的文字有一部分出框了,是 ConTeXt 默认设定的字号对于卡片而言略大所致。

假使对 card-env.tex 文件里字体设定命令 \setupbodyfont 略作批改

\setupbodyfont[myfont,7pt]

这样,位于页脚区域的文字和页码,都不会再出框了,如下图所示:

如何将页脚里的 foobar 放到版心下方的正中地位呢?

ConTeXt 世界摊开了双手,无奈地说,没有如许柔美的方法……然而能够用 \hfill 命令将 foobar 挤到正中地位,例如

\setupfootertexts[\hfill foo\hfill][bar]

后果为

当初能够去掉 bar 了,而后将 foo 换为工夫戳:

\setupfootertexts
  [\hfill 2023 年 01 月 26 日 凌晨 4 时 44 分 \hfill][]

而后再去掉脚手架 \showframe,后果就有了一张带有工夫戳的卡片:

上述工作并未涉及 ConTeXt 里的 Lua,然而给出了学习 ConTeXt 的一种路径,即假使晓得本人想要什么,那么就要勤于搜寻 ConTeXt wiki 上的内容,特地是这个页面:

https://wiki.contextgarden.ne…

学习任何一种 TeX,都能够这样学,查阅文档,入手试验。

参考

  • https://wiki.contextgarden.ne…
  • 很久以前我写的一份文档:http://liyanrui.is-programmer…

  1. https://github.com/adobe-font… ↩
  2. https://github.com/adobe-font… ↩
退出移动版