<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans">
	<id>https://notblog.vudrux.site/wiki/Richard_Markup_v2_%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3?action=history&amp;feed=atom</id>
	<title>Richard Markup v2 帮助文档 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://notblog.vudrux.site/wiki/Richard_Markup_v2_%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3?action=history&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="https://notblog.vudrux.site/wiki/Richard_Markup_v2_%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3?action=history"/>
	<updated>2026-06-15T22:00:45Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://notblog.vudrux.site/index.php?title=Richard_Markup_v2_%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3&amp;diff=302&amp;oldid=prev</id>
		<title>DGCK81LNN：​以“{{Richard Markup}}  &#039;&#039;&#039;Richard Markup&#039;&#039;&#039; 是我专为 Richard （[https://space.bilibili.com/300711293 @天府灵山行者]）的互动式小说设计的一种文本...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="https://notblog.vudrux.site/index.php?title=Richard_Markup_v2_%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3&amp;diff=302&amp;oldid=prev"/>
		<updated>2021-09-25T08:54:00Z</updated>

		<summary type="html">&lt;p&gt;以“{{Richard Markup}}  &amp;#039;&amp;#039;&amp;#039;Richard Markup&amp;#039;&amp;#039;&amp;#039; 是我专为 Richard （[https://space.bilibili.com/300711293 @天府灵山行者]）的互动式小说设计的一种文本...”为内容创建页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Richard Markup}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Richard Markup&amp;#039;&amp;#039;&amp;#039; 是我专为 Richard （[https://space.bilibili.com/300711293 @天府灵山行者]）的互动式小说设计的一种文本标记语言，它注重剧情逻辑，而数据存储、用户界面由解释器完成。&lt;br /&gt;
&lt;br /&gt;
Richard Markup &amp;#039;&amp;#039;&amp;#039;v2&amp;#039;&amp;#039;&amp;#039; 抛弃了形似 HTML 的“标签”语法，混合使用缩进和大括号来表示文档结构。&lt;br /&gt;
&lt;br /&gt;
== 文件结构 ==&lt;br /&gt;
&lt;br /&gt;
Richard Markup 存储为&amp;lt;code&amp;gt;.richard&amp;lt;/code&amp;gt;扩展名的文件。&lt;br /&gt;
&lt;br /&gt;
文件的开头是头部信息，它写在&amp;lt;code&amp;gt;&amp;amp;lt;?&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;?&amp;amp;gt;&amp;lt;/code&amp;gt;之间：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;?richard-markup v2 target=soullc charset=gb18030?&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
其中&amp;lt;code&amp;gt;v2&amp;lt;/code&amp;gt;是文件格式的版本号，&amp;lt;code&amp;gt;target=soullc&amp;lt;/code&amp;gt;表示此 Richard Markup 文件是用来在&amp;#039;&amp;#039;灵魂实验室控制台&amp;#039;&amp;#039;运行的剧情文件，&amp;lt;code&amp;gt;charset=gb18030&amp;lt;/code&amp;gt;表示文件使用 GB-18030 字符编码存储。&lt;br /&gt;
&lt;br /&gt;
随后的内容是正文，由&amp;#039;&amp;#039;&amp;#039;文本&amp;#039;&amp;#039;&amp;#039;、&amp;#039;&amp;#039;&amp;#039;元素&amp;#039;&amp;#039;&amp;#039;、&amp;#039;&amp;#039;&amp;#039;注释&amp;#039;&amp;#039;&amp;#039;组成。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;文本&amp;#039;&amp;#039;&amp;#039;是除元素、注释外的文字内容，它会逐字显示在控制台上，一般每显示完一行后用户可以按任意键继续，并可以在逐字显示的过程中按任意键跳过。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;元素&amp;#039;&amp;#039;&amp;#039;会改变文本的行为。每个元素都有一个&amp;#039;&amp;#039;&amp;#039;类型&amp;#039;&amp;#039;&amp;#039;，还可能有若干个&amp;#039;&amp;#039;&amp;#039;属性&amp;#039;&amp;#039;&amp;#039;和一些&amp;#039;&amp;#039;&amp;#039;内容&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
在 Richard Markup v2 中元素有两种写法，&amp;#039;&amp;#039;&amp;#039;块状&amp;#039;&amp;#039;&amp;#039;和&amp;#039;&amp;#039;&amp;#039;行内&amp;#039;&amp;#039;&amp;#039;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;一个块状 s 元素：&lt;br /&gt;
@s: 这是块状 s 元素的内容。&lt;br /&gt;
    这也是。&lt;br /&gt;
    这还是。&lt;br /&gt;
