架空世界历法听起来像是一个虚构世界最先需要的东西。实际上它通常排在第四或第五位。你早在决定两件事分别发生在哪一年之前,就知道公爵的背叛发生在围城之后;只有当角色们有了出生年份,而且得有人算清楚诸省燃起大火时谁多大年纪,历法才真正变得紧迫。
Lokee 把这两者当作两层来处理。顺序由你在时间线上亲手决定。日期是叠加在上面的补充说明,可以用现实历法,也可以用你自创的历法;你可以添加、修改或干脆不写日期,年表的顺序都不会因此移动。本指南会为演示故事《灰烬结社》(The Ashen Circle)构建一套历法,为其中的角色和事件标注日期,从一个空世界库开始跟完一个实例,直到年表核对完毕,并坦白说明 Lokee 不做的那部分历法工作。
Lokee 中的历法是什么,以及不是什么
Lokee 中的历法系统只有两样东西:一个名称,和一组有序的单位名称。演示中的历法叫 Ashen Calendar(灰烬历),单位是 Era(纪元)、Year(年)和 Day(日)。其中的一个日期就是每个单位各一个整数:第 2 纪元、第 44 年、第 22 日。
这就是全部的模型。在它之上动手之前,值得先把它的边界弄清楚:
- **没有月份名或日子名。**单位有名称(比如“月”),但它的取值是数字。“月 3”无法显示为“融雪月”。
- **没有单位长度。**Lokee 不知道你的一年有 13 个月、一个月有 28 天。它不会阻止你填入“日 40”,也无法计算两个日期之间隔了多少天。
- **不做换算。**你的历法和现实日期之间、两种自创历法之间,都没有对应关系。每种历法都是时间线上独立的一条泳道。
- **单位不是时间段。**这里的“纪元”是一个编了号的单位,而不是有起点和终点的一段时期。时间段属于以“时段”形式放置的事件。
这个模型真正提供的,是可靠的排序。日期会从左到右逐个单位比较,先比纪元,再比年,最后比日,所以“第 2 纪元第 3 年”永远排在“第 1 纪元第 900 年”之后。对大多数小说来说,这才是要紧的部分:谁年纪更大,什么先发生,哪些事重叠在一起。
如果你觉得这太单薄,不妨想想一部小说到底需要历法做什么。读者只会遇到寥寥几个日期,甚至一个也没有。他们注意到的是一个角色在这一章十六岁、下一章十四岁,或者一场战争在这里打了三个冬天、在那里只打了两个。要的是顺序和年龄,不是闰年规则。小说世界观设定怎么开始对整个世界说的也是同一件事:决定故事需要什么,其余的留着模糊。
先设计单位,再标注日期
因为每个日期都是一排从左往右读的数字,单位的顺序就是重要性的顺序。把最大的单位放在最前面。纪元 › 年 › 月 › 日 能正确排序;日 › 月 › 年 则不能。
从日期的存储方式,可以推出几条设计规则:
- **一律往上数。**朝某个纪元起点倒数的年份(“建城前 300 年”,然后 299、298)会排反,因为数字越大永远排得越靠后。如果你的世界有一个“之前”的纪元,就给它一个独立的纪元编号,并从你需要的最早年份开始往上数。
- **用小的正整数。**从 0 或 1 开始往上数。负数无法参与排序;数值过大,比如单个单位达到一百万或以上,也会打乱顺序。
- **先把单位定下来。**重命名单位不会有任何问题,所有日期都会随之换上新标签。但添加、删除或重新排列单位,会改变你已经填入的数字的含义,因为每个数字属于一个位置,而不是一个名称。
- **把无法建模的名称写进笔记。**如果你的世界里“月 3”叫作融雪月,就把月份名称列表写进一条笔记或一个历法条目里,写作时随手查阅。
小巧的历法更好用。两三个单位就能覆盖大多数小说;只有当情节真的取决于某个更细的单位时,才去添加它。
怎样在 Lokee 中创建一套奇幻历法?
在世界库侧边栏中打开设置,进入结构标签页。历法系统一节自带说明:“定义有名称的故事历法(例如“钢铁纪元”,单位为纪、世、月、日)。每种历法都会在时间线上显示为一条独立轨道。”
选择**+ 添加历法系统**,输入名称(占位文字是“历法名称(例如 钢铁纪元)”),然后在单位(按顺序)下建立单位列表:每个单位一个输入框,用+ 添加单位添加下一个,用 × 删除。点击添加历法保存。这套历法会连同单位一起列出,“单位:Era / Year / Day”,旁边有编辑和删除。
一个世界库可以有多套历法。当你的世界里不同文化计时方式不同,或者框架故事使用现实日期、内层故事使用自创历法时,这就很有用。它们之间永远不会相互换算,所以请把每一套都当成一把独立的尺子。
两种带日期的字段:日期与故事日期
角色和地点通过字段携带日期。在设置 → 结构 → 条目类型中编辑一个类型并添加字段。有两种字段类型可以保存日期:
- 日期是用浏览器日期选择器选取的现实日期。它支持 0001 年到 9999 年,也就是选择器能表示的范围。
- 故事日期是你自创历法中的日期。在条目卡片上,先选择历法(“—— 选择历法 ——”),再为每个单位填入一个数字。如果世界库还没有任何历法,这个字段会显示“尚未定义任何历法系统 —— 可在世界库设置中添加。”
演示为角色类型设置了一个故事日期类型的 Born(出生)字段,所以 Rowan Ashe 出生于第 2 纪元第 44 年第 22 日,他的姐姐 Mira 出生于第 2 纪元第 42 年第 10 日。凡是自创历法中的日期都用故事日期;对于 0001–9999 年范围之外的现实背景,也用故事日期,因为故事日期没有这个限制。
带日期的字段是关于某个条目的事实:一次出生、一个加冕日期、一艘船下水的日子。它们会画在时间线的轨道上,下文会讲到。它们和世界时间点不是一回事,世界时间点是构成你世界年表的那些时刻。
世界时间点:为什么先定顺序,日期可选
年表本身位于时间线页面的世界年表面板中:“重要的是顺序,日期可填可不填。”每个世界时间点都是对故事有意义的一个时刻:诸省大火、Rowan 加入 Ashen Circle、Gilded Lantern 突袭。
输入名称并点击添加时间点即可添加。你的第一个时间点还会同时创建一条用来容纳它的时间线,名为“正史”。用 ↑ 和 ↓(向前移动、向后移动)调整时间点的顺序;不支持拖放。编辑会打开时间点的表单,其中的**日期(可选)**控件提供三种形式:
- 无日期,默认选项,而且完全受支持。时间点的位置就是它的含义。
- 现实日期,一个日期选择器,外加可选的时间(可选),适合逐日推进的战争或某一夜的追逐。
- 你自创的某套历法:按名称选择,每个单位会出现一个数字框。在不同历法之间切换时,数字会从零开始,而不是被重新解读。
同一个表单里还有此处的事件,可以把事件规划中的事件挂到这个时间点上,作为它开始或结束的时刻;用故事事件规划情节介绍了这一侧的内容。表单中还有一个重要时间点复选框。重要时间点会在年表和日历视图中,在名称旁显示一颗 ★。它的作用仅此而已。它只是一个视觉标记,方便你快速找到想找的时刻,而不是一个筛选条件,也不是其他功能会读取的重要程度。
为什么要先定顺序?因为你往往先知道先后,后知道日期;也因为日期正是连贯性错误最爱藏身的地方。亲手排列时间点,会逼着你决定什么先发生;之后再标日期,Lokee 就能拿你的日期去核对这个决定。
当日期和顺序不一致时会怎样
如果某个时间点的日期早于你在同一历法中排在它前面的某个时间点,这个时间点会显示一行琥珀色提示:“此日期早于上一个时间点的日期。已保留你设定的顺序。”在日历视图中,同一个时间点会被琥珀色圆环圈出,并带有 ⚠。
Lokee 绝不会为了消除警告而重新排序或改动日期。不一致通常是笔误,但也可能是有意为之:一部把某场战役日期记错的编年史,一段按叙述者回忆的位置记录的闪回,一封伪造的信件。由你来判断是哪一种。一致性检查会在建议检查下以日期与顺序不符再次列出这些情况(“以排列顺序为准,日期仅作补充说明。未调整任何位置。”),同时列出的还有以时段形式放置、却在开始之前就结束的事件。
不同历法中的时间点之间永远不会相互比较。自创历法中的一个时间点和带现实日期的一个时间点不可能互相矛盾,因为 Lokee 没有办法把它们联系起来。
解读时间线:顺序与日历两种视图
年表上方有一个视图切换,提供顺序和日历两种。Lokee 会在当前浏览器中,按世界库记住你的选择。
顺序是可编辑的列表:时间点按你设定的顺序排列,每个都标有日期或“无日期”,以及在那里开始或结束的事件,一个时段的两端则用括线连在一起。
日历是同一批时间点按日期排列的只读布局:“有日期的点按日期排列,每个历法一条轨道。没有日期的点会保留,位于相邻点之间。”只要有任何时间点带有现实日期,就会出现一条标题为现实日期的泳道;每一套在用的自创历法各有一条泳道;如果什么都没有标日期,则会出现一条标题为“尚无日期——按顺序显示”的泳道。没有日期的时间点画成空心,并保持它们在顺序中的位置;把鼠标悬停在上面,会提示它所处的位置,例如“无日期——在 诸省大火 与 Gilded Lantern 突袭 之间”。
以时段形式放置的事件显示为横条。点击横条会在事件规划中打开这个事件。如果一个时段在一套历法中开始、在另一套历法中结束,横条的那一端会画成开口,并标注“延续到此轨道之外”或“开始于此轨道之外”,因为两半无法共用同一条轴。有问题的横条,比如结束日期早于开始日期,会带有 ⚠ 和琥珀色圆环。
关于间距,需要提醒一句。对于自创历法,Lokee 会把那串数字从左到右当作一个大数来安排时间点的间距,因为它不知道你的单位有多长。在同一年之内,日与日之间的间距是合理的;而从一个纪元跨到下一个纪元,则会被算作一次极大的跳跃。请用日历视图来看先后和疏密,而不要用它来读取跨越较大单位的精确距离。
轨道:条目上带日期的事实显示在哪里
在年表下方,时间线会绘制轨道:日期字段对应“Real dates”(现实日期)轨道,故事日期字段则每套历法各一条轨道。从未选择历法的故事日期会进入“Unassigned”(未分配)轨道,所属历法已被删除的故事日期则进入“Unknown calendar”(未知历法)轨道。这些条目都来自条目本身;这里没有添加条目的按钮,页面标题会统计共有多少条带日期的条目、分布在多少条轨道上。这三个轨道名称无论你用哪种语言运行应用,都以英文显示;你自己的历法名称则按你输入的样子显示。
每条轨道都有放大、缩小和重置,放大后还可以用 ◀ 和 ▶ 平移;当一条轨道的条目少于四条时,这些按钮保持禁用。拥挤的时刻会把卡片在轴线上下交错堆叠,而不是相互重叠。
搜索框(“按条目名称或属性搜索…”)和筛选面板可以缩小显示范围:类型:、标签:、字段:、历法:(只有当不止一套历法拥有带日期的事实时才会显示)和日期范围:。日期范围使用的是现实日期选择器,是为 Real dates 轨道准备的;用在自创历法上,它不会按你的本意去读你的日期,所以请改用**字段:或历法:来缩小那些轨道。按字段:**筛选是一个快捷办法,比如可以一次看到全体角色的每一个 Born。
条目卡片上的每个日期或故事日期字段,还都有一个**在时间线上查看 →**链接,点击后会打开时间线,并高亮这条事实。
实例:从头到尾为《灰烬结社》标注日期
下面是整件事按顺序走一遍的样子,用的是演示世界,也是我为自己的书做这件事时会采用的方式。
第 1 步,没有日期的年表。在时间线上添加情节所依赖的时间点:诸省大火、Rowan 的父母去世、Rowan 加入 Ashen Circle、Gilded Lantern 突袭、酒窖进水。用箭头把它们排好。这花了两分钟,而且已经能回答“Rowan 是在突袭之前还是之后加入的?”
第 2 步,历法。在设置 → 结构中添加 Ashen Calendar,单位为 Era、Year、Day。三个单位,最大的在前。
第 3 步,锚点。编辑 诸省大火,给它第 2 纪元第 51 年第 3 日。编辑 Gilded Lantern 突袭,给它第 2 纪元第 62 年第 118 日。它们之间的三个时间点不标日期。在日历视图中,它们仍然待在相邻点之间,画成空心。
第 4 步,人物。给角色类型一个故事日期类型的 Born 字段。Rowan:第 2 纪元第 44 年第 22 日。Mira:第 2 纪元第 42 年第 10 日。Duke Cassian Varnhold:第 2 纪元第 19 年第 200 日。时间线上现在多了一条 Ashen Calendar 轨道,上面有三张卡片。
第 5 步,核对。打开筛选,把**字段:**设为 Born,读一读这条轨道。大火时 Rowan 七岁,突袭时十八岁;Mira 大两岁。如果你误把 Rowan 填成了第 64 年,他就会出生在情节需要他在场的那次突袭之后,而轨道会在任何读者之前把这一点摆给你看。
**第 6 步,一段时期。**添加一个故事事件 长冬,把它作为时段放置,从新时间点 初雪 到新时间点 解冻,两者都标上日期。日历视图会画出横条;如果你把解冻的日期标在了初雪之前,横条会带上 ⚠。
**第 7 步,失误。**后来你决定 Rowan 的父母去世 发生在第 49 年,便把它填了进去。这个时间点变成了琥珀色:这个日期早于你排在它上方的大火。要么大火比你以为的更晚,要么父母终究是死于大火。Lokee 没有移动任何东西。它只是提出了问题。
其中有两步你会在整本书的写作中反复做:情节需要一个时刻时就添加一个时间点,有把握了再标日期。
常见错误以及修正方法
单位顺序反了。日 › 月 › 年 会让第 1 年第 30 日排在第 900 年第 2 日之后。在填日期之前修好它:在历法的编辑里重新排列单位,然后把已经填入的那几个日期再核对一遍,因为每个数字属于一个位置。
倒数的纪元。“建城前 300 年”会排在“建城前 299 年”之后。给“之前”的纪元一个独立的纪元编号,往上数。
**给所有东西标日期。**五十个带着编造数字的时间点,就是五十次你会随手忽略的警告。只给锚点标日期,其余的不标;没有日期的时间点保持顺序,在日历视图中依然读得正确。
**一种文化两套历法。**给同一群人设一套“宫廷”历法和一套“民间”历法,两者会渐渐对不上,而 Lokee 无法调和它们。一种文化一套历法,民间的叫法写进笔记。
指望日期范围筛选对你的历法起作用。它是为现实日期准备的。在自创历法的轨道上用字段:和历法:。
**该用带日期字段的地方用了世界时间点,或者反过来。**出生是关于一个角色的事实:用故事日期字段。战役是年表中的一个时刻:用世界时间点,标不标日期都行。两者混用的结果,是时间线把一次出生显示成一个什么也没发生的时间点,或者把一场战役变成谁也无法在那里记录变化的东西。
Lokee 在历法上做不到的事
它不会计数。没有“两个日期相隔多少天”,也没有年龄计算;年龄要你从轨道上读出来,或者自己做减法。它不给月份起名,不处理闰年、月相或季节,也不会把 Ashen Calendar 换算成任何别的东西。如果你的书依赖一个月相周期,就把周期写成一条笔记,并手动给要紧的时间点标上日期。一个强制执行单位长度的历法引擎,会拒绝每一个你还没把握的日期,而一部小说里的大多数日期恰恰就是这样。
五分钟上手
- 时间线:按顺序添加五个世界时间点,不标日期。
- 设置 → 结构 → 历法系统:添加一套历法,两三个单位,最大的在前。
- 用这套历法给第一个和最后一个时间点标上日期。
- 给你的角色类型添加一个故事日期字段,为两个角色填上。
- 把时间线切换到日历视图,看看每个人落在哪里。
让长篇年表保持清晰的习惯
- **先排顺序,再标日期。**先建立不带日期的年表,再为你有把握的时间点标注日期。一旦后来的某个决定与顺序相矛盾,警告就会告诉你。
- **只给锚点标日期,不必面面俱到。**一场战争的第一天和最后一天、主要角色的出生,承载了大部分分量。
- **一种文化一套历法,而不是一种心情一套。**描述同一个社会的两套历法会渐渐对不上。
- 用事件表示时间段。“长冬,第 61 年至第 63 年”是一个以时段形式放置的事件,有开始时间点和结束时间点;横条会显示出这段跨度。
- **用分支代替改日期。**如果你想试试围城提前十年发生的版本,就创建一条时间线分支,而不是去改动正史;参见架空历史与分支时间线。
- **给不在场证明标日期,而不是给纪元。**对推理小说来说,两三个时间点上带具体时间的现实日期,比一整套自创历法更管用;让推理小说保持公平就是这样搭建案件的。
日期是 Lokee 区分开的三种“何时”之一;另外两种是卡片上此刻为真的内容,以及读者何时得知。三种“何时”解释了它们如何配合,帮助中的时间线和时间两节是参考说明。互动演示中包含本文用到的 Ashen Calendar 和角色的出生日期。