前言
我喜欢去游览悬疑剧和推理小说相关的圣地,是圣地巡礼的重度爱好者,可惜五月份计划去日本但未能成行。《名侦探柯南:独眼的残像》即将在 6 月 27 日(本周五)上映,我规划好了圣地巡礼路线,先来一次赛博巡礼,等之后有机会再实地探访。
Markdown 是一种文本标记语言,可以简洁高效的编排文档。我在准备圣地巡礼的过程中会用到 markwhen 和 markmap,它们均是基于 Markdown 的开源工具,语法简单明了,并且可以免费使用1。
用 markwhen 创建时间线
为什么选择 markwhen
我曾经计划过去日本圣地巡礼和岛田庄司的推理小说有关的地方,并且用谷歌地图绘制了圣地巡礼路线图。不过在谷歌地图上手动标记出一个个地点不仅繁琐,也不方便更改和分享,还没办法导出巡礼的路线随时参考。

Anitabi 动画巡礼是一个很好用的网站,可以生成动画取景地巡礼地图,还能共享地标与截图,「片场APP」功能类似,不过里面是电影的取景地。这两款工具我都用过,但我还是更偏爱纯文本的输入格式。

#+TODO: START(s!) | END(e!)
* END 《出云传说7/8杀人事件》
- State "END" from "START" [2024-07-22 Mon 20:16]
- State "START" from [2024-07-19 Fri 22:55]
现成的网站使用起来都不是特别顺手,我开始探索比较小众的工具。我用过 Emacs 的 Org mode 来标记阅读一本书的开始和结束的时间戳,效果和代码如上图所示,显示出的效果差强人意,我没找到如何做出时间线的效果。我还试过用 Emacs 来标记地点,一番搜索后发现了一个叫作 osm.el 的包,可以在地图上进行标记。由于我是 Vim 用户,对 Emacs 的操作非常生疏,而且实际效果也不尽人意,所以放弃了 Emacs。


寻找时间戳工具的时候,偶然发现一个叫作 markwhen 的项目,功能包括创建日志、甘特图、博客、笔记、时间线、日历等等。markwhen 最戳中我的点是它使用了 Markdown 语法,可以很方便的通过 git 进行版本管理,便于修改和保存。
它也有很多其他优点,该项目作者提供了多种使用方式,有网页版, VS Code 和 Obsidian 的插件,还有 Meridiem 客户端,文档也比较全面,提供了许多应用实例。markwhen 支持多种时间线的表示方式,比如坐标轴、日历、地图等等。
《泪流不止》圣地巡礼指南


我刚开始接触 markwhen 的时候,正在阅读岛田庄司的《泪流不止》,用 markwhen 可以轻松制作出故事发展的时间线,并标记出书中提到的地点。由于项目作者对使用 markwhen 语法的方式做了许多更新,导致当时所用的语法已经过时,这里仅展示导出的效果图,具体的语法留待下文讲解。制作这两张图只需要二十多行,就能概括一本将近九百页的书,看起来一目了然。
用 markmap 创建思维导图
为什么要做思维导图
工作后,请假出一趟远门变成了一件奢侈的事情,从看到喜欢的悬疑剧或者小说,到实地探访取景点,往往已经过了很长时间。圣地巡礼的时候经常会遇到的一个痛点,就是完全忘记了原作中发生的故事,尤其是那些复杂的人物关系。去年在函馆巡礼柯南 M27 百万美元的五棱星取景地的时候,电影中大部分剧情都已经不记得,只是走马观花式地看了看,有些影响巡礼的体验。
提炼出人物关系和背景,并且绘制思维导图,不仅可以加深对故事和剧情的理解记忆,需要回忆细节的时候还可以起到提纲挈领的作用。我试过用 Xmind 制作思维导图,和上文提到的网页版和 App 工具一样面临着修改和导出便捷性的问题。
markmap 的使用方式


