跳到主要内容

章 12.2 · 篇 III · 实践

沙盒:模板页

在页面上直接编辑页面模板和框,框样式库,所有版本中模板页的检查,把文字移到 Markdown,以及一键修正一个框

更新于 2026-10-179分钟所属章节: 12 沙盒enescadefritptzhjaar

简单来说

本页汇集沙盒为模板页提供的功能。模板页的文字灌进由页面模板排好的框里。模板里的框可以直接在页面上画出和移动,框样式则收在一个样式库里。检查面板会告诉你,书的每种语言里哪些模板页的文字放不下,并给出一键修正一个框的按钮。在有模板页之前做的书,可以一次把各页的文字移进 Markdown。

本页汇集版面设计面板和检查面板中与模板页有关的部分(用 ::::page 写成的页,内容灌入页面模板的框里)。两个面板的其余部分见沙盒:版面设计面板与检查面板,模板页怎么写见模板页。

#页面模板

版面设计 › 页面与分栏 › 页面模板用来编辑 pageTemplates,即组合页面(::::page{template="…"})把内容灌入的版式,无须打开配置文件。

  • 列表列出每个模板:框的示意图、id、书中使用它的页数(跨页算两页),以及它所基于的模板。新建创建一个带有一个框的模板,该框接收页面上未指定插槽的正文;复制复制当前打开的模板;将版面存为模板把所选的组合页面(或第一个已排出的组合页面)变成新模板:各个框留在实际排出的位置,尺寸以毫米固定,样式和其他字段照旧保留。
  • 编辑范围决定字段改动作用于何处:所有页面(模板本身)、奇数页(右页)或偶数页(左页)(variants.recto、variants.verso)。该范围未设置的字段以淡色显示继承来的值,重置按钮可把它恢复为继承值。跨页模板及其订口按两页合成的一整张绘制,并标出书脊条带;跨页模板没有奇偶页变体。从右向左排和竖排的书里,页面按自己的排版流读取版面:跨页的第一页是右页,对页的区域和书脊带画在引擎排出它们的那一侧(postext 1.40起)。
  • 模板:id(重命名时,书中所有引用它的页面块会一并改写)、名称、基于(extends)、跨页开关、框的度量基准(area)、追加页使用(overflowTemplate:框的内容接续到的追加页所用的模板,见文字续排时)、网格,以及删除模板(会说明有多少页引用它;基于它的模板保留已继承的内容)。
  • 框:每个框一个按钮、添加框,以及所选框的属性:名称(插槽)和可以留空;位置(锚定到模板区域、成品页面、出血范围或另一个框、分组,并设边位和偏移)或网格单元;宽度和高度(固定、区域比例、随内容、延伸到边缘)及其上下限;框样式、图层、旋转、内容位置、栏数、各边内边距;接收页面上的自由正文(flow)、接收第一个标题(takes)、放不下的文字接续到(next)、其他框的文字绕排(exclude: "push"),开启后还有推开方式:外框或沿轮廓(wrap,按框内图片的形状);适配(fit);分组中的伸展、收缩、优先级和固定;续排(overflow.continueIn、overflow.mark、overflow.fromMark):放不下的内容转到 可选不续排、下一页、另一个框、另一个模板,以及书中每个带 id 的页面围栏(page:<id>);按 id 指定后面的页面… 可输入 {attr.sigue} 或 p47#resto 这样的值。每个字段都有说明和重置按钮。
  • 分组:名称、上下堆叠或横排一行、框间距、多余空间的去处,以及按页面顺序排列的组内框。有自身的框的分组会分配多余空间,组内的框也会在其中让出空间;没有它,分组就是各框之框的合集。
  • 书眉与页脚(沿用全书、隐藏、单独设计)和装饰,编辑方式与全书的书眉页脚相同;装饰中的文字可读取页面属性({attr.名称})。

