ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

novelWriter 世界设定笔记实战:用 @tag 与 @location 构建地点标签体系

novelWriter 世界设定笔记实战:用 @tag 与 @location 构建地点标签体系 桌面应用【免费下载链接】novelWriternovelWriter is an open source plain text editor designed for writing novels项目地址https://gitcode.com/gh_mirrors/no/novelWriter点击查看免费下载导读本文以 novelWriter 示例项目中的世界设定笔记Earth文档为切入点系统讲解 novelWriter 的 Tags References 元数据体系——从tag标签定义、location引用语法、%Short故事注释到标签在 Outline View、References 面板与文档构建中的实际作用并给出可复制的完整实践方案。读完本文你将掌握在 novelWriter 中为角色、地点、时间线、物件等建立可交叉引用的结构化设定库的全部技术要点并理解其底层索引机制核心索引实现。novelWriter 是一款面向小说创作的开源纯文本编辑器其项目结构与小说/设定笔记均以 Markdown 风格的纯文本存储。在示例项目Sample Project的Locations世界设定根文件夹下Earth笔记是一份非常典型的世界/地点设定卡片它完整展示了 novelWriter 元数据语法的核心用法# Earth tag: Earth location: Space %Short: Third planet from the sun. Defining locations in your story can be very helpful. Here we have a tag called Earth which is a place in Space.一、认识示例笔记一份完整的地点设定卡片在正式讲解语法之前先看这份笔记在示例项目中的位置与作用。它在项目文件sample/nwProject.nwx中的注册信息为item handleb3e74dbc1f584 parent15c4492bd5107 root15c4492bd5107 order0 typeFILE classWORLD layoutNOTE meta expandedno headingH1 charCount121 wordCount23 paraCount1 cursorPos192 / name statussf12341 importi2d7a54 activeyesEarth/name /item其中三个字段决定了这份笔记的属性与行为classWORLD笔记归属于World世界设定类别对应项目树中的Locations根文件夹handle15c4492bd5107。正是根文件夹的类型决定了标签被索引到哪一类故事元素名下layoutNOTE该文档是设定笔记而非小说正文文档小说正文为DOCUMENTparent15c4492bd5107父节点即Locations根使其出现在世界设定分类下。正文四行分别承担不同职责行语法作用# EarthH1 标题定义该笔记的标题是标签挂载的标题层级锚点tag: Earth标签定义将 Earth 注册为全局唯一标签Tag供全项目引用location: Space引用声明声明 Earth 位于标签 Space 所代表的地点之中跨笔记引用%Short: ...短描述注释为笔记提供一句话摘要会显示在项目树/大纲的提示信息中这种一个标题 一个标签 若干引用 自由正文的组合正是 novelWriter 设定库的基本单元。示例项目中的Marssample/content/5eaea4e8cdee8.md与Spacesample/content/f1471bef9f2ae.md笔记采用了完全相同的结构三者共同构成一个迷你太阳系设定库# Mars tag: Mars location: Space %Short: Fourth planet from the sun. Its red. Dusty and red.# Space tag: Space Space … its an awful lot of nothing, with bits in it here and there. Some of which, people like to call home.可以看到Space只定义了标签它是上级地点Earth和Mars在定义自身标签的同时用location: Space声明自己归属于 Space——这就是典型的地点层级关系建模。二、tag 标签定义设定库的基石2.1 基本语法与可选显示名根据官方文档docs/source/usage/tags_and_references.rst标签的完整语法有两种tag: TagName # 基本格式 tag: TagName | Display Name # 带显示名TagName必填你自选的全局唯一标识符之后所有引用都通过它进行。必须在整个项目中保持唯一且每个标题下只能设置一个标签Display Name可选标签的显示名用于构建稿件时替代缩写标签。例如在章节标题中自动插入视角角色名时如果内部使用短名 Jane可通过显示名 Jane Smith 让章节标题更完整。示例项目中的角色笔记sample/content/bb2c23b3c42cc.md正好演示了显示名的用法# Jane Smith tag: Jane | Jane Smith %Short: The heroine of our example story. Jane Smith is the main character of our little example project.这里标签键是Jane引用时用显示名是Jane Smith构建章节标题等场景用。2.2 标签大小写与版本演进2.2 版本起标签不再区分大小写定义时用 Earth、引用时写 earth 均可但标签展示时保留定义时的大小写2.3 版本起支持显示名2.6 版本起小说文档Novel 类别也可以设置标签用于章、场景之间的交叉引用或从笔记引用它们。2.3 一个文档可以定义多个标签吗可以但每个标题heading只能有一个标签。示例中的John and Bob Smith笔记sample/content/14298de4d9524.md展示了同一文件、不同标题、各自定义标签的写法# John Smith tag: John | John Smith char: Bob # Bob Smith tag: Bob | Robert Smith char: John这样一份文件就同时注册了John和Bob两个角色甚至可以用char互相引用表达角色关系。novelWriter 的元数据是挂载在标题上而非整个文档上——这与项目结构由文档内标题层级推断的设计一脉相承参见 docs/source/usage/chapters_and_scenes.rst。三、location 等引用关键字把设定连成网location: Space是 Earth 笔记中第二个核心要素——引用Reference。与tag定义标签不同引用是把当前标题关联到其他位置已定义的标签。3.1 全部引用关键字速查表novelWriter 共支持 10 种引用关键字源码定义于 novelwriter/constants.py 的nwKeyWords类一行可列多个值用逗号分隔关键字含义目标标签所在根文件夹类型pov本节视角角色Charactersfocus本节聚焦角色非视角角色时使用Characterschar本节出现的其他角色Charactersplot本节推进的情节/支线Plotstime本节涉及的时间线Timelineslocation本节发生的地点Locations即 World 类object本节出现的重要物件Objectsentity本节出现的实体/组织Entitiescustom其他自定义类别引用Custommention本节提及但未实际出现的任何元素任意笔记根文件夹story从别处引用小说文档场景/章节Novel正是location等关键字让 Earth 笔记能引用 Space 笔记也让小说场景能反过来标注发生在地球上。示例项目的小说文档Making a Scenesample/content/636b6aa9b697b.md就是一个完整的场景引用串### Making a Scene tag: Scene pov: Jane char: John, Jane location: Earth mention: Space一行location: Earth就把场景与设定库中的地点标签建立了联系——正文完全不需要重复描述地点背景。3.2 引用的实际用途Outline View大纲视图所有引用被项目索引收集后会显示在大纲中方便按角色、地点、时间线筛选场景References 面板在文档查看器中打开笔记时面板会按标签类型Character、Location 等分组显示关联可点击跳转笔记在查看器中打开时引用会变成可点击链接在编辑器中按住Ctrl单击也可跳转始终在视图面板打开HTML 导出联动用 Manuscript Build 工具导出 HTML 时笔记之间的交叉引用会变成导出文档中的可点击链接一致性检查mention用于提及但未出场的元素后续检查剧情连贯性时非常有用。3.3 未定义标签的引用快速补建如果引用的标签尚不存在编辑器会为无效引用画上波浪线。此时可以右键点击该引用选择 Create Note for TagnovelWriter 会自动在正确类型的根文件夹下生成一份新笔记并定义好标签。这一功能在源码中由 novelwriter/core/coretools.py 的文档生成逻辑实现生成# 标题tag: xxx%Short: 描述模板novelwriter/core/project.py 中也有writeNewFile直接写入tag:行的对应实现。四、%Short 与注释语法给设定卡片加摘要Earth 笔记第三行%Short: Third planet from the sun.属于 novelWriter 的注释Comments体系。注释以%开头在编辑器中按注释类型着色不会进入导出的稿件正文。其中%Short是短描述注释用于给标题附加一句摘要在项目树、大纲等处用作提示信息。除%Short外示例项目还大量使用了故事结构注释%Story与%Note2.7 版本加入详见 docs/source/features/story_comments.rst。语法为%Story.结构术语: 描述文本 %Note.类别: 备注文本Making a Scene场景中的用法%Story.Resolution: You can describe the scene structure with story comments. %Note.Consistency: You can also make notes about things like consistency of the story.其中 结构术语 完全由你自己定义任何想追踪的情节要素都可以。这种方法常被用来做 Story Grid 式的结构分析记录激励事件、危机、转折、结局等便于后续从作品中提取元数据进行结构分析。此外注释还有%Synopsis大纲、%Footnote脚注如Making a Scene中%Footnote.f4xr5: ...所示等类型。五、底层原理标签如何被索引与校验理解标签体系在源码中的实现能帮助你预判编辑器行为、排查标签标红等问题。5.1 元数据解析与索引novelWriter 在保存文档时会对元数据行进行解析与索引。核心流程在 novelwriter/core/index.py 的_indexKeyword方法中isValid, tBits, _ self.scanThis(line) if not isValid or len(tBits) 2: logger.warning(Skipping keyword with %d value(s) in %s, len(tBits) - 1, tHandle) return if tBits[0] not in nwKeyWords.VALID_KEYS: logger.warning(Skipping invalid keyword %s in %s, tBits[0], tHandle) return if tBits[0] nwKeyWords.TAG_KEY: tagKey, displayName self.parseValue(tBits[1]) self._tagsIndex.add(tagKey, displayName, tHandle, sTitle, itemClass.name) ... else: self._itemIndex.addHeadingRef(tHandle, sTitle, tBits[1:], tBits[0])每一行以开头的元数据会被拆分为[关键字, 值1, 值2, ...]关键字必须属于nwKeyWords.VALID_KEYS即上一节速查表中的全部关键字否则整行被跳过并记入日志tag走标签索引路径_tagsIndex并记录到标题标签setHeadingTag其余关键字走引用索引路径addHeadingRef把当前标题与标签关联起来。5.2 标签类别由根文件夹类型决定标签最终被归入哪类故事元素角色、地点、时间线……取决于该笔记所在根文件夹的nwItemClass枚举定义于 novelwriter/enum.pyPLOT、CHARACTER、WORLD、TIMELINE、OBJECT、ENTITY、CUSTOM等类别一一对应。这正是官方文档强调是根文件夹类型决定标签索引到哪个类别的原因——同样的tag: Earth放在 Locations 根下就是地点放在 Characters 根下就是角色。5.3 标签唯一性与索引失效处理标签必须在全项目唯一。当你在编辑器中看到某条标签/引用没有被高亮着色、或出现波浪下划线时通常是以下两种情形标签确实非法重复、值缺失、关键字错误索引过期——高亮器误判。此时按F9或在Tools 菜单选择 Rebuild Index重建索引即可正常情况下文档保存时索引会自动重建一般无需手动干预。六、完整实践搭建你自己的地点设定库结合以上全部语法一个可复制的太阳系地点库实践方案如下与示例项目的结构一致第 1 步创建地点根文件夹在项目树中新建根文件夹类型选择Locations对应 World 类。这是所有地点标签的归属类别。第 2 步为每个地点建立笔记每份笔记遵循H1 标题 tag 可选引用 %Short 自由正文模板# Space tag: Space %Short: The vast emptiness between celestial bodies. Space … its an awful lot of nothing, with bits in it here and there.# Earth tag: Earth location: Space %Short: Third planet from the sun. Defining locations in your story can be very helpful.第 3 步在小说场景中引用地点在场景文档的元数据区写入location: Earth以及pov、char、plot等即可把场景与地点库关联起来。第 4 步利用编辑器辅助功能在空行输入会自动弹出补全菜单auto-completer先提示可用关键字输入:后列出已定义标签支持逗号分隔添加多个值悬停或右键点击标签/引用可快速跳转、创建缺失标签的笔记打开 Outline View大纲视图检查每个场景的引用是否完整用 References 面板核对地点设定之间的关联。第 5 步构建稿件时使用标签在 Manuscript Build 工具F5中可配置章节/场景标题引用标签信息如自动插入pov角色名未设置显示名的标签会直接使用标签键。这正是 2.3 版本引入显示名功能的实战价值所在。七、小结以Earth笔记为代表的 novelWriter 世界设定卡片浓缩了该工具最具特色的Tags References设计哲学用纯文本元数据tag、location及%Short注释替代传统的表单与数据库表将角色、地点、时间线等设定元素组织成可交叉引用的网络再由项目索引驱动大纲视图、引用面板与稿件构建。掌握这套语法你就能像示例项目一样用最少的重复信息维护一个结构清晰、可自动校验一致性的设定库。延伸阅读均位于本仓库完整标签与引用语法docs/source/usage/tags_and_references.rst故事结构注释%Story/%Notedocs/source/features/story_comments.rst项目结构与标题层级docs/source/usage/chapters_and_scenes.rst元数据关键字常量定义novelwriter/constants.py标签/引用索引核心实现novelwriter/core/index.py更多示例笔记Earthsample/content/b3e74dbc1f584.md、Spacesample/content/f1471bef9f2ae.md、Marssample/content/5eaea4e8cdee8.md、角色示例sample/content/bb2c23b3c42cc.md、场景引用示例sample/content/636b6aa9b697b.md赞分享桌面应用【免费下载链接】novelWriternovelWriter is an open source plain text editor designed for writing novels项目地址https://gitcode.com/gh_mirrors/no/novelWriter点击查看免费下载相关推荐novelWriter 角色笔记中的 tag 标签语法从示例项目 Jane Smith 到 Tags/References 引用体系实战novelWriter 角色笔记中的 tag 标签语法从示例项目 Jane Smith 到 Tags/References 引用体系实战 导读 本文以 no桌面应用Joplin 使用入门三栏界面、Markdown 笔记与笔记本/标签组织体系Joplin 使用入门三栏界面、Markdown 笔记与笔记本/标签组织体系 本篇基于 Joplin 欢迎笔记本中的核心笔记 1_welcome_to_jop知识管理跨平台插件系统novelWriter 标签与引用系统用 tag 与 pov 元数据语法搭建小说故事图谱novelWriter 标签与引用系统用 tag 与 pov 元数据语法搭建小说故事图谱 novelWriter 是一款面向小说写作的开源纯文本编辑器它桌面应用上一篇Netdata Windows 监控实战指南从安装到告警一步到位下一篇FlutterFire推送通知终极指南10个自动化测试框架实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表