---
title: 出云传说7/8杀人事件
markmap:
maxWidth: 400
colorFreezeLevel: 2
---
## 人物
- 吉敷竹史
- 成为刑警已经有十年
- 和石田是警察学校同学
- 石田
- 鸟取县的刑警
- 和吉敷一起练过柔道,橄榄球
- 青木恭子
- K学院历史民族研究室的助理
- 昭和三十年出生
- 现居东京青山区
- 野村操
- K学院历史民族研究室的助理
- 中菌教授
- K学院历史民族研究室的教授
- 波地
- K学院国文讲师
## 事件
- 案发列车
- 6:31,从鸟取到若樱,若樱站,发现右大腿
- 6:55,从仓吉到山守,山守站,发现右臂
- 7:28,从米子到镜港,大筱津町站,发现右小腿
- 8:33,从米子到仓吉,仓吉站,发现左臂
- 8:36,从出云到出云大社,大社站,发现左小腿
- 10:45,从鸟取到大阪,大阪站,发现躯干
- 11:05,从出云到鸟取,鸟取站,发现左大腿
- 受害者
- 年龄:25-30岁
- 身高:154-155cm
- B型血
- 手脚指纹被毁
- 死亡时间:4月19号晚6-8pm
- 死因:勒死
- 尸体被木匠用的锯条分尸
- 匿名信说是K学院的
- 嫌疑人
- 年龄:24-25岁
- 发油抹的很亮
- 戴着黑色眼镜和白色口罩
- 动作利落
## 小说特点
- 时刻表诡计和当地神话传说相结合
- 作者对列车路线,民俗都很了解
- 只看时刻表会感觉干巴巴的,加入民俗更有趣
markmap 可以用 Markdown 语法来制作思维导图,该项目提供了 VS Code 插件,直接在编辑器里就能完成转换。以岛田庄司的另一本小说《出云传说7/8杀人事件》为例,书中涉及了比较复杂的时刻表诡计,所以我给本书做了思维导图,可以把时刻表化繁为简的展示出来。
markmap 的语法比较直观,Markdown 文件的开头部分,maxWidth 是每行最大显示字数,colorFreezeLevel 是有关显示颜色的配置,用户还可以用 CSS 更改导出的 SVG 格式的文件。之后的内容基本和 Markdown 的语法一致,比如可以用井号表示层级,层级中还可以加上有序或者无序列表,图片和表格等等。
柯南剧场版圣地巡礼
柯南 M28 的取景地主要集中在长野县,先简单介绍一下 M28 的剧情(不涉及剧透)。毛利接到前同事鲛谷浩二的电话,相约在日比谷公园见面,可毛利到了的时候,却发现鮫谷已经被害。警方发现鲛谷的电脑上有长野县的一件案子的资料,为了查明杀害鲛谷的凶手的身份,毛利跟随警方来到了长野县。位于长野县的野边山天文台遭袭,上原由衣和大和敢助前去调查, 当天文台的巨型天线启动时,大和敢助的左眼突然感到剧烈的疼痛。

2025-04-18: M28首映日期 !debut
before !debut 10 months - 1 day: 未宝岳雪崩 #nagano
location: "Tatsuzawa, Fujimi, Suwa District, Nagano 399-0212, Japan"
after !debut 7 days - 1 day: 鮫谷在日比谷公园被害 #tokyo
location: "1-6 Hibiyakoen, Chiyoda City, Tokyo 100-0012, Japan"
before !debut 8 years - 1 day: 长野县一家枪械店遭到抢劫 #nagano
before !debut 6 years - 1 day: 御厨贞邦获得假释 #nagano
before !debut 6 years - 1 day: 刑警甲斐玄人从山上坠落 #nagano
如果给剧场版中提到的大事件在时间线上做个标记,以剧场版首映日为时间线的原点,能得到上面一张图。我使用了 markwhen 提供的相对日期标注功能,用 !debut 标注了时间线的原点,之后的事件可以描述为 !debut 之前十个月,或者之后七天等等。1 day 表示条目持续的时间,如果某个项目阶段持续了一个月,就可以改成 1 month。
每个条目后面可以加上标签,比如 #nagano 和 #tokyo 分别表示在长野或者东京发生的事情。如果是制作项目的时间线,标签可以换成项目的不同阶段,比如天使轮,A 轮和 B 轮等。在最后加上 0-100% 的百分比,可以显示出当前项目的进度。条目还可以附加描述,关键字 location (地点)后面的内容表示条目的地址。

---
title: 柯南M28人物
markmap:
maxWidth: 400
colorFreezeLevel: 2
---
## 警方
- 长野县搜查一科
- 诸伏高明
- 警衔为警部
- 上原由衣
- 警衔为警部补
- 大和敢助
- 警衔为警部
- 鲛谷浩二
- 毛利的前刑警同事
- 毛利叫他外号「小鳄鱼」
- 现在在东京警视厅担任内勤
- 就职于「改革准备室」
- 在日比谷公园遭到枪击
- 电脑上有「未宝岳雪崩事故」的资料
- 林警部补
- 山梨县警察
- 长谷部
- 隶属于东京地方检察厅
## 抢劫案相关
- 御厨贞邦
- 曾参与8年前的枪械店抢劫案
- 6年前获得假释后失踪
- 鹫头隆
- 曾参与8年前的枪械店抢劫案
- 舟久保真希
- 8年前抢劫案中受伤
- 父亲是舟久保英三
- 冬季两项选手
## 天文台相关
- 丰越智
- 野边山天文台研究员
- 阿笠博士的大学学弟
- 邀请阿笠博士他们去参观天文台
剧场版中调查团队人物众多,包括长野县、山梨县的警察、东京的警察、公安、检察官、多年前发生的一件案子的相关人员,还有长野县天文台的工作人员。为了方便搞清楚他们之间的关系,我用 markmap 做了一份思维导图,等之后电影上映,可以帮助我更好地理解剧情。

