章 6 · 篇 II · 工艺
配置:注释与引用
脚注、行号、交叉引用与引用,目录和书末索引
简单来说
本页讲书中指向别处的那些部分的设置。脚注排在页面底部,行号排在页边。交叉引用指向某张图、某一节或某一页,引用指向你提到的文献。目录列出各章,书末的索引列出词条和它们所在的页码。每一节说明这些部分的样子和编号方式。
#脚注
footnotes属性设置以[^id]引用的注释放在哪里、如何编号、外观如何。标记写法见文档格式。
interface FootnotesConfig {
placement?: 'column' | 'chapterEnd' | 'spread'; // 引用所在栏的栏底、章末,或跨页正文旁。
numbering?: 'chapter' | 'document' | 'page' | 'column' | 'spread'; // 每章重新开始、连续编号,或每页/每栏/每个跨页重新开始。
numberFormat?: string; // decimal、lower-roman、circled-decimal(①)……
symbols?: string[]; // numberFormat: 'symbols' 所用的注释符号。
markerPosition?: 'auto' | 'superscript' | 'inline' | 'side' | 'right'; // 上标、排在基线上、排在词旁,或排在竖排行的右侧。
markerSize?: Dimension; // 行内、词旁或右侧注码的字号;em指所在正文。
numberGap?: 'en' | 'em'; // 注文编号之后的空白。
chapterEndAlign?: 'foot' | 'text'; // chapterEnd:注释排在栏底,或紧接正文之下。
fontSize?: Dimension; // 注释字号;em为正文字号。
lineHeight?: Dimension; // 注释行距;em为注释字号。
color?: ColorValue; // 注释颜色;未设置时为正文颜色。
textAlign?: TextAlign; // 未设置时为正文的对齐方式。
hangingIndent?: Dimension; // 注释转行的缩进。
spaceBetween?: Dimension; // 两条注释之间的间距。
spaceAbove?: Dimension; // 正文与分隔线之间的间距;em为正文字号。
spaceBelowRule?: Dimension; // 分隔线与第一条注释之间的间距。
separator?: {
enabled?: boolean; // 画出分隔线。
width?: number; // 分隔线长度,占栏宽的比例。
lineWidth?: Dimension; // 分隔线粗细。
color?: ColorValue; // 未设置时为注释颜色。
};
}| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
placement | 'column' | 'chapterEnd' | 'spread' | 'column'(日文竖排书:'chapterEnd') | 'column'把每条注释排在引用它的那一行所在栏的栏底,上面有一条短分隔线;单栏版面中就是页面底部。'chapterEnd'把一章的所有注释按引用顺序排在该章最后一个块之后。'spread'(傍注,仅用于竖排)把一个跨页两页上引用的注释排在其奇数页(右侧装订的书中的左页)的末尾、分隔线之下:偶数页上引用的注释等待奇数页;某条注释会让奇数页剩下不足一行正文时,它连同其后的注释留在偶数页的下端;在偶数页结束的章把等待中的注释留在那一页。横排时它退回为'column',并给出unknownConfigValue警告。从postext 1.16起提供。 |
numbering | 'chapter' | 'document' | 'page' | 'column' | 'spread' | 'chapter'(日文横排书:'page';使用placement: 'spread'时:'spread';栏脚注使用numberFormat: 'symbols'时:'page') | 'chapter'在每个一级标题下和每个文档开头从1重新编号。'document'在整个文档中连续编号;逐章排版的书中,也从一章延续到下一章(continuationAfter把最后一个编号记为continuation.footnoteNumber带过去)。'page'每页从1重新编号,'column'每栏重新编号,按版面中注文实际所在的位置计数(同一页的各栏按阅读顺序):这就是中文书常见的页下注。文档先排版,再按注文落在的位置编号,然后重新排版,直到编号不再变化(最多再排三次)。二者只适用于栏脚注:placement: 'chapterEnd'时按章编号。'spread'在每个跨页(第2–3页、4–5页……)按引用顺序重新编号,用于placement: 'spread'。 |
numberFormat | string | 'decimal' | 编号的写法,可用编号设置接受的任何写法:'decimal'、'lower-roman'、'lower-alpha'、'circled-decimal'(或'①')、'cjk-decimal'、'一'……正文注码和注文开头的编号都用它。circled-decimal超过50的编号写成阿拉伯数字。名称无法识别时按阿拉伯数字编号,并给出unknownNumberFormat警告。'symbols'(或'*')用参见符号标注,依次取symbols中的符号:* † ‡ § ‖ ¶,用完后成对(** †† ‡‡……)、再三个重复;此时除非设置了numbering,注释每页重新计数。postext 1.19 起。 |
symbols | string[] | ['*', '†', '‡', '§', '‖', '¶'] | numberFormat: 'symbols'所用的符号序列,用完后成对、再三个重复。Google Fonts 与 Fontsource 的拉丁文件含有 * † § ¶(剑号在latin-ext中),但没有 ‡ 和 ‖,PDF 会以该字体的.notdef字形绘制,并给出missingGlyph警告:使用这类字体时,请去掉这两个符号(['*', '†', '§', '¶']),或用含有它们的字体排注文。空字符串会被忽略,空列表保留默认序列。postext 1.19 起。 |
markerPosition | 'auto' | 'superscript' | 'inline' | 'side' | 'right' | 'auto' | 'superscript'把正文注码和注文开头的编号缩小并升高,排成上标。'inline'把它们排在基线上:注码用markerSize,注文编号与注文同大;竖排时,行内带圈注码在自己的格子里直立。'right'把缩小的注码排在竖排行的右侧并与之对齐,日文竖排书的(1)就是这样排的;横排时为上标。'side'(合印)把小号注码排在被注词旁边、其注音一侧,结束于该词最后一个字结束的地方;它不占行内空间,行的断行和两端对齐都当它不存在;行间空隙容不下它时报为rubyExceedsLeading。'auto'在circled-decimal时为行内,日文竖排书中为'right',其他情况为上标。无论哪种,注码都随前一个字符,不会出现在行首。 |
markerSize | Dimension | 1em;'side'为0.6em,'right'为0.7em | 行内、词旁或右侧注码的字号;em指所在正文的字号(常见的缩小值为0.75em)。对上标注码无效。 |
numberGap | 'en' | 'em' | 'en'(日文章末注:'em') | 注文开头的编号之后的空白:半个字宽的空格,或一个注文字号的整字宽(编号或注文含CJK文字时为全角空格),从不伸缩,也不在此断行。从postext 1.16起提供。 |
markerTemplate | string | '{n}'(日文竖排书:'({n})') | 注释编号的写法,{n}代表按编号格式和文档数字写出的编号:'({n})'得到阿拉伯文书籍的带括号注码「(١)」。正文注码和注文开头的编号都按它写。不含{n}的模板按默认值处理。 |
noteNumberPosition | 'auto' | 'superscript' | 'inline' | 'auto' | 注文开头编号的位置:上标,或以注文字号排在行内。'auto'跟随markerPosition。阿拉伯文书籍把正文注码排成上标,注文自己的编号排在行内。 |
chapterEndAlign | 'foot' | 'text' | 'foot' | 与placement: 'chapterEnd'配合使用:'foot'把收尾一栏的注释排在栏底,剩余的空行留在正文和注释之间,与栏底注释的位置一样。'text'把它们紧接正文排。 |
fontSize | Dimension | 0.8em | 注释文字的字号。em和rem指正文字号。注释使用正文的字体和字重。 |
lineHeight | Dimension | 1.25em | 注释文字的行距;em指注释字号。注释不在基线网格上:它们从栏底向上堆叠,上面的正文保持在网格上。 |
color | ColorValue | 正文颜色 | 注释文字的颜色。 |
textAlign | TextAlign | 正文的对齐方式 | 注释文字的对齐方式。 |
hangingIndent | Dimension | 0 | 注释第二行及以后各行的缩进,使它们对齐到编号之后。 |
spaceBetween | Dimension | 0 | 两条注释之间的间距。 |
spaceAbove | Dimension | 0.5em | 最后一行正文与分隔线之间的间距;em指正文字号。使用'chapterEnd'和chapterEndAlign: 'text'时,spaceAbove + spaceBelowRule就是正文与第一条注释之间的间距。 |
spaceBelowRule | Dimension | 0.4em | 分隔线与第一条注释之间的间距。 |
separator.enabled | boolean | true | 在每栏的注释上方画分隔线。设为false时,上方的间距保留。 |
separator.width | number | 0.3 | 分隔线长度,占栏宽的比例(0–1),从栏的左边缘起算。 |
separator.lineWidth | Dimension | 0.5pt | 分隔线的粗细。 |
separator.color | ColorValue | 注释颜色 | 分隔线的颜色。 |
footnotes: {
fontSize: { value: 7.5, unit: 'pt' },
lineHeight: { value: 9.5, unit: 'pt' },
hangingIndent: { value: 0.8, unit: 'em' },
separator: { width: 0.25, lineWidth: { value: 0.4, unit: 'pt' } },
}日文书。 日文文档(locale: 'ja',从postext 1.16起)为未设置的字段取JLReq §4.2的值。竖排书把注释排在章末(placement: 'chapterEnd',後注),按章编号,注码({n})排在行的右侧(markerPosition: 'right',数字按cjk.uprightDigits直立);横排书把注释排在页面下端,按页编号,注码为上标。两者的分隔线都是行长的三分之一(separator.width: 1/3),章末注取numberGap: 'em'和两个字的悬挂缩进。明确设置的值优先,并在保存时保留(stripFootnotesDefaults与文档自己的默认值比较);中文、阿拉伯文和拉丁文文档的解析结果与过去相同。footnoteDocumentDefaults(locale, writingMode, placement?)返回这些值。把注码写在句末的。之前(先生[^1]。):它跟随前一个字符,而。从不出现在行首。见日文排版 › 注释。
栏底注释的排版方式:
- 注释与引用同栏。放置一行之前,版面会加上这一行首次引用的注释的高度(如果是该栏的第一条注释,还要加上分隔线)。一行的注释在它下面排不下时,这一行连同段落的其余部分移到下一栏,并遵守段首孤行和段末孤行规则。栏的文字区域缩小注释所占的高度,所以各栏齐底和章末收尾区域只计算正文。
- 多条注释在同一栏中按引用顺序堆叠在一条分隔线下。后面再次引用的注释保持原编号,不再重复排出。
- 底部浮动体。注释排好之后才占据栏底的图,放在注释上方;图之后排的注释放在图的上方。
- 框。在标注框(行内、浮动或固定)中引用的注释,放在框后正文继续的那一栏的栏底,通常就是同一栏。收尾整个文档的框,把它的注释留在正文结束那一栏的栏底。
- 限制。注释从不拆分:比一栏还高的注释会溢出。题注、表格单元格和标题中的标记不会被识别(按原样打印)。
- 输出。Canvas、HTML和PDF都会绘制注释、标记(上标数字)和分隔线。在PDF中,每个标记链接到对应的注释;带标签的PDF把每条注释设为
Note元素,带有唯一的/ID,列在结构树的/IDTree中(PDF/UA-1)。注释是设置了footnoteNote的VDTBlock,位于page.floats中;分隔线位于page.footnoteAreas中。 - 警告。
undefinedFootnote(标记没有定义:编号印在一条空注释上)和unusedFootnote(没有标记引用的定义:不会排出)。
解析函数和精简函数与其他部分一致:
import { DEFAULT_FOOTNOTES_CONFIG, resolveFootnotesConfig, stripFootnotesDefaults, footnoteDocumentDefaults } from 'postext';
resolveFootnotesConfig(config.footnotes, 'ja', 'vertical-rl'); // 未设置的字段取日文竖排的默认值#行号
lineNumbers属性在页边、紧挨着行的位置印出每第五行(或每第N行)的行号,校勘本、诗选、法律文本和教学版本都这样做。它数:::verse诗的诗行,或正文的所有行。默认关闭。每个行号都画在所属行的基线上,用自己的字号,从不移动任何一行:页面的排版与没有行号时完全相同。自postext 1.23起。
interface LineNumbersConfig {
enabled?: boolean; // 默认关闭。
count?: 'verse' | 'all'; // 诗的诗行,或正文的所有行。
interval?: number; // 印出N的倍数。
numberFirst?: boolean; // 每次重新计数后的第一行也印出行号。
restart?: 'document' | 'chapter' | 'section' | 'page' | 'poem'; // 在哪里重新计数。
startAt?: number; // 重新计数后第一行的行号。
position?: 'outer' | 'inner' | 'left' | 'right' | 'start' | 'end' | 'side';
multiColumn?: 'each' | 'gutter' | 'outer-edges'; // 两栏或多栏的页面。
gap?: Dimension; // 从正文到行号的距离;em为行号的字号。
align?: 'auto' | 'left' | 'right';
fontFamily?: string; // 未设置时用正文字体家族。
fontSize?: Dimension; // em为正文字号。
fontWeight?: number; // 未设置时用正文字重。
italic?: boolean;
color?: ColorValue; // 未设置时用正文颜色。
format?: string; // decimal、lower-roman、arabic-indic、一…
}| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enabled | boolean | false | 印出行号。竖排文档(layout.writingMode: 'vertical-rl')不标行号,在其中设为true会报告lineNumbersUnsupported。 |
count | 'verse' | 'all' | 'verse' | 'verse'数:::verse诗的诗行,每个诗行数一次:比版心宽的诗行转到下一行的部分不编号,诗节之间的空白也不计数。按古典阿拉伯排法排的诗每联数一行;错开排的联,其第二行不计数。'all'按阅读顺序数正文段落、列表项、引文和诗的每一行:逐页、逐栏、从上到下。 |
interval | number | 5 | 印出行号为该数倍数的行(5、10、15…)。第一行为37的诗印出40、45…。诗的开始标记可以设定自己的间隔(interval=N)。 |
numberFirst | boolean | false | 每次重新计数后,第一个计入的行也印出行号。 |
restart | 'document' | 'chapter' | 'section' | 'page' | 'poem' | count: 'verse'时为'poem',count: 'all'时为'page' | 在哪里重新计数:从不('document',贯穿一本书的各章),每个一级标题处('chapter'),每个一级或二级标题处('section'),每一页('page'),或每首:::verse诗('poem')。诗的lineStart=N和:::numbering指令的lines=N可以在任何位置重新计数,不论哪种模式。 |
startAt | number | 1 | 重新计数后第一行的行号。 |
position | 'outer' | 'inner' | 'left' | 'right' | 'start' | 'end' | 'side' | 'outer' | 行号所在的一侧。'outer'是远离书脊的一侧:奇数页的右边、偶数页的左边,右侧装订的书则相反。'inner'是书脊一侧。'left'和'right'在每一页都一样。'start'和'end'跟随文档的方向:在从右到左的书中,'start'是右边。'side'把行号放进'oneAndHalf'版式(layout.sideColumnRole: 'floats')的侧栏,贴齐侧栏靠正文的一边(不使用gap);没有侧栏的页面上退回'outer'。 |
multiColumn | 'each' | 'gutter' | 'outer-edges' | 'outer-edges' | 并排有两栏或更多正文栏的页面。'outer-edges'把第一栏的行号放在其左边,最后一栏的放在其右边;中间各栏按'each'处理。'gutter'把行号放在栏间:第一栏的在其右边,其余各栏的在其左边。'each'把每一栏的行号都放在position指定的一侧。 |
gap | Dimension | 1em | 从栏边到行号的距离;em为行号自身的字号。 |
align | 'auto' | 'left' | 'right' | 'auto' | 'auto'让每个行号靠向正文:在左边页边中右对齐,在右边页边中左对齐。'left'和'right'在本页最宽行号的宽度内对齐。 |
fontFamily | string | 正文字体家族 | 行号的字体。与其他字体家族一样加载和嵌入。 |
fontSize | Dimension | 0.8em | 行号的字号;em为正文字号。 |
fontWeight | number | 正文字重 | 行号的字重。 |
italic | boolean | false | 用斜体排行号。 |
color | ColorValue | 正文颜色 | 行号的颜色。链接到调色板的颜色会跟随篇和章节的调色板。 |
format | string | 十进制 | 行号的写法,可用任何一种编号格式写法('lower-roman'、'arabic-indic'、'一'…)。十进制行号用文档的数字(numerals)书写。未知的名称按十进制编号,并给出unknownNumberFormat警告。 |
lineNumbers: {
enabled: true,
count: 'verse',
interval: 5,
restart: 'document', // 整本书连续计数
position: 'outer',
fontSize: { value: 0.75, unit: 'em' },
italic: true,
}哪些行计数,哪些不计:
- 从不计数:标题、题注、表格和图片、独立公式、版面设计文字(章首、页眉)、脚注和章末注、目录、索引和参考文献的条目,以及空白页。
- 标注框和散文。 标注框中的文字不计数;
count: 'verse'时散文也不计数,除非排它所用的段落样式写了lineNumbers: true;设了lineNumbers: false的样式从不计数(见段落样式)。 - 单首诗。 诗的开始标记可以写
numbered=false(它的诗行不计数)、lineStart=N(它的第一行为N,并从这里重新计数)和interval=N。:::numbering{lines=N}让下一个计入的行编为N,不论它在哪里。见文档格式 ›:::verse和:::numbering。
逐章排版的书中,restart: 'document'通过continuation.lineNumber把计数从一章带到下一章。continuationAfter根据文本数诗行;count: 'all'时计数取决于排版结果,所以宿主程序要传入上一章文档的lastLineNumber,沙盒就是这样做的。
position: 'side'时,行号与侧栏中的框、题注和图共用侧栏。与其中之一重叠的行号照样画出,两者都不移动,排版会给出指向该编号行的内容警告lineNumberOverlap。
输出。 Canvas、PDF、HTML查看器和固定版式EPUB都会画出行号。在带标签的PDF中,行号是版面artifact,每个都带一个空的/ActualText,所以复制或提取出的文字从一行接到下一行,不含行号。HTML输出对辅助技术(aria-hidden)、选择和复制的文字都隐藏行号。流式EPUB的行由阅读系统排,只保留诗行的行号:在诗节起始一侧的页边放一个pt-line-number span(同样aria-hidden),紧挨着印刷版中带行号的每个诗行。在VDT中,行号是每页的一个设计槽位(page.lineNumbers,其中的文字块标记为artifact)和一张标记列表(page.lineNumberMarks:number、label、columnIndex、blockId、lineIndex);文档记录lastLineNumber。
不支持:竖排文字中的行号、印出某一行行号的交叉引用、按行号自动对应的注释,以及表格单元格、题注或代码清单各行的行号。
在沙盒中,这些设置是版面设计面板中的行号一节。解析函数和精简函数与其他部分一致;字体、字重和颜色取自正文:
import { DEFAULT_LINE_NUMBERS_CONFIG, resolveLineNumbersConfig, stripLineNumbersDefaults } from 'postext';
resolveLineNumbersConfig(config.lineNumbers, resolvedBodyText); // 未设置的字体、字重和颜色跟随正文#交叉引用
crossRefs属性设定交叉引用在编号或页码前后印出的文字,以及未设style的:ref采用的样式。每个模板用{n}表示编号的位置;没有{n}的模板,编号放在文字之后,中间用不换行空格("§"印为*§ 3.2*)。未设定的模板随文档语言:中文为第{n}章 / 第{n}节 / 第{n}页,英文为chapter / section / p.,西班牙文为capítulo / sección / pág.,法文、德文、意大利文、葡萄牙文、加泰罗尼亚文和荷兰文亦各有默认文字。
interface CrossRefsConfig {
chapter?: string; // Words around a level-1 heading's number: "chapter {n}".
section?: string; // Around any other heading's number: "section {n}".
page?: string; // Around a page number: "p. {n}".
defaultStyle?: 'default' | 'number' | 'title' | 'page'; // A :ref without style=.
}| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
chapter | string | 随语言 | 指向一级标题的引用:"第{n}章"。编号模板已含文字的标题(第{1:一}章、Chapter {1})照原样印出。 |
section | string | 随语言 | 指向二至六级标题的引用:"第{n}节"、"§ {n}"。 |
page | string | 随语言 | 页码引用(style=page):"第{n}页"、"p. {n}"。 |
defaultStyle | 'default' | 'number' | 'title' | 'page' | 'default' | 指向标题或锚点、未设style=的:ref印出的内容。'default':有编号的标题印名称和编号,无编号的印标题,锚点印其文字。已设style的引用保持不变,指向图表的引用不受影响。 |
引用的颜色、粗细和斜体与所有引用相同(bodyText.referenceColor、referenceBold、referenceItalic)。
#引用
citations属性选择引用样式,并决定引用和参考文献表的外观。标记语法见引用与参考文献;样式由postext-citeproc包执行。
interface CitationsConfig {
style?: string; // 'apa', 'ieee', 'chicago-notes-bibliography'… or 'custom'
customStyle?: string; // a whole CSL style (.csl XML), used with style: 'custom'
locale?: string; // CSL locale; the document language when unset
link?: boolean; // citations link to their entries
marker?: 'style' | 'brackets' | 'parentheses' | 'superscript' | 'corner';
collapseRanges?: boolean;
notes?: 'footnote' | 'warichu';
numbering?: 'book' | 'chapter';
bibliography?: {
title?: string; // unset: the document language's word; '' or ' ': none
scope?: 'book' | 'chapter';
auto?: boolean;
fontSize?: Dimension;
lineHeight?: Dimension;
hangingIndent?: Dimension;
entrySpacing?: Dimension;
labelWidth?: Dimension;
labelAlign?: 'left' | 'right';
doi?: 'link' | 'text' | 'hide';
includeUncited?: boolean;
groupByLanguage?: boolean;
};
}| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
style | string | 'apa' | 内置样式的id(见样式)或'custom'。样式决定引用和条目的内容:姓名、日期、顺序、标点,以及引用是否为注释。 |
customStyle | string | — | 完整的CSL样式(.csl文件的XML),在style为'custom'时使用。Sandbox可从文件加载。 |
locale | string | 文档语言 | 样式用词的CSL语言环境(zh-CN、zh-TW、ja-JP、en-US等)。日文文档按ja-JP处理:叙述式引用用と连接两位作者,更多作者缩写为ほか。 |
link | boolean | true | 引用链接到参考文献表中的条目(PDF链接、HTML锚点、Sandbox点击)。 |
marker | 'style' | 'brackets' | 'parentheses' | 'superscript' | 'corner' | 'style' | 顺序编码样式的引用标记:按样式、[1]、(1)、上标,或〔1〕(竖排中直立)。位置写在编号之后。 |
collapseRanges | boolean | true | 连续编号合并为范围:自定标记写作1–3,IEEE自身的标记写作[2]–[4]。设为false则逐个列出。 |
notes | 'footnote' | 'warichu' | 'footnote' | 注释体样式放置引用的方式:脚注(按footnotes设置)或行内双行夹注。 |
numbering | 'book' | 'chapter' | 'book' | 引用在全书连续处理,或每章单独处理(每个文档,以及引用之后的每个一级标题):顺序编码制每章从 1 编号,两章都引用的文献在各章取各自的编号;注释样式在每章第一次引用时写出完整著录。与bibliography.scope: 'chapter'配合使用,章内列表随之采用本章的编号。 |
bibliography.title | string | 随语言 | 列表上方的标题(粗体段落)。留空则不印。自定义的标题写在:::bibliography之上。 |
bibliography.scope | 'book' | 'chapter' | 'book' | 全书一份列表,或每章一份,只列该章引用的文献。一个文档含多章时,每个H1开始新的一章列表;开启auto时,没有放:::bibliography的章在章末得到自己的列表。 |
bibliography.auto | boolean | true | 没有:::bibliography时,把列表放在正文之后(全书列表放在最后一章之后)。 |
bibliography.fontSize | Dimension | 0.9em | 条目字号;em为正文字号。 |
bibliography.lineHeight | Dimension | 正文行距 | 条目行距。 |
bibliography.hangingIndent | Dimension | 2em | 无编号条目续行的缩进。 |
bibliography.entrySpacing | Dimension | 0.3em | 条目之间的间距。 |
bibliography.labelWidth | Dimension | 最长编号 | 编号列表中编号栏的宽度:每条文献的正文首行与转行都从这里开始,9. 与 10. 共用同一栏。编号仍是条目文本的一部分。 |
bibliography.labelAlign | 'left' | 'right' | 'left' | 编号在栏内的位置:靠栏的左边,或靠正文(9. 与 10. 末端对齐)。 |
bibliography.doi | 'link' | 'text' | 'hide' | 'link' | DOI和网址作为链接、作为文字或不显示。 |
bibliography.includeUncited | boolean | false | 列出全部参考文献,无论是否被引用(相当于nocite: "@*")。 |
bibliography.groupByLanguage | boolean | false | 中、日、韩文文献在前,其他在后。仅用于著者-出版年和著者-页码体系:顺序编码的列表保持编号顺序。 |
#目录
toc属性配置:::toc指令印出的内容(参见文档格式)。目录由文档的大纲汇编而成,大纲包含每个标题及其编号和页码标签,以及每个:::part,所以目录会跟着各章变化:给某章改名、把它移到另一篇、修改它的作者,条目都会随之改变。一个条目依次是:单独一栏的标题编号、标题、前导符、右边缘的页码标签,然后是可选的副标题行;篇则是由parts.design设计的一行。
const config: PostextConfig = {
toc: {
levels: [{ level: 1, fontWeight: 700, color: { hex: '#00507b', model: 'hex' }, numberWidth: { value: 7.4, unit: 'mm' } }],
unnumbered: { color: { hex: '#000000', model: 'hex' } },
pageNumber: { fontWeight: 400, width: { value: 8, unit: 'mm' } },
leader: { char: '.', gap: { value: 1, unit: 'mm' } },
subtitle: { enabled: true, attr: 'author', italic: true, fontSize: { value: 8.5, unit: 'pt' } },
parts: {
height: { value: 23, unit: 'pt' },
marginTop: { value: 11.5, unit: 'pt' },
design: { elements: [/* 一个色带框、'SECTION {number}'、'{titleText}'、'{pageNumber}' */] },
},
},
};| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
levels | TocLevelConfig[] | 一级 | 列出的标题级别,每级带有条目的字体样式:fontFamily、fontSize、lineHeight(默认为正文行距,使目录落在网格上)、fontWeight、italic、color、indent(整个条目的缩进)、numberWidth / numberGap(编号栏的宽度和间隔,标题从编号栏之后开始;编号在栏内右对齐;某个编号比numberWidth宽时,如الفصل الحادي عشر或第十二章,该级的编号栏加宽到最宽的编号)、numberFontFamily、numberFontSize、numberFontWeight、numberColor、marginTop、marginBottom。未设置的字段继承正文。无论编号用什么字体和字号,它都落在标题第一行的基线上,Canvas、HTML和PDF中都是如此(postext 1.4及以前,编号像列表项目符号那样以x字高居中,所以展示字体或较大的字号会浮在标题上方)。自己编写的渲染器可以从条目块的bulletBaselineY取得这条基线;bulletY仍是编号em框的中点,与1.4相同,所以早于这个新字段的渲染器会把编号画在一直以来的位置。 |
unnumbered | TocEntryStyleConfig | — | 针对样式为numbered: false的标题(如序言)的覆盖:它们不印编号,从该级别的indent处齐头开始。 |
pageNumber | object | 一级条目的字体,正文字重 | 页码标签的fontFamily、fontSize、fontWeight、italic、color,以及width(默认2em):右边缘为它预留的栏宽,页码在栏内右对齐。 |
leader | object | | char在标题和页码之间的空当里重复排出,并且右对齐,使相邻条目的点对齐('. '会把点拉开);gap是标题和前导符之间至少保留的距离。前导符排入能放下的全部字符,按它所用字体把整串字符作为一个整体来测量,所以如果某种字体会把相邻句点的字偶距拉开,得到的是更少的点,而不是一直顶到页码的点。(postext 1.4及以前按单个点计数,在这类字体中前导符会从标题一直延伸进页码。)标题长到不给页码标签留位置时,会稍早一点换行。前导符至少排三个字符:只放得下一两个时,这一行不排前导符,因为页码前孤零零的一个点读起来像句号。在带标签的PDF中,这些点是版式工件,不出现在提取的文字中。正文在其制表位处排出同样的前导符。 |
subtitle | object | | 条目下的第二行,取自标题属性(attr),比如章的作者,有自己的fontFamily、fontSize、fontWeight、italic(默认true)、color和额外的indent。这一行使用条目的行距,从不与标题分开。 |
parts.enabled | boolean | true | 篇隔页是否在目录中占一行。 |
parts.breakBefore | boolean | false | 除第一篇外,每个篇行之前另起新页,使每一篇的各章单独列在一页上。 |
parts.design | DesignSlot | 空 | 篇行的设计;它的容器就是这一行(栏宽 × height)。占位符有、、…、和(篇隔页的页码标签;使用parts.page: false时不开篇隔页,取篇的内容开始的那一页,即书眉切换到这一篇的那一页;在逐章排版的书中,结束一章的篇容器指向下一章的第一张内容页)。链接到调色板的颜色采用篇自己的palette,所以每个部分的行都用各自的颜色。为空时,以一级条目的字体样式排出(中间是一级标题的numberSeparator)和页码。 |
parts.height、marginTop、marginBottom | Dimension | 2em、0、0 | 行高及其上下的空白。em是正文字号,所以默认行高是正文字号的两倍,而不是两行正文:正文为9.5/13.5 pt时它是19 pt。要让一行占两行正文,就用pt给出高度(这里是27pt)。 |
页码标签就是文档实际印出的那些。buildDocument()会用上一遍的标签重新排版带:::toc的文档,直到标签稳定(最多额外三遍);逐章排版整本书的宿主程序则改为以PostextContent.outline提供全书大纲,大纲由contentOutline()(只从文字得出的标题和篇)和outlineFromDoc()(同样的条目,带上某次排版的页码标签)汇编而成,每当该大纲的outlineKey()变化时就重新排版目录所在的章。每个标题条目都带有目录印出的number;编号标题还带有counter,即该级别在任何startAt之后的累计数,与模板印出什么无关,宿主程序在自己的列表中标在章旁的就是它。
#索引
index属性配置:::index指令印出的内容(参见文档格式):正文中用:index[…]和:index{term="…"}标记的词条,经过排序,按首字母分组(中文按拼音首字母或笔画数分组,日文按五十音行分组,参见groupBy),每条附上它所在的页码。一个条目由词条、分隔符和页码组成;其下的子条目逐级缩进一步,折行按turnoverIndent悬挂缩进,因此不会与子条目对齐。
const config: PostextConfig = {
headingStyles: [
// 索引排成两栏,放在它自己的标题下。
{ id: 'index', numbered: false, layout: { layoutType: 'double', gutterWidth: { value: 6, unit: 'mm' } } },
],
index: {
fontSize: { value: 8.5, unit: 'pt' },
lineHeight: { value: 11, unit: 'pt' },
rangeFormat: 'chicago',
groups: { fontFamily: 'Source Sans 3', fontWeight: 700, color: { hex: '#8a1c1c', model: 'hex' } },
},
};| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
fontFamily、fontSize、lineHeight、fontWeight、color | — | 正文的设置 | 条目的字体样式。索引的每一行(包括字母标题)都按lineHeight排;索引保持自己的节奏,不对齐基线网格。 |
indent | Dimension | 1em | 每一级子条目的缩进。 |
turnoverIndent | Dimension | 2em | 条目折行在其所在级别之外的额外缩进。 |
entrySpacing | Dimension | 0 | 每个主条目上方的空白。 |
separator、locatorSeparator、rangeSeparator | string | ', '、', '、'–';阿拉伯文字中前两项为'، ' | 分别印在词条与第一个页码之间、两个页码之间,以及页码范围两端之间的内容。 |
mergeRanges | boolean | true | 把同一编号格式的连续页码合并成范围:12, 13, 14印作12–14。主要页码从不合并。 |
rangeFormat | 'full' | 'chicago' | 'full' | 页码范围中第二个数字的写法:写全(234–237),或按The Chicago Manual of Style(9.64)的要求省去与第一个数字相同的位:71–72、100–104、101–8、321–28、1496–500。罗马数字标签总是写全。 |
main | | 粗体 | 主要页码(标记上带main)的排法。 |
see | | 按语言,斜体(阿拉伯文字为正体) | 参见项前面的引导词。未设置时随文档语言而定:See / See also、Véase / Véase también、Voir / Voir aussi、见 / 另见(繁体中文为見 / 另見)等。中文索引把参见项放在句号之后,不加空格:贾琏 12。见贾政。 |
locale | string | 文档的语言 | 按哪种语言的字母顺序给条目排序(BCP 47标签,由Intl.Collator读取)。在西班牙语中,ñ排在n之后,并单独成组;重音符号从不影响顺序。 |
groupBy | 'auto' | 'letter' | 'pinyin' | 'stroke' | 'gojuon' | 'kana' | 'none' | 'auto' | 组标题是什么。'letter':排序键的首字母。'pinyin':以汉字开头的条目归入其拼音读音的拉丁首字母之下(贾宝玉归入J),拉丁字母的排序键归入其字母,排在该字母的中文条目之后(排序器把拉丁字母排在汉字之后):sort="jia mu"排在J组末尾。'stroke':按第一个字的笔画数分组,一畫、二畫…(简体中文为一画…)。'gojuon':假名条目归入其五十音行,あ行、か行 … わ行;'kana'则归入其首个假名(片假名与平假名共用组标题);两者都按日文索引的JIS X 4061顺序排序:依据读音(标记的yomi,否则用其注音的假名读音,否则用sort,否则用文字本身),片假名按平假名排,小假名按大假名排,ー按它前面的元音排,清音在浊音前,浊音在半浊音前;符号在最前,然后是按数值排序的数字,然后是按字母分组的拉丁词,最后是假名;仍以汉字开头的条目报为indexReadingMissing,排在假名之后,不归入任何组。'none':不设组标题;符号、数字和词语之间只用groups.marginTop隔开。'auto'让日文索引(ja、ja-*)按五十音行分组,简体中文索引(zh、zh-Hans、zh-CN)按拼音分组,繁体中文索引(zh-Hant、zh-TW、zh-HK)按笔画分组,其他语言按字母分组。条目按组标题所依据的排序规则排序:按拼音分组的zh-Hant索引按拼音排序。读音和笔画数来自排序器(CLDR);遇到它读错的字(把重阳的重读作zhòng,把行业的行读作xíng),就给标记一个sort键,用只有你想要的读音的字来写,它会排在正确的位置:重阳用sort="崇阳",行业用sort="航业"。没有中文排序数据的浏览器排出的拼音或笔画索引不带组标题。 |
ignoreArticle | boolean | 阿拉伯文为true | 阿拉伯文词条排序和分组时视同没有开头的冠词ال(ٱل):البصرة归入ب,排在بدر和بغداد之间,印出时保持原样。الله保留冠词;自带sort键的词条按该键原样排序。无论此项如何,阿拉伯文索引都忽略元音符号和延长符(tatweel),把أ إ آ ٱ归入ا,并把ؤ按و、ئ和ى按ي、ة按ه排序。 |
groups.enabled | boolean | true | 在每组条目上方印一个组标题(A、B…或笔画数,数字为0–9,其余为Symbols;中文为数字 / 數字和符号 / 符號)。 |
groups.fontFamily、fontSize、fontWeight、italic、color | — | 条目的设置,字重700 | 字母标题的字体。它按条目的行距排。 |
groups.marginTop | Dimension | 索引的一行 | 每组上方的空白,不论有没有组标题;第一组上方没有(它与标题的距离由标题决定),栏顶也没有。 |
groups.symbolsLabel、numbersLabel | string | 按语言;'0–9',中文为'数字' / '數字' | 以符号开头和以数字开头的条目的组标题。 |
页码与目录一样来自全书大纲:computeOutline()和contentOutline()把一段文字中的索引标记列为'indexMark'类型的条目(带有indexMark.path、sort、see、seeAlso、main、range和index),outlineFromDoc()给每个条目加上它落在的页,这些页由排版过程记录在doc.indexMarks中(每个标记一个{ sourceStart, pageIndex })。buildDocument()会重新排版印出自身索引的文档,直到页码稳定;逐章排版整本书的宿主程序把全书大纲作为PostextContent.outline交给包含:::index的章。tocOutline()和indexOutline()把大纲拆成目录和索引各自读取的部分,宿主程序可以据此给每一章设定与其印出内容相应的键:沙盒只在某个标记移动时重新排版索引章,只在某个标题移动时重新排版目录章。contentOutline()还会说明一段文字是否印出索引(hasIndex)。