&lt;br /&gt;
一个行内 s 元素：{@s|这是行内 s 元素的内容。}&amp;lt;/pre&amp;gt;&lt;br /&gt;
这里的两个&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;元素分别是块状元素和行内元素。&lt;br /&gt;
&lt;br /&gt;
有一种元素类型――&amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;，它不可以有内容，因此写法也有些不同：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;一个块状 a 元素：&lt;br /&gt;
@a&lt;br /&gt;
&lt;br /&gt;
一个行内 a 元素：{@a}&amp;lt;/pre&amp;gt;&lt;br /&gt;
块状元素的内容可以包含另一个块状元素，而行内元素则不行；而块状和行内元素的内容都可以包含行内元素。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;第一个块状 s 元素：&lt;br /&gt;
@s:&lt;br /&gt;
    这行文本属于第一个块状 s 元素。&lt;br /&gt;
    第二个块状 s 元素在第一个块状 s 元素里面：&lt;br /&gt;
    @s:&lt;br /&gt;
        {@s|{@s|{@s|{@s|禁止套娃！{@a}}}}}&lt;br /&gt;
        这行文本属于第二个块状 s 元素。&lt;br /&gt;
    @a&lt;br /&gt;
    这行文本还是属于第一个块状 s 元素。&amp;lt;/pre&amp;gt;&lt;br /&gt;
如果元素有&amp;#039;&amp;#039;&amp;#039;属性&amp;#039;&amp;#039;&amp;#039;，它们写在元素的类型之后：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@s name=myElement color=red:&lt;br /&gt;
    这个块状 s 元素有一个 name 属性，属性的值为 myElement；&lt;br /&gt;
    还有一个 color 属性，值为 red。&lt;br /&gt;
&lt;br /&gt;
{@s name=anotherElement|这个行内 s 元素有一个 name 属性。}&amp;lt;/pre&amp;gt;&lt;br /&gt;
每个属性的&amp;#039;&amp;#039;&amp;#039;名称&amp;#039;&amp;#039;&amp;#039;和&amp;#039;&amp;#039;&amp;#039;值&amp;#039;&amp;#039;&amp;#039;用等于号分隔；如果值里有空格等引起歧义的字符，要用单引号或双引号围起来。有的属性没有值，这时不用写等号。&lt;br /&gt;
&lt;br /&gt;
块状元素的属性还可以这样写：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@s&lt;br /&gt;
    if=&amp;amp;quot;myVariable == 1&amp;amp;quot;&lt;br /&gt;
    set=&amp;amp;quot;myVariable = 0&amp;amp;quot;&lt;br /&gt;
    name=myElement&lt;br /&gt;
    color=red bgcolor=white&lt;br /&gt;
:&lt;br /&gt;
    这个 s 元素有很多属性。&lt;br /&gt;
&lt;br /&gt;
@a&lt;br /&gt;
    else if=&amp;amp;quot;myVariable == 2&amp;amp;quot;&lt;br /&gt;
    call=myElement&amp;lt;/pre&amp;gt;&lt;br /&gt;
