如何在MediaWiki中实现带动态编号与引用的定理模板?
实现MediaWiki定理自动编号与引用的最佳方案
要实现类似LaTeX的theorem环境和\ref命令的功能,单纯依赖MediaWiki原生模板无法完成,需要结合扩展+自定义模板的方式,以下是两种最实用的方案:
方案一:轻量方案(ParserFunctions + Variables 扩展)
这两个扩展是MediaWiki的常用标配,无需额外重型依赖,适合大多数中小型站点。
1. 创建定理模板 Template:Theorem
{{#vardefine:theorem_num|{{#expr:{{#var:theorem_num|0}} + 1}}}} {{#vardefine:thm_{{{id|}}}|{{#var:theorem_num}}}} '''Theorem {{#var:theorem_num}}''' <div style="padding-left: 1.5em; margin-top: 0.5em;">{{{content}}}</div>
{{{id}}}:必填参数,作为定理的唯一标识符,用于后续引用{{{content}}}:定理的具体内容- 逻辑:通过
#var维护页面内的定理计数器,每调用一次模板就递增编号,并将编号与标识符绑定存储
2. 创建引用模板 Template:RefTheorem
Theorem {{#var:thm_{{{id|}}}|Unknown Theorem}}
- 传入目标定理的
id参数,即可输出对应的定理编号;若标识符不存在,显示Unknown Theorem
使用示例
{{Theorem|id=thm-fundamental-arithmetic|content=大于1的自然数必可唯一分解为素数的乘积。}} {{Theorem|id=thm-pythagoras|content=直角三角形中,两直角边的平方和等于斜边的平方。}} <!-- 引用第一个定理 --> 根据{{RefTheorem|id=thm-fundamental-arithmetic}},我们可以推导以下结论:
当在两个定理之间插入新定理时,页面加载时会重新计算计数器,所有后续定理的编号自动更新,引用也会同步对应新编号。
方案二:重型方案(Semantic MediaWiki 扩展)
如果你的站点需要更强大的语义化管理(比如定理分类、跨页面查询、批量统计),可以使用Semantic MediaWiki(SMW),它能实现更体系化的定理管理。
1. 创建定理模板 Template:Theorem
{{#vardefine:theorem_count|{{#expr:{{#var:theorem_count|0}} + 1}}}} {{#set:Has Theorem ID={{{id|}}}|Has Theorem Number={{#var:theorem_count}}}} '''Theorem {{#var:theorem_count}}''' <div style="padding-left: 1.5em; margin-top: 0.5em;">{{{content}}}</div>
- 通过
#set将定理的标识符和编号作为语义属性存储,支持后续跨页面查询
2. 创建引用模板 Template:RefTheorem
{{#ask:[[Has Theorem ID::{{{id|}}}]] |?Has Theorem Number |format=plain |default=Unknown Theorem }}
- 通过语义查询获取对应标识符的定理编号,支持跨页面引用(只要定理的
id全局唯一)
优势
除了自动编号和引用,还能实现:
- 按主题分类定理
- 生成所有定理的索引页面
- 跨页面统计特定类型的定理数量
方案对比
- 轻量方案:配置简单,依赖少,仅支持单页面内的编号与引用,适合小型数学站点
- SMW方案:功能全面,支持语义化管理,适合大型知识库级别的数学站点
内容的提问来源于stack exchange,提问作者sparusaurata
相关产品推荐
相关产品推荐