在页面上:设计模式。 把预览上方的开关切到版面设计(或在本节打开在页面上编辑框),组合页面会显示版心边距、网格、跨页的订口,以及每条串接的箭头。点按一个框即选中它并打开其属性;拖动可移动;所选框的八个控制点可改变大小;在空白处拖动可绘制新框。框会吸附到版心边距、网格以及其他框的边和中线(按住 Alt 可自由放置;按 Esc 取消拖动)。框的位置以毫米写回:锚定在另一个框上的框保留锚点,只改偏移。若还有其他页面使用该模板,页面会询问修改保存到哪里:修改模板(并显示页数),或只改此页——为这一页新建一个基于原模板的模板,并让该页的页面块改为引用它。旋转后的框可在页面上移动,大小在字段中设置。拖动能做的一切,都可以通过字段用键盘完成。

#框样式库

版面设计 › 标注框 › 框样式库把标注框样式(calloutStyles)当作一个样式库来展示。页面模板里的框用的也是这些样式(frames[].style),所以同一种样式既可以给正文里的:::callout标注框用,也可以给模板页上的框用。

  • 每种样式都由引擎配一段示例文字画出来;样式带标签时,还会画出一个示例标签。画法与框使用它时相同:宽80毫米(内边距让版心不足40毫米时会更宽),放在正文流中,不带标注框样式可能给框指定的固定位置。基于另一种样式(extends)的样式,会带着从基础样式继承来的外观画出,与页面上的画法一致(postext 1.40起)。名称下方写着书中用到它的地方:模板框、用这些模板排的模板页,以及正文里的标注框。展开后列出每个框(打开跳到“页面模板”中的该框)和每一章及其中的标注框(查看在“文本”面板中选中下一个标记;没有写type的标记算作第一种样式,引擎就是这样给它分配样式的),编辑样式会在原处打开标注框样式编辑器。显示用来筛选列表:模板中(只要有模板用到样式,默认显示这一项)、正文中、未使用、全部。
  • 合并建议把几乎相同的样式归到使用最多的那一种名下:“这 3 种样式只在内边距上不同,要合并吗?”。比较的是引擎解析后的样式,逐项比较,不计id和名称。长度相差不到0.5毫米、颜色相差不到ΔE 2视为相同,内边距的四条边算作一项,允许不同的设置项(默认2)决定最多可以有几项不同。
  • 正文中:::callout标注框的位置(放置方式、固定位置、跨栏宽度、上下间距)必须一致,否则合并会让框移位。打开只比较外观就不再比较位置,查看时会说明有多少个框会移动;关闭时,本节会说明打开后还能再合并多少种样式。只被模板框使用的样式始终只比较外观,因为框的位置由模板决定。
  • 每个框留在原位(与 只比较外观 一起显示,默认开启):框位置与保留样式不同的样式不会被完全合并。它只保留自己的位置(放置方式、固定位置、跨栏宽度、上下间距),并基于保留样式(extends),所以它的框采用保留样式的外观,位置不变;审阅会说明有多少样式这样保留。
  • 查看列出每种将被删除的样式、它与保留样式的不同之处,以及会被改写的章节和框。合并到(或合并全部建议)把每个模板框(包括变体)的style和每一章每个标记的type都改成保留的样式,删除其余样式,并把保留的样式放到这一组中排在最前的样式原来的位置,这样没有写type的标记外观不变。合并在沙盒的撤销历史中记为每个被改写的章节一步,再加样式和模板一步。只要合并之后没有别的改动,本节的撤销会一次撤回整个合并;按 Cmd/Ctrl+Z 则逐步撤回,先撤回样式,因此中间的每一步引用的样式都存在。
  • 在标注框样式中给样式改名时,每个标记和每个模板框里的名称也会一起改。

合并只改写当前打开的版本中的章节:书的其他语言版本另存为草稿或单独的项目,保留各自的样式。智能体可以通过sandbox_frame_styles和sandbox_merge_styles使用同一个样式库(见WebMCP)。

#所有版本中的模板页

书中有页面模板(pageTemplates)时,面板最上方是模板页:书中每一章每个模板页的检查项,覆盖书所带的每个版本。一个含西班牙语、英语和加泰罗尼亚语的包,屏幕上显示其中一个版本时,三个版本都会检查。未显示的版本在后台排版,每个版本的读取方式与打开它时相同:编辑过的读其草稿,否则读包中该语言的文本。控件下方的一行说明哪些版本正在排版,全部完成后列出已检查的版本。

