关于tex:LuainConTeXt04卡片

1次阅读

共计 4156 个字符,预计需要花费 11 分钟才能阅读完成。

上一篇:两个世界

ConTeXt 输入的 PDF 文件,其页面尺寸默认与 A4 纸的尺寸雷同。在今后,我可能要给出很多的排版示例。若给出排版后果的全貌,则 A4 尺寸太大了,会导致示例截图里的文字不够清晰。假使能将页面尺寸设置为卡片大小,并对版面略作设计,兴许能让我在写这份文档的过程中多一些愉悦。

导言区

TeX 源文件里若应用了 ConTeXt 提供的管制序列,便可将其称为 ConTeXt 源文件。很多时候,咱们也不用如此学究气。此外,TeX 管制序列也常常能够称为命令,只是要留神,它们是排版命令,而非在终端里执行的命令。

一份 ConTeXt 源文件,其根本格局为

\starttext
% 注释
\stoptext

% 是 TeX 源文件里的正文符,该符号以及位于它之后直至行尾的文字(包含换行符)会被 TeX 编译器疏忽。

\starttext 之前呈现的任何内容,不会呈现在排版后果里。在 \starttext\stoptext 里呈现的内容,能够呈现在排版后果里,因而这部分内容称为注释。\stoptext 前面的内容,会被 TeX 编译器疏忽。

当初,开始关怀 \starttext 之前应该能够产生什么。通常称该区域为导言区,用于排版的全局管制。例如

\setuphead[title][align=middle]
\starttext
\title{Hello world!}

... some text ...

\title{Hello world again!}

... some text ...

\stoptext

在导言区设定了题目的居中,会作用于注释里的所有 \title。同理,如果我在导言区定义了页面的尺寸,那么它就能够作用于每个页面。试试看,

\definepapersize[card][width=85.6mm,height=53.98mm]
\setuppapersize[card]
\starttext
\title{Hello world!}

... some text ...

\title{Hello world again!}

... some text ...

\stoptext

上述第一个命令 \definepapersize 定义(define)了纸张(paper)的尺寸(size),并给它取了个名字 card。第二个命令的作用是设置(set up)纸张(paper)的尺寸(size)为 card 这个尺寸。

值得注意的是,在 ConTeXt 里,纸张的尺寸与页面的尺寸是两个概念,然而当初无需纠结此事,上述设定是用纸张尺寸作为页面尺寸了。

上述 ConTeXt 源文件的排版后果如下图所示:

排版后果的每一页上方的数字是页码。排版后果的第 1 页和第 2 页的页面尺寸看上去确实雷同。所以,从当初开始要记住,导言区里的设定可对排版后果起到全局管制的作用。

\definepapersize 反对的长度单位不仅仅是毫米(mm),也能够是厘米(cm),英寸(in),点(pt),还有 ex,em 等……总之是很多种。在这份文档里,我尽量只用 mm。

页面布局

当初有了卡片大小的页面了,然而对于 ConTeXt 而言,页面由多个区域形成。应用 \showframe 能够显示这些区域,只需将它写于导言区即可,例如

\definepapersize[card][width=85.6mm,height=53.98mm]
\setuppapersize[card]
\showframe
\setuphead[title][align=middle]
\starttext
\title{Hello world!}

... some text ...

\stoptext

对应的排版后果为

页面具体由哪些区域形成,可参考下图:

咱们外乡的页面布局术语是上述页面区域布局图示的一个简洁的子集,即版心、天头、地脚、订口、翻口。这个子集与 ConTeXt 页面布局参数对应如下:

  • 版心:宽度为 width,高度为 height;
  • 天头:topspace;
  • 地脚:(paperheight – topspace – height);
  • 订口:backspace,指书籍页面凑近书脊(装订线)的空白区域;
  • 翻口:cutspace 或 (paperwidth – backspace – width),指看书时用于掀起书页的区域。

其中,paperwidth 和 paperheight 即 \definepapersize 定义的页面尺寸。

设置页面布局

应用 \setuplayout 能够设置(set up)页面的布局(layout),例如

\definepapersize[card][width=85.6mm,height=53.98mm]
\setuppapersize[card]
\setuplayout
  [backspace=.1\paperwidth,
    width=.8\paperwidth,
    topspace=.015\paperheight,
    height=.97\paperheight]
