维基语法
ProjectWikit 站点的页面使用维基语法编写,即 Wikidot 所用的标记语言。为 Wikidot 编写的页面在此处的显示效果相同。
本文档说明渲染器支持的全部语法。模块([[module ...]])另见模块。如需在不保存页面的情况下试写维基语法,可使用编辑器的预览,或在服务器上执行 pwikit render(参见命令行)。
凡 Markdown 能够呈现的示例,其后均附有显示效果。
基本规则
块
大多数语法都是写在双方括号中的块:
[[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]](在新标签页中打开)。 - 始终未闭合的块按普通文本显示。
如需在内容不被解析的块中写入同名的结束标签,可在外层块名后用冒号加上标识符,并以相同的标识符闭合:
[[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]] |
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 字号,不接收其他参数。
段落与换行
- 段落内的单个换行显示为换行。
- 空行开始新段落。连续多个空行视为一个。
- 行尾的下划线若与前文以空格分隔(
_),则强制换行,可用于列表项和表格单元格内。仅含_的行会增加一个空行:
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]])将属性应用到其中的段落:
[[p style="color: red"]]
A red paragraph.
[[/p]]- 由三个或更多连字符组成的行(
---)为水平分隔线。 - 单独一行的
~~~清除两侧的浮动元素;~~~<清除左侧,~~~>清除右侧。
标题与目录
+ 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 链接
三方括号链接的目标以 ! 加已知前缀开头时,指向其他网站:
[[[!wikipedia:Wiki|Wiki on Wikipedia]]]
[[[!google:wikitext]]]效果:
| 前缀 | 目标 |
|---|---|
wikipedia、wp | 维基百科条目 |
commons | 维基共享资源页面 |
google | Google 搜索 |
duckduckgo、ddg | DuckDuckGo 搜索 |
dictionary | Dictionary.com 词条 |
thesaurus | Thesaurus.com 词条 |
目标中的空格会在地址中编码。
锚点
| 语法 | 效果 |
|---|---|
[[# section-name]] | 创建名为 section-name 的锚点。# 之后的空格不可省略。 |
[#section-name Label] | 指向本页锚点的链接 |
[# Label] | 不跳转到任何位置的链接,供脚本或样式使用 |
[[a]] 块
[[a]](或 [[anchor]])是内容可以包含任意标记的链接,并可设置属性:
[[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_]] 会去除内容开头和结尾的换行。
列表
* 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
- Numbered item inside it
- Second numbered item
Item with a line break
continued on the next line位于行首并后接空格的
*开始一个无序列表项,#开始一个有序列表项。行首的空格数决定嵌套层级。无序列表与有序列表可以相互嵌套。
如需在新行继续列表项,请在行尾写
_,或将文字包裹在[[span]]...[[/span]]中。
定义列表:
: Term : Definition
: Another term : Its definition效果:
- Term
- Definition
- Another term
- Its definition
列表也可以写成块,块写法可以接收属性:
[[ul class="steps"]]
[[li]]First[[/li]]
[[li]]Second
[[ol]]
[[li]]Nested[[/li]]
[[/ol]]
[[/li]]
[[/ul]]效果:
- First
- Second
- Nested
[[ul]] 为无序列表,[[ol]] 为有序列表,[[li]] 为列表项。
表格
||~ Heading ||~ Heading ||
|| Cell || Cell ||
||> Right-aligned ||= Centered ||
|||| Cell spanning two columns ||
|| First line _
second line || Cell ||效果:
| Heading | Heading |
|---|---|
| Cell | Cell |
| Right-aligned | Centered |
| Cell spanning two columns | |
| First line second line | Cell |
| 单元格开头 | 含义 |
|---|---|
|| | 普通单元格 |
||~ | 表头单元格 |
||> | 右对齐单元格 |
||= | 居中单元格 |
|||| | 横跨两列的单元格;每多一个 || 多跨一列 |
每行从新的一行开始,以 || 结束。单元格内换行请使用 _。纵向跨行的单元格需要使用块写法:
[[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 1 | Heading 2 | Two rows high |
|---|---|---|
| Two columns wide | ||
[[table]] 中只能包含 [[row]] 块,[[row]] 中只能包含 [[cell]] 和 [[hcell]](表头)块。这四种块均可接收属性。[[table]] 内的内容不划分段落;如需在单元格内分段,请用 [[div]] 包裹。
引用
> First level
>> Second level
> Back to the first level效果:
First level
Second level
Back to the first level
[[blockquote]]...[[/blockquote]](或 [[quote]])效果相同,并可接收属性:
[[blockquote]]
Quoted text.
[[/blockquote]]效果:
Quoted text.
对齐与浮动
段落开头的 = 使整个段落居中:
= This paragraph is centered,
including this line.效果:
This paragraph is centered,
including this line.
对齐块:
| 块 | 对齐方式 |
|---|---|
[[<]]...[[/<]] | 左对齐 |
[[>]]...[[/>]] | 右对齐 |
[[=]]...[[/=]] | 居中 |
[[==]]...[[/==]] | 两端对齐 |
如需阻止文字环绕浮动的图片或块,请参见段落与换行中的 ~~~。
容器与属性
[[div]] 是通用的块级容器,[[span]] 是通用的行内容器,二者主要用于添加类和样式:
[[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**@@ | 按原样显示文字,不解析其中的标记 |
@@@@ | 不显示任何内容(空的原样文本) |
@@@@@@ | @@ |
@<© —>@ | HTML 实体显示为对应字符;其中的其他文字按原样显示 |
[[char copy]]、[[char —]]、[[char #x2603]] | 按实体名或编号插入一个字符。[[character]] 与之相同。 |
[!-- comment --] | 不显示任何内容。注释可以跨越多行。 |
原样文本中不能含有空行。
代码块
[[code type="css"]]
#page-title { color: purple; }
[[/code]]效果:
#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]] 中同样生效。破折号以及 « 和 » 在原样文本和代码中不会替换。
折叠块
[[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 |
折叠块可以嵌套。
选项卡
[[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]]块;含有其他内容时,整个块按普通文本显示。
脚注
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]] | 浮动于右侧,文字环绕 |
[[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]] 显示当前页面所有图片附件的缩略图。点击缩略图会在页面上方显示放大的图片。
[[gallery]]
[[gallery size="small"]]size | 缩略图 |
|---|---|
square | 75 × 75 像素,裁剪为正方形 |
thumbnail | 长边 100 像素 |
small | 长边 240 像素 |
medium(默认) | 长边 500 像素 |
- 使用其他尺寸时,图库位置显示错误信息。
size是唯一的参数。 [[gallery]]是[[module Gallery]]的简写。简写在页面源代码中的任何位置都会被替换,包括[[code]]和@@...@@内。
嵌入内容
框架
[[iframe]] 嵌入其他网页:
[[iframe https://example.com/widget width="100%" height="300" frameborder="0"]]地址写在块名之后,按链接地址的规则检查。属性会应用到框架上。
嵌入代码
[[embed]] 接收从视频或地图服务复制的嵌入代码,其中必须恰好包含一个 <iframe> 标签:
[[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,框架高度随内容自动调整:
[[html]]
<button onclick="document.body.style.background='gold'">Try me</button>
[[/html]]- 框架与站点隔离:其中的脚本无法读取站点的 Cookie 或本地存储。
- 设置
external="true"时,框架从站点的文件域名加载,可以使用 Cookie 和本地存储。其内容始终取自页面最近保存的版本,因此预览时不会显示未保存的更改,查看旧版本时也不会显示旧版本的内容。
日期
[[date]] 显示一个时间点,并换算为读者浏览器所在的时区:
[[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:00 | UTC 日期与时间 |
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 / %P | AM/PM / am/pm |
%M | 分钟 |
%S | 秒 |
%R | 等同于 %H:%M |
%s | Unix 时间戳 |
%O | 与该时间相隔的时长,不带“前”,如 5分钟。未来的时间同样适用 |
可在格式末尾以 | 添加修饰符:
| 修饰符 | 效果 |
|---|---|
|ago | 显示相隔的时长,不带“前”;鼠标悬停时显示格式化的日期 |
|agohover | 显示格式化的日期;鼠标悬停时显示相隔的时长,不带“前” |
用户
| 语法 | 效果 |
|---|---|
[[user name]] | 指向用户个人资料的链接 |
[[*user name]] | 同上,并显示用户头像 |
[[user wd:Name]] | 从 Wikidot 导入的账号,按其 Wikidot 用户名查找 |
[[user external:name]] | 指向 wikidot.com 上该用户名个人资料的链接,不查找本地账号 |
名称会与账号名和显示名称进行匹配。没有匹配的账号时显示“用户 '…' 不存在”。
注音标注
[[ruby]]漢字[[rt]]かんじ[[/rt]][[/ruby]]
[[rb 漢字|かんじ]][[rt]](或 [[rubytext]])在 [[ruby]] 中写入注音。[[rb base|annotation]](或 [[ruby2]])是简写形式。[[ruby]] 和 [[rt]] 可接收属性。
表单与字段
打开页面的表单
[[form]] 收集输入值,并打开本站某个页面,输入值附在该页面的地址中:
[[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]] 以列表形式编写,显示一张带标签的字段表:
[[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 | 标签;未设置时使用字段名 |
type | text(默认)、textarea、select 或 checkbox |
size | 文本字段的宽度,以字符计。默认值:30。 |
default | 初始值。复选框的值为 1、yes、true 或 checked 时处于勾选状态。 |
hint | 显示在字段下方的说明文字 |
options | select 字段的一个选项,写作 key: Label;每个选项各写一行 |
- 字段仅用于显示,该块本身没有提交按钮。
- 未定义任何字段时显示“[[input]] 没有定义任何字段”。
[[input]]...[[/input]]是[[module Input]]的简写。简写在页面源代码中的任何位置都会被替换,包括[[code]]和@@...@@内。
按钮
[[button]] 显示一个作用于当前页面的按钮。按钮留在文字行内,因此多个按钮可以并排显示。
[[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]] 在页面解析之前,将另一个页面的源代码插入到所在位置:
[[include component:infobox
title=Example |
color=red
]]component:infobox 的内容:
[[div class="infobox" style="border-color: {$color}"]]
**{$title}**
[[/div]][[include必须位于行首,]]必须位于行尾。该块可以跨越多行。- 参数为以
|分隔的name=value。值不加引号,两侧的空格会被去除。 - 被插入页面中的每个
{$name}都会被替换为同名参数的值。没有对应参数的{$name}保持原样。 - 同一参数出现两次时,以第一个值为准。
[[include :site:page-name]]按站点标识名插入同一 ProjectWikit 实例中另一个站点的页面。仅当读者在该站点上有权查看该页面时才会插入。- 被插入的页面可以继续插入其他页面,最多 25 层。超出限制时显示包含循环的错误信息。
- 插入不存在的页面时,显示错误信息及创建该页面的链接。
- 由于源代码在页面解析之前插入,一个块可以在一个被插入的页面中开始,在另一个被插入的页面或插入方页面中结束。
- 被插入的页面可以通过
%%this|name%%获取当前显示页面的变量(参见页面变量)。
默认值
值为自身占位符的参数(如 color={$color})在占位符未被替换时会被跳过。组件在插入另一个组件时,可以借此传递参数并提供默认值:
[[include component:infobox-inner
color={$color} |
color=gray
]]将以上内容写在 component:infobox 中,即可传递插入方页面设置的 color;插入方未设置时使用 gray。
插入时排除的内容
[[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%%:
[[div class="news-header"]]
+ %%title%%
Published %%created_at%% by %%created_by_linked%%
[[/div]]
%%content%%主分类的模板为页面 _template。
缺失页面模板
读者访问不存在的页面时,若存在 category:_404 则显示该页面,否则显示 _404,以代替默认提示。仅当读者有权查看该模板时才会使用。%%404_page_name%% 会被替换为所请求的完整名称:
The page **%%404_page_name%%** does not exist yet.
[[button edit text="Create it"]]内容分段
页面源代码可以用由四个或更多等号组成的行划分为多段:
Summary text.
====
Full text.在模板中,%%content{1}%% 为 Summary text.,%%content{2}%% 为 Full text.。不存在的分段为空值。
数据表单分类
分类模板可以用不带参数的 [[form]] 块定义字段。此后该分类中的页面存储字段值,而不是维基语法:
[[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:
status: done
summary: Finished in //March//.| 字段属性 | 含义 |
|---|---|
type | text(默认)、wiki、select、checkbox、static 或 hidden |
label | 标签,可通过 %%form_label{field}%% 获取 |
hint | 说明文字,可通过 %%form_hint{field}%% 获取 |
default | 页面未设置该字段时使用的值 |
values | select 字段的选项,写作 key: Label |
value | static 或 hidden 字段的固定值 |
| 变量 | 值 |
|---|---|
%%form_data{field}%% | 用于显示的值。wiki 与 static 字段的值以及 select 选项的标签按维基语法解析;其他值按原样显示。 |
%%form_raw{field}%% | 存储的值,未设置时为默认值 |
%%form_label{field}%% | 字段的标签 |
%%form_hint{field}%% | 字段的说明文字 |
字段名不区分大小写。[[form]] 定义本身不会显示。
URL 参数
页面地址可以在页面名称之后附带参数:
/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]] 仅在页面标签满足条件时显示其内容:
[[iftags +guide -draft]]
This guide is published.
[[/iftags]]| 条件 | 含义 |
|---|---|
+tag | 页面必须带有此标签 |
-tag | 页面不得带有此标签 |
tag | 页面必须至少带有以此方式列出的标签之一 |
不显示的内容会被直接跳过而不解析,因此不要求其格式完整:其中可以包含在别处开始或结束的标签。
[[ifcategory]] 按页面所属分类进行同样的判断。无论是否显示,其内容都必须格式完整。
[[ifcategory news blog]]
Shown in the news and blog categories.
[[/ifcategory]]
[[ifcategory -_default]]
Shown everywhere except the main category.
[[/ifcategory]]分类前加 + 或不加符号,均表示页面必须属于所列分类之一;加 - 表示排除该分类。这两种块在被插入的页面和模板中最为有用,因为同一份源代码会显示在不同页面上。
取值判断
[[#if]] 根据某个值(通常是插入参数或变量)在两段文字之间选择:
[[#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]] 显示表达式的计算结果:
[[#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 时,表达式同样无法计算。
脚本变量
脚本变量在页面渲染过程中保存值:
[[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]] 引用。[[$ … $]] 在一行文字中插入公式:
[[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 的公式显示为「公式过长或嵌套过深,无法显示」。
- 论坛帖子和个人简介中不能使用数学公式,其中的公式以文本形式显示。
模块
[[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]] | 锚点 |