以井号开头的一行是&amp;#039;&amp;#039;&amp;#039;注释&amp;#039;&amp;#039;&amp;#039;，会被 Richard Markup 解释器忽略：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# 这是注释。&amp;lt;/pre&amp;gt;&lt;br /&gt;
注意 Richard Markup 中的注释必须独占一行，不能写在一行正文的末尾。&lt;br /&gt;
&lt;br /&gt;
== 元素和属性串讲 ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;元素 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;元素代表文本片段，它必须有内容。&lt;br /&gt;
&lt;br /&gt;
可以有一个&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;属性，指定片段的名称。也可以指定&amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt;属性来改变片段中文字的颜色。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@s name=welcome:&lt;br /&gt;
    欢迎来到{@s color=#33bfab|灵魂小站}！&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;元素 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;元素代表锚点（Anchor）。上文中已经讲过，它不能有内容。&lt;br /&gt;
&lt;br /&gt;
可以有一个&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;属性指定锚点的名称。另外也可以设置一个&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;属性，值是另一个有内容的元素的&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;，这样来重复使用那个元素。例如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Love with {@s name=richard color=#baf|Richard} under epidemic&lt;br /&gt;
8B班同学{@a call=richard}。&amp;lt;/pre&amp;gt;&lt;br /&gt;
块状&amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;元素应当&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;一个块状元素，行内&amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;元素应当&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;一个行内元素。&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt;元素 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt;元素专门用来定义需要重复使用的子程序（函数）。可以直接在它里面写若干个有&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;属性的元素，然后在其他地方用&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;属性来调用。如果程序在正常按顺序运行时，中途遇到&amp;lt;code&amp;gt;def&amp;lt;/code&amp;gt;元素，会直接跳过。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@def:&lt;br /&gt;
    {@s name=richard color=#baf|Richard}&lt;br /&gt;
    {@s name=sunny color=#daf|Sunny}&lt;br /&gt;
    @s name=separator:&lt;br /&gt;
        Love with {@a call=richard} under epidemic&lt;br /&gt;
        ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== &amp;lt;code&amp;gt;choices&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;choice&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;prompt&amp;lt;/code&amp;gt;元素 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;choices&amp;lt;/code&amp;gt;代表一个互动选择题，它的内容是一个可省略的&amp;lt;code&amp;gt;prompt&amp;lt;/code&amp;gt;和若干个&amp;lt;code&amp;gt;choice&amp;lt;/code&amp;gt;。可以给&amp;lt;code&amp;gt;choices&amp;lt;/code&amp;gt;指定&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;属性。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;prompt&amp;lt;/code&amp;gt;表示选择题的提示文本；&amp;lt;code&amp;gt;choice&amp;lt;/code&amp;gt;表示一个选项，它的内容是选项的文案。可以有一个&amp;lt;code&amp;gt;goto&amp;lt;/code&amp;gt;属性，指定当选项被选定后要跳转到的位置。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Hello, world!&lt;br /&gt;
@choices:&lt;br /&gt;
    {@prompt|Are you...}&lt;br /&gt;
    {@choice call=youare_roy|Roy}&lt;br /&gt;
    {@choice call=youare_richard|Richard}&lt;br /&gt;
    {@choice call=youare_neither|Neither}&lt;br /&gt;
@def:&lt;br /&gt;
    @s name=youare_roy:&lt;br /&gt;
        Hi, {@s color=12|Roy}!&lt;br /&gt;
    @s name=youare_richard:&lt;br /&gt;
        Hello {@s color=15|Richard}!&lt;br /&gt;
    @s name=youare_neither:&lt;br /&gt;
        Hello... whoever you are!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
另外，还可以用&amp;lt;code&amp;gt;script&amp;lt;/code&amp;gt;元素来嵌入JavaScript代码。&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性 ==&lt;br /&gt;
&lt;br /&gt;
除了上文提到的属性之外，还可以给元素添加&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性用来存储和修改变量。变量名可以由英文字母、数字、下划线组成，但不能以数字开头。目前变量只能是浮点数。&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性像这样表示：&amp;lt;code&amp;gt;set=&amp;amp;quot;变量名 = 表达式&amp;amp;quot;&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性单独不会对剧情造成影响，要配合&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;属性使用。这两个属性用来控制元素是否会运行。&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;属性没有值，直接在开始标签中写&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;即可；&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;属性的值是一个表达式，像这样：&amp;lt;code&amp;gt;if=&amp;amp;quot;表达式&amp;amp;quot;&amp;lt;/code&amp;gt;。带&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;的元素必须跟在带&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;的元素后面；可以连用&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;来达到“elif”的效果。&lt;br /&gt;
&lt;br /&gt;
如果给定的条件成立（表达式的结果不是0），元素的内容、上面的&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;属性会正常运行；否则整个元素会被跳过。如果是&amp;lt;code&amp;gt;choice&amp;lt;/code&amp;gt;，则控制的是这个选项是否会显示。&lt;br /&gt;
&lt;br /&gt;
元素上的属性总是按“&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;——&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;——&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;——&amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt;”的顺序执行，无论它们实际出现的顺序。&lt;br /&gt;
&lt;br /&gt;
表达式中可以使用&amp;#039;&amp;#039;&amp;#039;数字字面量&amp;#039;&amp;#039;&amp;#039;（如&amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt;）、其他变量、&amp;#039;&amp;#039;&amp;#039;运算符&amp;#039;&amp;#039;&amp;#039;和圆括号。可用的运算符有：&lt;br /&gt;
&lt;br /&gt;
# 乘除运算符：乘&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;、除&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;、取模&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 加减运算符：加&amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;、减&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 比较运算符：等于&amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;、大于&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;、小于&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;、大于或等于&amp;lt;code&amp;gt;&amp;amp;gt;=&amp;lt;/code&amp;gt;、小于或等于&amp;lt;code&amp;gt;&amp;amp;lt;=&amp;lt;/code&amp;gt;、不等于&amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;；&lt;br /&gt;
# 逻辑运算符：与&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;、或&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
在不加括号的情况下，运算顺序就按以上四类的顺序进行，且&amp;lt;code&amp;gt;and&amp;lt;/code&amp;gt;比&amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt;先进行。&lt;br /&gt;
&lt;br /&gt;
如果一个变量还没有创建，默认它的值是0。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@a set=&amp;amp;quot;crap = 20&amp;amp;quot;;&lt;br /&gt;
@choices:&lt;br /&gt;
    {@prompt:这是一道选择题}&lt;br /&gt;
    {@choice set=&amp;amp;quot;crap = crap + 40&amp;amp;quot;|az}&lt;br /&gt;
    {@choice set=&amp;amp;quot;crap = crap * 4&amp;amp;quot;|az}&lt;br /&gt;
    {@choice set=&amp;amp;quot;crap = crap - 10&amp;amp;quot;|az}&lt;br /&gt;
@s if=&amp;amp;quot;crap &amp;amp;lt; 20&amp;amp;quot;:&lt;br /&gt;
    crap现在小于20&lt;br /&gt;
@s else if=&amp;amp;quot;crap &amp;amp;lt; 60&amp;amp;quot;:&lt;br /&gt;
    crap现在大于或等于20，小于60&lt;br /&gt;
@s else:&lt;br /&gt;
    crap现在大于或等于60&amp;lt;/pre&amp;gt;&lt;br /&gt;
建议使用一个&amp;lt;code&amp;gt;_choice&amp;lt;/code&amp;gt;变量来存储选择的选项，代替&amp;lt;code&amp;gt;goto&amp;lt;/code&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;@choices:&lt;br /&gt;
    {@prompt:Are you...}&lt;br /&gt;
    {@choice set=&amp;amp;quot;_choice = 1&amp;amp;quot;|Roy}&lt;br /&gt;
    {@choice set=&amp;amp;quot;_choice = 2&amp;amp;quot;|Richard}&lt;br /&gt;
    {@choice set=&amp;amp;quot;_choice = 3&amp;amp;quot;|Neither}&lt;br /&gt;
@s if=&amp;amp;quot;_choice == 1&amp;amp;quot;:&lt;br /&gt;
    Hi, {@s color=12|Roy}!&lt;br /&gt;
@s else if=&amp;amp;quot;_choice == 2&amp;amp;quot;:&lt;br /&gt;
    Hello {@s color=15|Richard}!&lt;br /&gt;
@s else:&lt;br /&gt;
    Hello... whoever you are!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
原文发布于2021年1月12日&lt;br /&gt;
[[分类:存档]]&lt;/div&gt;</summary>
		<author><name>DGCK81LNN</name></author>
	</entry>
</feed>