抄录(Verbatim)

对于程序猿而言,如果使用 ConTeXt 进行文档排版,那么它提供的 type 和 typing 机制在程序代码抄录(程序代码排版)方面较为出色。

继续阅读

页面布局控制

声明:可转载,可修改,也可以不注明作者和出处。

本篇介绍如何使用 ConTeXt 产生我们所期望的页面布局。

前面还有一系列文章:

第一篇:序幕有点长
第二篇:这就是 ConTeXt Minimals
第三篇:不仅仅是为了中文
第四篇:那年挖的坑,今年开始填
第五篇:ConTeXt 文稿的物理结构
第六篇:ConTeXt 文稿的逻辑结构

继续阅读

ConTeXt 文稿的逻辑结构

声明:可转载,可修改,也可以不注明作者和出处。

阅读本篇之前,需要你确认是否已对上一篇文章所讲的“ConTeXt 文稿的物理结构” 有所了解。ConTeXt 文稿的物理结构表示的是 ConTeXt 文稿的自身结构,而本文所讲述的 ConTeXt 文稿的逻辑结构表示的是所排版文档的结构,例如文档的标题和段落。ConTeXt 文稿的逻辑结构可被 ConTeXt 文稿的物理结构中的任何一种结构所包含。

继续阅读

luatex 字体加载

前两篇文章自以为是的介绍了如何构建一个较小的 luatex plain 包以及传统的 TeX 字体支持,所属内容皆为 luatex 自 pdftex 那里所继承的传统的一面,而未触及 luatex 的特性。这篇文章尝试分析 TrueType、OpenType (CID) 字体在 luatex 的加载过程,然后介绍如何使用 Hans 所写的 luatex 字体加载脚本以产生可支持 TrueType、OpenType (CID) 字体加载的 Plain TeX 格式。

继续阅读

让 luatex plain 输出 pdf

在“luatex plain 从零构建” 一文中,讲述了如何建立一个什么也干不了的 luatex plain 包。本文在 luatex plain 基础结构上,重新生成一份 Plain TeX 格式文件,使之可以支持 pdf 文件的输出,并添加一些西文字体。这样,我们便可以使用 luatex plain 进行一些西文文档的排版了。

继续阅读

luatex plain 从零构建

本文介绍了如何从一个 tex 引擎开始,逐步构建一个什么也做不了的 TeX “发行版”。这个 TeX 发行版,本身没有什么实际的意义,但是通过动手构建它,可以从一个侧面了解一个 TeX 系统的主要构成。

继续阅读

luatex 引擎 + plain TeX 格式

本来觉得没必要知道如何去折腾这个,但是最近 luoyi 同学问了这个,就发一下。喜欢折腾的就去折腾……

继续阅读

MkIV 会错误的吃掉中文字符与半角标点之间的空白

给 Hans 发了邮件,不过他没搭理我。尴尬……

Hi Hans,

In scrp-cjk.lua, the function "process" can eat some glue node between
CJK glyphs. But the following glue nodes between CJK glyph and
half_width_open/half_width_<wbr/>close glyphs should not be eaten.

For example:

\starttext
中国 (Chinese) 的未来
\stoptext

Its output need stay the same.

Therefore I think the function "process" need add some codes for the
test of half_width_open/half_width_<wbr/>close glyphs. This is a patch for
it.

--- /opt/context/tex/texmf-context/tex/context/base/scrp-cjk.lua        2010-08-20
01:35:20.000000000 +0800
+++ /home/garfileo/scrp-cjk.lua 2010-08-30 17:08:31.000000000 +0800
@@ -553,7 +553,8 @@
                        if not pcjk                 or not ncjk
                            or pcjk == "korean"     or ncjk == "korean"
                            or pcjk == "other"      or ncjk == "other"
-                            or pcjk == "jamo_final" or ncjk ==
"jamo_initial" then
+                            or pcjk == "jamo_final" or ncjk == "jamo_initial"
+                           or pcjk == "half_width_close" or ncjk == "half_width_open" then
                            previous = "start"
                        else -- if head ~= first then
                            remove_node(head,first,true)

TeX 的宏 / 第二集

TeX 宏的参数可被构造为可选的。例如对于宏 \xx,假设它接受一个参数,所谓可选参数,是指 \xx[#1]{...}\xx{...} 这两种宏调用方式都成立。当然,要实现这一目的,需要一些技巧,其中最关键的是掌握 \futurelet 的用法。

继续阅读

TeX 的宏 \ 第一集

以 ‘\’ 为开头的 TeX 命令被称为“控制序列”。如果一个控制序列仅由字母组成,将其称为“控制字”。如果一个控制序列由非字母构成,将其称为“控制符”。对于 TeX 用户使用 \def 定义的新的控制序列,将其称为“宏”。

继续阅读