这一节列出:

  • 框内放不下文字(frameOverflow),附上逐级重排尝试过的步骤,以及能让框放下内容的修改;
  • 追加页之后文字仍放不下(frameContinuationLimit):框的内容已接续到模板页最多可追加的页数,仍放不下;
  • 文章转到的页面不在其后(continueTargetMissing):后面没有哪个页面围栏带有框的continueIn所指的id;
  • 标注指向不存在的锚点和锚点缺少标注(labelAnchorUnknown、anchorUnlabelled),归在排这幅图的框下;
  • 标注超出了它的宽度和标注相互重叠(labelOverflow、labelOverlap),归在同一个框下:每个版本的标注用它自己的文字来测量,所以词更长的语言会在别的语言不超出的地方超出;
  • 槽位没有对应的框、空框、未知的页面模板、模板页只写了三个冒号和跨页标记与模板不符(slotUnknown、slotEmpty、templateUnknown、pageFenceLength、spreadMismatch);
  • 目录分组跨栏拆分(tocGroupSplit);
  • 页面模板本身的警告(不存在的框样式或锚点、相互矛盾的尺寸、首尾相连的链),以及存放书中内容的设计文字(contentInConfig)。

这些条目不会在下面的分组里重复出现。

页面、框、语言分别按模板页(各版本中的同一页,不论它在各版本里的页码)、按框或按版本分组。下方三个菜单可只保留一种语言、一页或一个框。每个条目标出版本代号(CA)、该版本中的页码和框名。

点击条目即转到它所在版本的那个框。若屏幕上是另一个版本,书会切换到条目的语言,随后打开该章和该页,页面上会选中该框(预览底部显示它的路径),光标落在正文面板中该槽位的开头。模板本身的警告会打开用该模板排的第一页,并选中相应的框;含内容的设计文字会打开版面设计面板。

从多语言文件包导入的本地项目会保留全部语言,所以它的合成页和示例书一样会在每种语言中检查;点击另一种语言里的检查项,会把项目切换到那种语言并带你过去。只有一种语言的书只有一个版本,控件下方那一行会说明。活动栏上的徽标只统计屏幕上这个版本中当前章节的警告。大型的书会等你发出请求:章数乘以版本数超过48时,面板只检查屏幕上的这一章,并给出检查所有版本,点击后在后台排出其余部分(postext 1.40起)。sandbox_get_composed_checks工具(见WebMCP)不用面板就能列出所有版本的合成页检查。

#把文字移到 Markdown

在模板页出现之前做的书,可能把整页的文字放在标题样式里:每页一个隐藏标题,它的页眉把几十段文字、色块和图片放到印刷页上原来的位置。这时检查面板会列出配置中存放的正文,并在顶部提供把文字移到 Markdown。从书库面板导入这样的书时,导入一结束就会打开同一个对话框。

对话框先说明会做什么,然后才动手:

  • 每个页面设计变成一个页面模板(pageTemplates)。每段文字在原来的位置变成一个框;外观相同、上下排列、间距一致的文字块合成一个框。色块、线条和图片进入模板的装饰,装饰画在页面正文之上,和原来的页眉一样;铺满整页的图片变成页面的 background 属性,由装饰读取({attr.background})。
  • 章节的每一页变成一个模板页 ::::page{template="…"},里面是这一页的标题和正文,每个框一个 :::frame{slot="…"},放着它的文字。粗体和斜体保留;设计里的换行保留为强制换行。
  • 每段文字的字体、字号、字重、颜色、对齐和行距组成一个段落样式:书中已有完全相同的就用它,否则新建一个,以字体和字号命名。粗体字下面的彩色色块变成书中同色的标签样式,没有就新建一个。
  • 框位置相同的页面共用一个模板(page-base),各页自己的模板继承它(extends);没有增加内容的页面直接使用它。
  • 去掉页眉后变得相同的标题样式合并为一个(tema--p04、tema--p05 → tema),标题里的样式名随之改写;只用来切换页眉的隐藏标题被删去。原来以要求奇数页或偶数页的标题开头的页面,在它的围栏前加一个 :::pagebreak{parity="…"}。

