Skip to content

维基语法 ​

ProjectWikit 站点的页面使用维基语法编写,即 Wikidot 所用的标记语言。为 Wikidot 编写的页面在此处的显示效果相同。

本文档说明渲染器支持的全部语法。模块([[module ...]])另见模块。如需在不保存页面的情况下试写维基语法,可使用编辑器的预览,或在服务器上执行 pwikit render(参见命令行)。

凡 Markdown 能够呈现的示例,其后均附有显示效果。

基本规则 ​

块 ​

大多数语法都是写在双方括号中的块:

text
[[name argument="value"]]
content
[[/name]]
  • 块名不区分大小写:[[DIV]] 与 [[div]] 相同。方括号内允许有空格:[[ div ]] … [[/ div ]]。
  • 不含内容的块(如 [[image]]、[[toc]])没有结束标签。
  • 参数值必须放在双引号中:class="note"。未加引号的参数会被忽略。值中的双引号写作 \"。值可以延续到下一行,其中的换行会被去除。
  • 部分块在块名之后直接接收一个值,可代替具名参数,或写在具名参数之前:[[size 150%]]、[[image photo.png width="200"]]。
  • 块名后加下划线会改变块内换行的处理方式,例如 [[div_]](参见容器与属性)。结束标签不带下划线:[[/div]]。
  • 块名前加星号表示变体,例如 [[*user name]](显示头像)或 [[*a]](在新标签页中打开)。
  • 始终未闭合的块按普通文本显示。

如需在内容不被解析的块中写入同名的结束标签,可在外层块名后用冒号加上标识符,并以相同的标识符闭合:

text
[[code:example]]
[[code]]
Sample
[[/code]]
[[/code:example]]

效果:

[[code]]
Sample
[[/code]]

受限的场合 ​