title: 大和敢助
description: 长野县警察本部·警部
contact:
email: ganzhu@gmail.com
website: ganzhu.jp
linkedIn: linkedin.com/in/ganzhu
github: github.com/ganzhu
location: 日本长野县
喜好食物: 荞麦面
特点: 推理力强、行动果断、性格急躁
sidebar:
- name: 教育与经历
items:
-
- 小学至高中
- 与诸伏高明同校,竞争对手
-
- 警察训练学校
- 受甲斐玄人影响立志为刑警
- name: 能力与特征
items:
- 推理力极强,判断迅速
- 洞察力强,识破柯南身份
- 擒拿格斗能力佳
- 急躁易怒,常与诸伏高明争吵
Apr 2024 - now: 刑警·长野县警察本部
location: 长野县
=================
- 侦办复杂案件时与柯南、平次等人合作多次
- 凭借对风林火山战术的理解,布局破解凶案,战术推理结合实战
- 被误认为黑衣组织朗姆,但最终被青山刚昌亲自排除嫌疑
2015 - 2024: 刑警·长野县警察本部
location: 长野县
=================
- 在未宝岳山上遭遇雪崩
2012 - 2015: 刑警生涯初期
location: 长野县
=================
- 积极参与一线案件调查,打下坚实基础
- 与上原由衣是青梅竹马关系,情感深厚
大和敢助是 M28 中的主要角色之一,可我对他并不熟悉,所以我借助 markwhen 给他生成了一份简历2。title 和 description 是简历标题和职位描述,contact 用于呈现联系信息或个性标签。markwhen 提供了侧栏功能,用 sidebar 关键字作为标识,可以分类呈现教育背景、技能等,位于简历左边。简历的右边是常见的按照时间排序的经历,每段经历以「时间: 职位」作为主键,下面可以写 location(地点)、链接,也可配上图像。
markmap 还有更高阶的用法,把 markwhen 的文本丢给 DeepSeek 或者 ChatGPT 之类的大语言模型,并使用联网搜索功能,就可以让大模型给生成一个用 Markdown 格式所写的旅行计划表,再用 markmap 生成思维导图,相比直接用 Markdown 写的旅行文档更加言简意赅。

我把 M28 的时间线和地点输入大模型,让它规划一条从东京出发,再回到东京的圣地巡礼路线,全程需要使用公共交通。大模型输出的思维导图中清晰的列出了需要乘坐的列车线路和所需时间,具有很强的可操作性。