会有哪些变化中的数字是:移走的文字段数和字符数、写出的页面、建议的模板、前后的标题样式数、新建的样式、配置的大小,以及前后的配置中存放的正文警告数。

前后对比用 Sandbox 自己的排版把每一章排两遍,把每个有变化的页面并排画出,旧的在新的旁边。旁边的列表说明哪些页面看起来不同,以及已知的原因:文字自身的底框、描边或首字下沉、不知道在左还是在右的页面、现在排在模板流文框里的正文。用红色标出变化的地方会把不同的像素涂成红色。

选项有:框位置相同的页面共用一个模板、粗体字下面的高亮色块变成标签,以及有这种样式时的删除没有标题使用、但含有文字的标题样式。

选中图片上的文字变成该图片的标注(当设计在书中的图片上放了短词,例如地图上的名称、示意图上的数字时才会出现)后,这些词会变成 :::figure 的 ::label 行,图片自己占一个框,它的资源得到这些锚点。摘要会统计注记、图片、锚点和注记样式的数量。此选项默认关闭,因为这些页面变化最大:注记会用本书的字体重新排版,请把它们和旧页面对照着看。锚点写入图片的资源,每个算一步撤销,位于文字和设计之间;撤销和把书恢复原样也会一并撤回它们。

移动文字把这次修改写进书的撤销历史:每改写一章是一步,设计再占一步。Cmd/Ctrl+Z 先撤回设计,再撤回各章;只要这些步骤还是最近的,对话框里的撤销会一次全部撤回。此外,原来的书也会一直保存,重新加载后也在,直到在检查面板中选择保留这次修改;在那之前,把书恢复原样会把原来的设计和文字写回去,这些步骤同样可以撤销。

留在配置中的内容列在留在配置中的内容下:文字和占位符混在一起的文字(第 {pageNumber} 页)、挂在页眉自身的框或另一个元素上的文字,以及标题设计中的文字(那不是页面)。放进框里的标题在框里保留它的设计(带框标题的标签、画在标题周围的色带;见提示框与文框中的标题)。对比度检查读取框里的文字时,以框自己的色块或其下装饰中的色块为底,因此彩色色块上的白色标签按那块颜色测量(见检查哪些内容)。

同样的迁移也是引擎的一个函数 moveTextToMarkdown({ config, chapters, metadata }, options),它返回新的配置、章节和对话框显示的报告。参见模板页。

#一键修正一个框

在框内放不下文字下面,重排阶梯为这个框算出的修正办法以按钮形式列出,用的是警告本身的措辞:

  • 允许文字缩到60 % 设置框的fit.minScale(如果fit.shrinkText是关闭的,同时打开它);
  • 把maxHeight提高到66 mm 设置它的maxHeight;
  • 把……的minHeight降到…… 降低同组另一个框的最小高度;
  • 在下一页接续 把overflow.continueIn设为next-page,放不下的部分接续到这一页之后新增的页面;
  • 改用模板……排这一页 改写正文里这一页::::page围栏的template;
  • 删去约626个字符 不做任何改动:它在正文面板中选中这个框的文字,并说明要删去多少字符。

其他按钮会改变书的版式,所以每个按钮都会先询问,说出要改的设置和值(tema-fija › dinero › maxHeight = 66 mm),或这一页将改用的模板。版面设计的修改对使用该模板的每一页都有效。点击修改后,这项修改作为撤销历史中的一步完成:Cmd/Ctrl+Z,或“内容”和“版面设计”旁的撤销按钮,可以撤回。页面会重新排版,警告随之消失,或换成修改后留下的问题(下面某个框现在放不下了)。

画布上的移动了什么,为什么面板里,同样的按钮也跟在这个框下面。不在屏幕上的版本发出的警告,会提供打开那个版本的按钮,在那里执行修正。如果排版提出修正办法之后书又改过了(模板被编辑过,或围栏写了另一个模板),按钮会说明这一点,不做任何改动。智能体用sandbox_apply_proposal执行同样的修正(WebMCP)。