场合不可用的语法
页面本文档中的全部语法均可使用
论坛帖子[[toc]]、[[include]]、[[module]]、[[button]]、[[gallery]]、[[input]]…[[/input]]、附件图片、[[#expr]]、[[#ifexpr]]、[[ifexpr]]、脚本变量与数学公式
个人简介所有 [[...]] 块(包括 [[$ … $]])以及 {@name}。文本格式、列表和链接可以使用。

文本格式 ​

语法效果
**bold**粗体
//italic//斜体
__underline__下划线
--strikethrough--删除线
{{monospace}}等宽字体
^^superscript^^上标
,,subscript,,下标
##red|colored text##红色文字
##ff8800|colored text###ff8800 色文字
  • 标记符号与文字之间不能有空格:** bold ** 不会显示为粗体。
  • 格式可以跨越同一段落中的多行,但不能跨越空行。
  • 格式可以嵌套,也可以包含其他元素,包括块。
  • 颜色可以是任意 CSS 颜色,例如 blue 或 rgba(255, 127, 0, 0.5)。十六进制颜色可省略 #。
  • {{...}} 仅改变字体,其中的标记仍会被解析;如需原样显示文本,请使用 @@...@@。

上述样式也有对应的块写法,块写法还可以接收属性:

样式块名
粗体[[b]]、[[bold]]、[[strong]]
斜体[[i]]、[[italics]]、[[em]]、[[emphasis]]
下划线[[u]]、[[underline]]
删除线[[s]]、[[strikethrough]]
删除的文字[[del]]、[[deletion]]
插入的文字[[ins]]、[[insertion]]
上标[[sup]]、[[super]]、[[superscript]]
下标[[sub]]、[[subscript]]
等宽字体[[tt]]、[[mono]]、[[monospace]]
高亮[[mark]]、[[highlight]]
text
Some [[b]]bold[[/b]] and [[mark class="key"]]highlighted[[/mark]] text.
This is [[size 150%]]larger[[/size]] and this is [[size 0.8em]]smaller[[/size]].

[[size]] 接收任意 CSS 字号,不接收其他参数。

段落与换行 ​

  • 段落内的单个换行显示为换行。
  • 空行开始新段落。连续多个空行视为一个。
  • 行尾的下划线若与前文以空格分隔( _),则强制换行,可用于列表项和表格单元格内。仅含 _ 的行会增加一个空行:
text
First line
_
_
Two empty lines above this one.

效果:

First line


Two empty lines above this one.

  • 行尾的反斜杠会将下一行直接接到本行,不产生换行。此规则在任何位置都生效,包括 [[code]] 内。
  • 仅含空元素(如 @@@@ 或 [[span]][[/span]])的行显示为空行,且不开始新段落。
  • [[lines 3]] 插入指定数量的换行,数量为 1 至 100。[[newlines 3]] 与之相同。
  • [[p]]...[[/p]](或 [[paragraph]])将属性应用到其中的段落:
text
[[p style="color: red"]]
A red paragraph.
[[/p]]
  • 由三个或更多连字符组成的行(---)为水平分隔线。
  • 单独一行的 ~~~ 清除两侧的浮动元素;~~~< 清除左侧,~~~> 清除右侧。

标题与目录 ​

text
+ Heading level 1
++ Heading level 2
+++ Heading level 3
++++ Heading level 4
+++++ Heading level 5
++++++ Heading level 6
++* Heading left out of the table of contents
  • 标题必须从行首开始,加号之后必须有空格。
  • 标题只占一行,其中可以使用文本格式和行内块。

[[toc]] 插入列出页面标题的目录。[[f<toc]] 和 [[f>toc]] 使目录浮动于左侧或右侧,文字环绕其周围。

页面含有目录时,标题按顺序获得锚点 toc0、toc1、toc2 …,带 * 的标题不计入。可用 [#toc1 Second heading] 链接到对应标题。

链接与锚点 ​

页面链接 ​

语法效果
[[[page-name]]]以页面名称为文字的链接
[[[page-name|]]]以页面标题为文字的链接;页面不存在时以名称为文字
[[[page-name|Label]]]使用自定义文字的链接
[[[category:page-name]]]指向分类中页面的链接,文字为 page-name
[[[page-name#anchor|Label]]]指向该页面某个锚点的链接
[[[*page-name|Label]]]在新标签页中打开的链接
  • 名称按页面地址的规则规范化:[[[Some Page Title]]] 指向 /some-page-title。
  • 指向尚不存在的页面的链接带有 newpage 类,主题通常以不同颜色显示。
  • 页面链接会被记录,目标页面的 反向链接 中会列出本页。
  • 链接文字不能换行。

外部链接 ​

语法效果
[https://example.com Label]指向某个地址的链接
[*https://example.com Label]同上,在新标签页中打开
[/some/path Label]指向本站某个地址的链接
[[[https://example.com|Label]]]指向某个地址的链接,三方括号写法
https://example.com以 http://、https:// 或 ftp:// 开头的地址自动成为链接
  • 单方括号写法中,地址不能含空格,链接文字可以含空格。
  • 如需避免地址自动成为链接,请将其写为原样文本:@@https://example.com@@。
  • 以 javascript: 开头的地址不会成为链接。唯一的例外是 javascript:;,即不执行任何操作的链接。

Interwiki 链接 ​

三方括号链接的目标以 ! 加已知前缀开头时,指向其他网站:

text
[[[!wikipedia:Wiki|Wiki on Wikipedia]]]
[[[!google:wikitext]]]

效果:

Wiki on Wikipedia
wikitext

前缀目标
wikipedia、wp维基百科条目
commons维基共享资源页面
googleGoogle 搜索
duckduckgo、ddgDuckDuckGo 搜索
dictionaryDictionary.com 词条
thesaurusThesaurus.com 词条

目标中的空格会在地址中编码。

锚点 ​

语法效果
[[# section-name]]创建名为 section-name 的锚点。# 之后的空格不可省略。
[#section-name Label]指向本页锚点的链接
[# Label]不跳转到任何位置的链接,供脚本或样式使用

[[a]] 块 ​

[[a]](或 [[anchor]])是内容可以包含任意标记的链接,并可设置属性:

text
[[a href="/some-page" class="button-link"]]**Open** the page[[/a]]
[[*a href="https://example.com"]]Opens in a new tab[[/a]]

效果:

Open the page
Opens in a new tab

[[a_]] 会去除内容开头和结尾的换行。

列表 ​

text
* Bulleted item
* Another item
 # Numbered item inside it
 # Second numbered item
* Item with a line break _
continued on the next line

效果:

  • Bulleted item

  • Another item

    1. Numbered item inside it
    2. Second numbered item
  • Item with a line break
    continued on the next line

  • 位于行首并后接空格的 * 开始一个无序列表项,# 开始一个有序列表项。

  • 行首的空格数决定嵌套层级。无序列表与有序列表可以相互嵌套。

  • 如需在新行继续列表项,请在行尾写 _,或将文字包裹在 [[span]]...[[/span]] 中。

定义列表:

text
: Term : Definition
: Another term : Its definition

效果:

Term
Definition
Another term
Its definition

列表也可以写成块,块写法可以接收属性:

text
[[ul class="steps"]]
[[li]]First[[/li]]
[[li]]Second
[[ol]]
[[li]]Nested[[/li]]
[[/ol]]
[[/li]]
[[/ul]]

效果:

  • First
  • Second
    1. Nested

[[ul]] 为无序列表,[[ol]] 为有序列表,[[li]] 为列表项。

表格 ​

text
||~ Heading ||~ Heading ||
|| Cell || Cell ||
||> Right-aligned ||= Centered ||
|||| Cell spanning two columns ||
|| First line _
second line || Cell ||

效果:

HeadingHeading
CellCell
Right-alignedCentered
Cell spanning two columns
First line
second line
Cell
单元格开头含义
||普通单元格
||~表头单元格
||>右对齐单元格
||=居中单元格
||||横跨两列的单元格;每多一个 || 多跨一列

每行从新的一行开始,以 || 结束。单元格内换行请使用 _。纵向跨行的单元格需要使用块写法:

text
[[table class="wiki-content-table"]]
[[row]]
[[hcell]]Heading 1[[/hcell]]
[[hcell]]Heading 2[[/hcell]]
[[cell rowspan="2"]]Two rows high[[/cell]]
[[/row]]
[[row]]
[[cell colspan="2"]]Two columns wide[[/cell]]
[[/row]]
[[/table]]

效果:

Heading 1Heading 2Two rows high
Two columns wide

[[table]] 中只能包含 [[row]] 块,[[row]] 中只能包含 [[cell]] 和 [[hcell]](表头)块。这四种块均可接收属性。[[table]] 内的内容不划分段落;如需在单元格内分段,请用 [[div]] 包裹。

引用 ​

text
> First level
>> Second level
> Back to the first level

效果:

First level

Second level

Back to the first level

[[blockquote]]...[[/blockquote]](或 [[quote]])效果相同,并可接收属性:

text
[[blockquote]]
Quoted text.
[[/blockquote]]

效果:

Quoted text.

对齐与浮动 ​

段落开头的 = 使整个段落居中:

text
= This paragraph is centered,
including this line.

效果:

This paragraph is centered,
including this line.

对齐块:

块对齐方式
[[<]]...[[/<]]左对齐
[[>]]...[[/>]]右对齐
[[=]]...[[/=]]居中
[[==]]...[[/==]]两端对齐

如需阻止文字环绕浮动的图片或块,请参见段落与换行中的 ~~~。

容器与属性 ​

[[div]] 是通用的块级容器,[[span]] 是通用的行内容器,二者主要用于添加类和样式:

text
[[div class="notice" style="border: 1px solid #ccc; padding: 1em"]]
First paragraph.

Second paragraph.
[[/div]]

Text with [[span style="color: green"]]a green part[[/span]].
  • [[div]] 将内容划分为段落。[[div_]] 不划分段落,其中的空行显示为换行。
  • [[span_]] 会去除内容开头和结尾的换行。

允许的属性 ​

可接收属性的块会将属性输出到页面中。仅保留以下属性,其余属性(如 onclick)一律去除:

accept、align、alt、autocapitalize、autoplay、background、bgcolor、border、buffered、checked、cite、class、cols、colspan、contenteditable、controls、coords、datetime、decoding、default、dir、dirname、disabled、download、draggable、for、form、frameborder、headers、height、hidden、high、href、hreflang、id、inputmode、ismap、itemprop、kind、label、lang、list、loop、low、max、maxlength、min、minlength、multiple、muted、name、optimum、pattern、placeholder、poster、preload、readonly、required、reversed、role、rows、rowspan、scope、scrolling、selected、shape、size、sizes、span、spellcheck、src、srclang、srcset、start、step、style、tabindex、target、title、translate、type、usemap、value、width、wrap,以及所有以 data- 或 aria- 开头的属性。

  • id 的值会加上前缀 u-:[[div id="intro"]] 生成的 id 为 u-intro,因此应使用 [#u-intro Label] 链接到它。用 [[# name]] 创建的锚点不加前缀。
  • href 的值按链接地址的规则检查。
  • autoplay、checked、controls、default、disabled、hidden、ismap、loop、multiple、muted、readonly、required、reversed 和 selected 为开关属性:true、t、1 或 yes 表示启用,false、f、0 或 no 表示省略该属性。

原样文本、代码与注释 ​

语法效果
@@**not bold**@@按原样显示文字,不解析其中的标记
@@@@不显示任何内容(空的原样文本)
@@@@@@@@
@<&copy; &mdash;>@HTML 实体显示为对应字符;其中的其他文字按原样显示
[[char copy]]、[[char &mdash;]]、[[char #x2603]]按实体名或编号插入一个字符。[[character]] 与之相同。
[!-- comment --]不显示任何内容。注释可以跨越多行。

原样文本中不能含有空行。

代码块 ​

text
[[code type="css"]]
#page-title { color: purple; }
[[/code]]

效果:

css
#page-title { color: purple; }
  • [[code]] 的内容按原样显示,不被解析。
  • type 指定语法高亮所用的语言,例如 css、html、javascript(js)、python、go、sql、bash、json 或 yaml。未指定 type 或语言无法识别时,代码不加高亮显示。
  • 页面上的每个代码块还可以通过 /local--code/<page-name>/<n> 以纯文件形式访问,其中 n 为该代码块在页面源代码中的序号,从 1 开始。type 为 html、css、javascript(js)或 xml 的代码块以对应的内容类型返回,因此可作为样式表或脚本加载。这些文件中的页面变量不会被替换。

排版替换 ​

以下替换自动进行:

语法效果
``text''“text”
`text'‘text’
,,text''„text”
--(不属于 --strikethrough-- 时)—
<< 和 >>« 和 »

引号替换先于其他一切处理,因此在 @@...@@ 和 [[code]] 中同样生效。破折号以及 « 和 » 在原样文本和代码中不会替换。

折叠块 ​

text
[[collapsible show="+ Show details" hide="- Hide details"]]
Hidden until the reader opens it.
[[/collapsible]]

效果:

+ Show details

Hidden until the reader opens it.

参数含义
show折叠时显示的链接文字。默认值取决于界面语言。
hide展开时显示的链接文字
folded开关;设为 no 时默认展开。默认值:yes。
hideLocation展开后收起链接的位置:top(默认)、bottom、both 或 neither(也可写 none)
align链接文字的对齐方式:left、right、center 或 justify

折叠块可以嵌套。

选项卡 ​

text
[[tabview]]
[[tab First tab]]
Content of the first tab.
[[/tab]]
[[tab title="Second tab"]]
Content of the second tab.
[[/tab]]
[[/tabview]]
  • [[tabs]] 与 [[tabview]] 相同。
  • 选项卡名称写在块名之后,或以 title="..." 指定。
  • [[tabview]] 中只能包含 [[tab]] 块;含有其他内容时,整个块按普通文本显示。

脚注 ​

text
The first recorded use[[footnote]]Source: the 1998 archive.[[/footnote]] was much later.

效果:

The first recorded use[^demo-footnote] was much later.

[^demo-footnote]: Source: the 1998 archive.

  • 脚注按出现顺序编号,脚注列表显示在页面末尾。
  • [[footnoteblock]] 使脚注列表显示在其所在位置。title="..." 设置列表标题;hide="true" 隐藏列表,仅保留编号引用。
  • 脚注中不能再包含脚注。

图片与图库 ​

图片 ​

语法图片来源
[[image photo.png]]本页的附件
[[image other-page/photo.png]]本站其他页面的附件
[[image https://example.com/photo.png]]指定地址的图片
块名位置
[[image]]原位显示
[[=image]]居中
[[<image]]左对齐
[[>image]]右对齐
[[f<image]]浮动于左侧,文字环绕
[[f>image]]浮动于右侧,文字环绕
text
[[f>image diagram.png width="240" link="details"]]
[[=image https://example.com/banner.png link="*https://example.com" style="border: 1px solid #000"]]
  • link 使图片成为指向某个页面名称或地址的链接。目标前加 * 则在新标签页中打开。
  • width、height、class、style、title 等属性会应用到图片上。
  • 图片总是自成一块,不会被放入段落中。
  • 附件通过页面选项中的 附件 上传到页面。

图库 ​

[[gallery]] 显示当前页面所有图片附件的缩略图。点击缩略图会在页面上方显示放大的图片。

text
[[gallery]]
[[gallery size="small"]]
size缩略图
square75 × 75 像素,裁剪为正方形
thumbnail长边 100 像素
small长边 240 像素
medium(默认)长边 500 像素
  • 使用其他尺寸时,图库位置显示错误信息。size 是唯一的参数。
  • [[gallery]] 是 [[module Gallery]] 的简写。简写在页面源代码中的任何位置都会被替换,包括 [[code]] 和 @@...@@ 内。

嵌入内容 ​

框架 ​

[[iframe]] 嵌入其他网页:

text
[[iframe https://example.com/widget width="100%" height="300" frameborder="0"]]

地址写在块名之后,按链接地址的规则检查。属性会应用到框架上。

嵌入代码 ​

[[embed]] 接收从视频或地图服务复制的嵌入代码,其中必须恰好包含一个 <iframe> 标签:

text
[[embed]]
<iframe src="https://player.example.com/video/123" width="640" height="360" allowfullscreen></iframe>
[[/embed]]
  • 框架直接放入页面中,因此站点样式可以控制其尺寸。
  • src 地址必须以 https://、http:// 或 // 开头。其他属性若在允许的属性中则予以保留。
  • 内容不是单个 <iframe> 标签,或地址以其他方式开头时,整个块按普通文本显示。

HTML 块 ​

[[html]] 在独立的框架中运行自行编写的 HTML、CSS 和 JavaScript,框架高度随内容自动调整:

text
[[html]]
<button onclick="document.body.style.background='gold'">Try me</button>
[[/html]]
  • 框架与站点隔离:其中的脚本无法读取站点的 Cookie 或本地存储。
  • 设置 external="true" 时,框架从站点的文件域名加载,可以使用 Cookie 和本地存储。其内容始终取自页面最近保存的版本,因此预览时不会显示未保存的更改,查看旧版本时也不会显示旧版本的内容。

日期 ​

[[date]] 显示一个时间点,并换算为读者浏览器所在的时区:

text
[[date 1700000000]]
[[date 2024-02-18T08:30:00 format="%Y-%m-%d %H:%M"]]
[[date 1700000000 format="%d %b %Y|agohover"]]
值含义
1700000000以秒为单位的 Unix 时间戳
2024-02-18 或 2024/02/18日期
2024-02-18T08:30:00UTC 日期与时间
2024-02-18T08:30:00+08:00带 UTC 偏移的日期与时间。使用此形式时请指定 format。
now 或 .页面显示时的时间

未指定 format 时,日期显示为 %m.%d.%Y,日期与时间显示为 %m.%d.%Y %H:%M。

格式代码含义
%Y / %y年份,四位 / 两位
%m月份,两位
%b(或 %h)界面语言中的月份名称
%d / %e日,两位 / 以空格补位
%a界面语言中的星期名称
%u / %w星期序号,周一为 1 的 1–7 / 周日为 0 的 0–6
%H / %k小时 00–23 / 以空格补位
%I / %l小时 01–12 / 以空格补位
%p / %PAM/PM / am/pm
%M分钟
%S秒
%R等同于 %H:%M
%sUnix 时间戳
%O与该时间相隔的时长,不带“前”,如 5分钟。未来的时间同样适用

可在格式末尾以 | 添加修饰符:

修饰符效果
|ago显示相隔的时长,不带“前”;鼠标悬停时显示格式化的日期
|agohover显示格式化的日期;鼠标悬停时显示相隔的时长,不带“前”

用户 ​

语法效果
[[user name]]指向用户个人资料的链接
[[*user name]]同上,并显示用户头像
[[user wd:Name]]从 Wikidot 导入的账号,按其 Wikidot 用户名查找
[[user external:name]]指向 wikidot.com 上该用户名个人资料的链接,不查找本地账号

名称会与账号名和显示名称进行匹配。没有匹配的账号时显示“用户 '…' 不存在”。

注音标注 ​

text
[[ruby]]漢字[[rt]]かんじ[[/rt]][[/ruby]]
[[rb 漢字|かんじ]]

[[rt]](或 [[rubytext]])在 [[ruby]] 中写入注音。[[rb base|annotation]](或 [[ruby2]])是简写形式。[[ruby]] 和 [[rt]] 可接收属性。

表单与字段 ​

打开页面的表单 ​

[[form]] 收集输入值,并打开本站某个页面,输入值附在该页面的地址中:

text
[[form target="search-results"]]
[[input type="text" name="q" placeholder="Search"]]
[[input type="submit" value="Go"]]
[[/form]]

提交表单后打开 /search-results/q/<输入的文字>。在该页面中,输入值可通过 %%path|q%% 获取(参见 URL 参数)。

  • target 为页面名称,而非地址。target="." 表示当前页面。
  • 不带结束标签的 [[input]] 是单个表单控件,可接收 type、name、value、placeholder、checked 等属性,也可以在表单之外使用。
  • 若单个控件之后页面中的任何位置出现 [[/input]],该控件会被视为字段列表的开头,因此请勿在同一页面中同时使用这两种写法。
  • [[form_]] 不将内容划分为段落。

字段列表 ​

带结束标签的 [[input]]...[[/input]] 以列表形式编写,显示一张带标签的字段表:

text
[[input]]
# nickname
* title: Nickname
* hint: Shown next to your posts
# theme
* type: select
* options: light: Light
* options: dark: Dark
* default: dark
# newsletter
* type: checkbox
* default: yes
[[/input]]
  • 以 # 开头的行开始一个字段并给出字段名。
  • 其下以 * 开头的行设置字段属性:
属性含义
title标签;未设置时使用字段名
typetext(默认)、textarea、select 或 checkbox
size文本字段的宽度,以字符计。默认值:30。
default初始值。复选框的值为 1、yes、true 或 checked 时处于勾选状态。
hint显示在字段下方的说明文字
optionsselect 字段的一个选项,写作 key: Label;每个选项各写一行
  • 字段仅用于显示,该块本身没有提交按钮。
  • 未定义任何字段时显示“[[input]] 没有定义任何字段”。
  • [[input]]...[[/input]] 是 [[module Input]] 的简写。简写在页面源代码中的任何位置都会被替换,包括 [[code]] 和 @@...@@ 内。

按钮 ​

[[button]] 显示一个作用于当前页面的按钮。按钮留在文字行内,因此多个按钮可以并排显示。

text
[[button edit]] [[button edit text="Edit this page"]]
[[button set-tags +reviewed -needs-review text="Mark as reviewed"]]
类型作用
edit打开编辑器,与 编辑 按钮相同。在尚不存在的页面上打开创建该页面的编辑器。
set-tags添加以 + 标注的标签、移除以 - 标注的标签,然后重新加载页面。未加符号的标签会被添加。
  • text 设置按钮文字。未设置时,按钮文字为类型名,如 edit。
  • 修改标签所需的权限与使用 标签 按钮修改时相同;权限不足时显示错误信息。
  • 使用其他类型时显示“不支持的按钮类型:…”。
  • [[button ...]] 是 [[module Button type="..."]] 的简写。简写在页面源代码中的任何位置都会被替换,包括 [[code]] 和 @@...@@ 内。每个按钮都带有 wiki-standalone-button 类和表示类型的 data-button-type 属性,可用于设置样式。

插入页面 ​

[[include]] 在页面解析之前,将另一个页面的源代码插入到所在位置:

text
[[include component:infobox
  title=Example |
  color=red
]]

component:infobox 的内容:

text
[[div class="infobox" style="border-color: {$color}"]]
**{$title}**
[[/div]]
  • [[include 必须位于行首,]] 必须位于行尾。该块可以跨越多行。
  • 参数为以 | 分隔的 name=value。值不加引号,两侧的空格会被去除。
  • 被插入页面中的每个 {$name} 都会被替换为同名参数的值。没有对应参数的 {$name} 保持原样。
  • 同一参数出现两次时,以第一个值为准。
  • [[include :site:page-name]] 按站点标识名插入同一 ProjectWikit 实例中另一个站点的页面。仅当读者在该站点上有权查看该页面时才会插入。
  • 被插入的页面可以继续插入其他页面,最多 25 层。超出限制时显示包含循环的错误信息。
  • 插入不存在的页面时,显示错误信息及创建该页面的链接。
  • 由于源代码在页面解析之前插入,一个块可以在一个被插入的页面中开始,在另一个被插入的页面或插入方页面中结束。
  • 被插入的页面可以通过 %%this|name%% 获取当前显示页面的变量(参见页面变量)。

默认值 ​

值为自身占位符的参数(如 color={$color})在占位符未被替换时会被跳过。组件在插入另一个组件时,可以借此传递参数并提供默认值:

text
[[include component:infobox-inner
  color={$color} |
  color=gray
]]

将以上内容写在 component:infobox 中,即可传递插入方页面设置的 color;插入方未设置时使用 gray。

插入时排除的内容 ​

text
[[noinclude]]
Documentation shown only on the component page itself.
[[/noinclude]]

[[noinclude]] 与 [[/noinclude]] 之间的内容在页面本身正常显示,被插入到其他页面时则被去除。两个标签都必须单独占一行。

页面变量 ​

页面变量写作 %%name%%,在页面解析之前被替换为对应的值。没有值的变量保持原样。

变量的适用范围 ​

场合可用的变量
分类模板:category:_template,主分类为 _template全部页面变量,取值为当前显示的页面
[[module ListPages]] 的内容全部页面变量,取值为列出的每个页面。参见模块。
缺失页面模板:category:_404 或 _404%%404_page_name%%,以及所请求页面的 %%name%%、%%category%% 和 %%fullname%%
任意页面及其插入的页面%%this|name%%,取值为当前显示的页面
页面及其分类模板URL 参数

替换针对源代码文本进行,因此在 [[code]] 和 @@...@@ 中同样生效。如需原样显示变量,可用空的原样文本将其断开:%%ti@@@@tle%% 显示为 %%title%%。

常用变量 ​

变量值
%%name%%不含分类的页面名称
%%category%%分类
%%fullname%%完整页面名称
%%title%%标题
%%title_linked%%以标题为文字、指向该页面的链接
%%content%%页面源代码
%%content{n}%%源代码的第 n 段(参见内容分段)
%%created_at%%、%%updated_at%%创建时间与最后编辑时间
%%created_by%%、%%created_by_linked%%作者,以文字或用户链接显示
%%rating%%、%%rating_votes%%评分与投票数
%%tags%%、%%tags_linked%%标签,以文字或链接显示
%%site_title%%站点标题

包括父页面、讨论、评分和站点变量在内的完整列表,参见模块中 ListPages 一节。这些变量在分类模板中同样可用。

%%this|name%% 接受相同的变量名,不区分大小写,但 index、total、日期格式与链接前缀除外。例如,组件中的 %%this|title%% 显示当前显示页面的标题。

分类模板 ​

分类中名为 _template 的页面(如 news:_template)会代替该分类中每个页面自身的源代码进行显示。在需要显示页面源代码的位置写入 %%content%%:

text
[[div class="news-header"]]
+ %%title%%
Published %%created_at%% by %%created_by_linked%%
[[/div]]

%%content%%

主分类的模板为页面 _template。

缺失页面模板 ​

读者访问不存在的页面时,若存在 category:_404 则显示该页面,否则显示 _404,以代替默认提示。仅当读者有权查看该模板时才会使用。%%404_page_name%% 会被替换为所请求的完整名称:

text
The page **%%404_page_name%%** does not exist yet.
[[button edit text="Create it"]]

内容分段 ​

页面源代码可以用由四个或更多等号组成的行划分为多段:

text
Summary text.
====
Full text.

在模板中,%%content{1}%% 为 Summary text.,%%content{2}%% 为 Full text.。不存在的分段为空值。

数据表单分类 ​

分类模板可以用不带参数的 [[form]] 块定义字段。此后该分类中的页面存储字段值,而不是维基语法:

text
[[form]]
fields:
  status:
    type: select
    label: Status
    values:
      open: Open
      done: "**Done**"
    default: open
  summary:
    type: wiki
    label: Summary
    hint: Wikitext allowed
[[/form]]

该分类中的页面每个字段写一行 field: value:

text
status: done
summary: Finished in //March//.
字段属性含义
typetext(默认)、wiki、select、checkbox、static 或 hidden
label标签,可通过 %%form_label{field}%% 获取
hint说明文字,可通过 %%form_hint{field}%% 获取
default页面未设置该字段时使用的值
valuesselect 字段的选项,写作 key: Label
valuestatic 或 hidden 字段的固定值
变量值
%%form_data{field}%%用于显示的值。wiki 与 static 字段的值以及 select 选项的标签按维基语法解析;其他值按原样显示。
%%form_raw{field}%%存储的值,未设置时为默认值
%%form_label{field}%%字段的标签
%%form_hint{field}%%字段的说明文字

字段名不区分大小写。[[form]] 定义本身不会显示。

URL 参数 ​

页面地址可以在页面名称之后附带参数:

text
/page-name/key/value/other-key/other-value

在页面及其分类模板中:

变量值
%%path|key%%参数值原样插入。参数缺失或没有值时,变量保持原样。
%%path_expr|key%%带引号的字符串形式 "value",可安全地用作参数值。参数缺失时为 "%%path_expr|key%%";只有键没有值时为 null。
%%path_url|key%%经过编码、可用于地址的值。只有键没有值时为空值;参数缺失时为经过编码的变量本身。
%%canonical_url%%页面完整的 https:// 地址,包括参数

键不区分大小写,但变量前缀必须小写。部分模块也会读取地址参数,参见模块。

条件内容 ​

标签与分类 ​

[[iftags]] 仅在页面标签满足条件时显示其内容:

text
[[iftags +guide -draft]]
This guide is published.
[[/iftags]]
条件含义
+tag页面必须带有此标签
-tag页面不得带有此标签
tag页面必须至少带有以此方式列出的标签之一

不显示的内容会被直接跳过而不解析,因此不要求其格式完整:其中可以包含在别处开始或结束的标签。

[[ifcategory]] 按页面所属分类进行同样的判断。无论是否显示,其内容都必须格式完整。

text
[[ifcategory news blog]]
Shown in the news and blog categories.
[[/ifcategory]]
[[ifcategory -_default]]
Shown everywhere except the main category.
[[/ifcategory]]

分类前加 + 或不加符号,均表示页面必须属于所列分类之一;加 - 表示排除该分类。这两种块在被插入的页面和模板中最为有用,因为同一份源代码会显示在不同页面上。

取值判断 ​

[[#if]] 根据某个值(通常是插入参数或变量)在两段文字之间选择:

text
[[#if {$title} | Title: {$title} | No title given]]

[[if %%path|mode%%]]
A mode was chosen.
[[else]]
No mode was chosen.
[[/if]]

值为 false 或 null(不区分大小写),或为未被替换的占位符(如 {$title} 或 %%path|mode%%)时视为假。其他任何值(包括空值)均视为真。第二段文字和 [[else]] 均可省略。

表达式 ​

[[#ifexpr]] 和 [[ifexpr]] 通过计算表达式进行判断;[[#expr]] 显示表达式的计算结果:

text
[[#ifexpr {$votes} >= 10 | Popular | Not many votes yet]]

[[ifexpr {$count} > 0]]
{$count} items.
[[else]]
Empty.
[[/ifexpr]]

Total: [[#expr {$price} * {$quantity}]]

结果为 0、0.0、空字符串,或表达式无法计算时,视为假。比较结果为真时显示为 1,为假时显示为 0。

元素语法
数字12、-3、2.5、1e3
字符串"text" 或 'text';+ 连接两个字符串,"ab" * 3 重复字符串
常量True、False、None
算术运算+、-、*、/、^(按位异或)、括号
比较运算==、!=、<、<=、>、>=;可连续比较,如 1 < {$n} < 10
逻辑运算and、or
函数结果
min(a, b, ...)、max(a, b, ...)最小值或最大值
abs(x)绝对值
round(x)、round(x, digits)四舍五入的值;恰为一半时取偶数
ceil(x)、floor(x)向上或向下取整
div(a, b)整数除法,向下取整
sqrt(x)、pow(x, y)平方根、幂
random(a, b)a 到 b 之间的随机整数,包含两端;可使用任意 64 位整数
len(s)字符数
lower(s)、upper(s)转为小写或大写
substr(s, start)、substr(s, start, end)字符串的一部分,位置从 0 开始;负数位置从末尾倒数
unset(x)x 为未被替换的变量(如 "%%path|page%%")时为真

文字值请加引号,以便按字符串比较:[[#ifexpr "{$type}" == "news" | ... | ...]]。

超过 16 KB 的表达式无法计算。通过 * 或 + 得到的字符串结果超过 64 KB 时,表达式同样无法计算。

脚本变量 ​

脚本变量在页面渲染过程中保存值:

text
[[declare count 0]]
[[*set count {@count} + 1]]
[[*set count {@count} + 1]]
Count: {@count}

效果:

Count: 2

语法含义
[[declare name value]]在当前作用域中创建变量。在 [[scope]] 内使用时,会在该作用域结束前遮蔽同名的外部变量
[[set name value]]变量已存在时修改其值,否则在当前作用域中创建该变量
[[*declare name expression]]、[[*set name expression]]先将值作为表达式计算,再保存结果
{@name}插入变量的值。变量不存在时不插入任何内容
[[scope]]…[[/scope]]在其中创建的变量在 [[/scope]] 之后不再存在。在其中对外部变量所做的修改会保留
  • declare 或 set 之后的第一个词为变量名,其余部分为值,值不可为空。{@name} 只识别由字母、数字、- 和 _ 组成的变量名。
  • 变量在设置它的块之后可用。值中可以包含 {@other},读取该块时即被替换。
  • 块参数、模块正文、[[#expr]]、[[#if]]、[[#ifexpr]] 和 [[ifexpr]] 中的 {@name} 同样会被替换。
  • {@name} 与 {$name} 不同,后者是插入页面的参数。
  • 值超过 1,024 字节,或会使当前作用域中的变量名与值合计超过 16 KB 时,该 [[declare]] 或 [[set]] 不起作用,并以文本形式显示。
  • 一个页面中插入的值累计达到 1 MB 后,之后的 {@name} 不再插入任何内容。
  • 论坛帖子和个人简介中不能使用脚本变量,其中的这些块和 {@name} 以文本形式显示。

数学公式 ​

[[math]] 将以 LaTeX 编写的公式显示为带编号的公式。公式按其在页面中出现的顺序编号为 (1)、(2)……。math 之后的名称为公式命名,供 [[eref]] 引用。[[$ … $]] 在一行文字中插入公式:

text
[[math pythagoras]]
a^2 + b^2 = c^2
[[/math]]

By ([[eref pythagoras]]), the hypotenuse is [[$ \sqrt{a^2 + b^2} $]].

效果:

$$a^2 + b^2 = c^2 \tag{1}$$

By (1), the hypotenuse is $\sqrt{a^2 + b^2}$.

  • [[eref name]] 显示指定名称的公式的编号,并链接到该公式。编号两侧的括号需自行书写。多个公式同名时,使用第一个。页面中没有公式使用该名称时,显示 ??。
  • [[$ … $]] 必须写在同一行内。
  • 可以使用 align、matrix、pmatrix、bmatrix 和 vmatrix 环境,写法为 \begin{matrix} … \end{matrix}。不支持 Wikidot 的 type 参数。
  • 公式由浏览器以 MathML 显示。公式中使用了转换器不支持的 LaTeX 时,公式处显示转换器的错误信息。超过 8 KB 的公式显示为「公式过长或嵌套过深,无法显示」。
  • 论坛帖子和个人简介中不能使用数学公式,其中的公式以文本形式显示。

模块 ​

text
[[module Rate]]

[[module ListPages category="news" limit="5"]]
* %%title_linked%%
[[/module]]
  • 模块名写在 module 之后;参数写法与块参数相同。
  • 带内容的模块以 [[/module]] 结束。模块内容中可以包含其他模块,包括带内容的模块。
  • 在页面地址后加上 /nomodule/true 访问页面,可停用该页面上的全部模块,适用于模块导致页面无法正常显示的情况。

全部模块及其参数参见模块。

块名一览 ​

块其他名称参见
[[a]][[anchor]]链接与锚点
[[b]]、[[i]]、[[u]]、[[s]]、[[del]]、[[ins]]、[[sup]]、[[sub]]、[[tt]]、[[mark]]见表文本格式
[[blockquote]][[quote]]引用
[[button]]按钮
[[char]][[character]]原样文本、代码与注释
[[code]]代码块
[[collapsible]]折叠块
[[date]]日期
[[declare]]、[[set]]、[[scope]][[*declare]]、[[*set]]脚本变量
[[div]]、[[span]]容器与属性
[[embed]]嵌入代码
[[footnote]]、[[footnoteblock]]脚注
[[form]]、[[input]]表单与字段
[[gallery]]图库
[[html]]HTML 块
[[if]]、[[#if]]、[[ifexpr]]、[[#ifexpr]]、[[#expr]]、[[iftags]]、[[ifcategory]]条件内容
[[iframe]]框架
[[image]][[=image]]、[[<image]]、[[>image]]、[[f<image]]、[[f>image]]图片
[[include]]、[[noinclude]]插入页面
[[lines]][[newlines]]段落与换行
[[math]]、[[eref]]、[[$ … $]]数学公式
[[module]][[module654]]模块
[[p]][[paragraph]]段落与换行
[[ruby]]、[[rt]]、[[rb]][[rubytext]]、[[ruby2]]注音标注
[[size]]文本格式
[[table]]、[[row]]、[[cell]]、[[hcell]]表格
[[tabview]]、[[tab]][[tabs]]选项卡
[[toc]][[f<toc]]、[[f>toc]]标题与目录
[[ul]]、[[ol]]、[[li]]列表
[[user]][[*user]]用户
[[<]]、[[>]]、[[=]]、[[==]]对齐与浮动
[[# name]]锚点