---
title: 柯南M28圣地巡礼旅行规划
edit:
- conan@markwhen.com
view: \*
#NaganoTrip: #7bb1e6
#交通: #e6a87b
#住宿: #88c999
#圣地巡礼: #d36b9b
#完成: #999
---
section 出发准备 #NaganoTrip
now: 开始规划从东京到长野县的圣地巡礼行程
2025-05-15/2025-05-17: 预订交通与住宿
- [x] 新干线车票 #完成
- [ ] 第一晚民宿预订
- [ ] 第二晚酒店预订
endSection
section 圣地巡礼行程 #NaganoTrip
group 第一天:轻井泽区域 #圣地巡礼 #e6a87b
2025-05-18 8:00am: 从东京出发前往轻井泽 #交通
2025-05-18 11:00am - 2:00pm: 巡礼地点A(动画《XXX》的取景地) #圣地巡礼
2025-05-18 3:00pm - 5:00pm: 参观地点B(角色X首次登场的背景) #圣地巡礼
2025-05-18 晚上: 住宿:轻井泽民宿 #住宿
- [ ] 拍摄地点对比照
- [ ] 与当地粉丝互动
endGroup
group 第二天:上田市区域 #圣地巡礼 #88c999
2025-05-19 9:00am - 12:00pm: 参拜动画《YYY》中的神社原型 #圣地巡礼
2025-05-19 1:00pm - 4:00pm: 重走主角通学路线 #圣地巡礼
2025-05-19 晚上: 住宿:上田市温泉旅馆 #住宿
- [ ] 买周边纪念品
- [ ] 发布打卡动态
endGroup
group 第三天:松本市区域 #圣地巡礼 #d36b9b
2025-05-20 10:00am - 1:00pm: 拍摄《ZZZ》结局场景还原点 #圣地巡礼
2025-05-20 2:00pm: 返回东京 #交通
- [ ] 总结旅程
- [ ] 整理照片与视频
endGroup
endSection
section 后续任务与记录
2025-05-21: [ ] 整理旅程笔记与影像 #完成
2025-05-22: [ ] 发布博客或视频分享 #完成
endSection
如果感觉旅行计划表过于粗略,可以试试 markwhen 提供的项目管理功能,能帮助管理圣地巡礼的具体规划,比如使用 section 和 group 关键字可以整合和折叠条目。每个 section 可以用不同颜色标识,section 中可以加入 group 来组织每天的行程安排,group 添加待办事项便于管理行程执行情况。标签用井号标识,代表任务类别,如交通、住宿、圣地巡礼等。在时间线上点开某个条目,右侧可以用日历的格式把具体信息显示出来。
柯南动画圣地巡礼
DIME 杂志专门出了一期有关长野县圣地巡礼的内容。杂志里和 M28 有关的取景地其实篇幅不长,倒是用了好几页来介绍漫画 86 卷《县警的黑暗》的取景地,如果有机会去长野县圣地巡礼,可以顺便参观一下动画中出现的景点。
在这个案件中,柯南一行人来到长野县,正在参观川中岛之战的相关景点,偶遇了长野县刑警大和敢住等人。不久后,大和敢住在河里发现了搜查一课刑警竹田繁警官的头部。竹田组的警员接连遇害,大和敢住成了头号嫌疑人。

03:25: 川中岛古战场遗址
location: "1362 Oshimadamachi, Nagano, 381-2212, Japan"
07:52: 勘助宫
location: "172, Shinonoikomori, Nagano City, Nagano 388-8003, Japan"
07:55: 山本勘助之墓
location: "156 Matsushiromachishiba, Nagano, 381-1214, Japan"
08:00: 胴合桥
location: "Shinonoikinebuchi, Nagano, 388-8019, Japan"
根据景点在剧中出现的时间戳,可以用上面这段 Markdown 文本把巡礼路线标记出来。每个条目的时间标记用的是剧集中该场景出现的时间点,而不是具体的年月日的日期。下面的地址需要用双引号,这样 markwhen 可以把由逗号分割的地址正确地显示出来。

---
title: 《县警的黑暗》人物
markmap:
maxWidth: 400
colorFreezeLevel: 2
---
## 长野县警方
- 黑田兵卫
- 搜查一课课长
- 诸伏高明
- 警衔为警部
- 上原由衣
- 警衔为警部补
- 大和敢助
- 警衔为警部
- 竹田组
- 竹田繁
- 鹿野忠次
- 油川信介
- 三枝守
## 战国人物
- 武田信玄
- 本名武田晴信
- 娶了由布姬为妾
- 由布姬
- 嫁给了武田信玄
- 柯南动画冲野洋子扮演过她
- 山本勘助
- 大和敢住姓名原型
- 武田信玄的军师
- 提出使用啄木鸟战法
- 武田信繁
- 剧集中对应竹田繁警官
- 鹿野晶次
- 剧集中对应鹿野忠次警官
- 油川信吉
- 剧集中对应油川信介警官
- 三枝守直
- 剧集中对应三枝守警官

我对日本战国的历史不熟悉,动画 810 集中出现了大量战国人物,和案件也有着紧密的关联,所以我用 markmap 做了思维导图,帮助理清人物之间的对应关系。我把时间线和地点同样给了大模型,输出的旅行规划思维导图和 DIME 杂志中的行程推荐基本吻合,验证了用这种方式生成的旅行指南的可行性。
结语
最近刚录制了一期以圣地巡礼为主题的播客,回忆了之前圣地巡礼的经历。每一次去取景地游览,都是一段非常珍贵的旅程,我会尽可能的做好充分的准备,获得最佳的巡礼体验。本文提到的这些基于 Markdown 的开源项目,无疑给我的巡礼之旅带来了非常大的帮助。
我之前尝试过用 GitHub Action 帮助制作推理日历,以后有机会也想利用开源工具来制作一个推理圣地巡礼应用。除了制作圣地巡礼指南,markwhen 和 markmap 还有许多其他用途,比如读书笔记,项目管理和简历制作等,更详细的使用方式可以参考官方文档。