\showframe
\setuphead[title][align=middle]

\starttext
\title{Hello world}

... some text ...

\stoptext

上述代码里的 \setuplayout 局部,仅设定了版心、天头和订口的尺寸,基于这些设定,ConTeXt 可能推算出翻口和地脚的尺寸。

上述 ConTeXt 源文件对应的排版后果如下图所示:

边边角角

卡片里的世界,大局已定,然而周边并不太平。

为了节俭篇幅,本节在上一节的 ConTeXt 源文件的根底上,仅对 \setuplayout 局部予以批改,并给出与之应的排版后果,从而能直观地了解 \setuplayout 的局部参数的效用。

首先,将版心左右的留白(Margin)区域设置为 backspace 或 cutspace 尺寸的 2/3(约 0.666):

\setuplayout
  [backspace=.1\paperwidth,
    width=.8\paperwidth,
    topspace=.015\paperheight,
    height=.97\paperheight,
    leftmargin=.666\backspace,
    rightmargin=.666\cutspace]

排版后果为

而后将位于版心内的页眉(header)和页脚(footer)区域与注释(text)区域有所拆散:

\setuplayout
  [backspace=.1\paperwidth,
    width=.8\paperwidth,
    topspace=.015\paperheight,
    height=.97\paperheight,
    leftmargin=.666\backspace,
    rightmargin=.666\cutspace,
    headerdistance=.025\makeupheight,
    footerdistance=.025\makeupheight,
    textheight=.95\makeupheight]

排版后果为

页码

页码默认是在页眉上。我更喜爱将它挪动到页脚并置于留白处,应用 \setuppagenumbering 可做到,例如

\setuppagenumbering[location={footer,margin}]

我想,当初曾经毋庸在刻意揭示要将上述代码置于 ConTeXt 源文件的导言区了。

当初,排版后果如下:

将导言区里的 \showframe 去掉,页面里的脚手架也就隐没了,当初卡片看上去更像卡片:

环境文件

上述设置了卡片页面布局、页码以及题目款式的 ConTeXt 源文件的导言区,曾经很多内容了:

\definepapersize[card][width=85.6mm,height=53.98mm]
\setuppapersize[card]
\setuplayout
  [backspace=.1\paperwidth,
    width=.8\paperwidth,
    topspace=.015\paperheight,
    height=.97\paperheight,
    leftmargin=.666\backspace,
    rightmargin=.666\cutspace,
    headerdistance=.025\makeupheight,
    footerdistance=.025\makeupheight,
    textheight=.95\makeupheight]
\setuppagenumbering[location={footer,margin}]

\setuphead[title][align=middle]

当前可能须要持续减少内容。每次关上 ConTeXt 源文件,我不想让眼光掠过它们之后方能定位到 \starttext ...\stoptext 区域。与导言区相比,我更看重注释区域的内容,因为我是作者,而非排版专家。

ConTeXt 容许将导言区的所有内容保留到一份或多个 ConTeXt 源文件,而后应用 \environment 载入。例如,可将上述导言区内容保留到 card-env.tex 文件。假如在 foo.tex 文件里载入 card-env.tex,只需令 card-env.tex 和 foo.tex 位于同一目录,而后则像上面这样撰写 foo.tex 的内容:

\environment card-env
\starttext
% 注释
\stoptext

留神须要载入 card-env.tex 的 ConTeXt 源文件须要与 card-env.tex 位于同一目录。

跟 ConTeXt 里 Lua 有何关系呢?

没有必然的关系,但有联谊的关系。

以下 ConTeXt 源文件:

\environment card-env
\starttext

\ctxlua{context(tex.dimen.makeupwidth / tex.dimen.paperwidth)}

\stoptext

排版后果为

之所以会输入这个后果,是因为在 card-env.tex 文件里的 \setuplayoutwidth 设置为 .8\paperwidth

结语

当前,我就能够在卡片这个方寸世界里摆弄 Lua 编程了。

参考

  • https://wiki.contextgarden.ne…
  • https://wiki.contextgarden.ne…
  • https://wiki.contextgarden.ne…

下一篇:待续

正文完
 0