扩展:标记式章节嵌入

This page is a translated version of the page Extension:Labeled Section Transclusion and the translation is 100% complete.
MediaWiki擴充功能手冊
OOjs UI icon advanced-invert.svg
Labeled Section Transclusion
发布状态: 稳定版
实现 标签 , 解析器函数
描述 允许将标记的章节文本嵌入
作者 Steve Sanbeg
兼容性方针 快照跟随MediaWiki发布。 master分支不向后兼容。
MediaWiki >= 1.35.0
数据庫更改
许可协议 GNU通用公眾授權條款2.0或更新版本
下载
翻譯Labeled Section Transclusion擴充功能如在translatewiki.net可用

检查使用和版本矩阵。

问题 尚未完成的工作 · 回報錯誤

标记式章节嵌入扩展允许选择性地嵌入已标记的章节文本并正常解析Wiki格式。它的功能类似普通维基中‎<onlyinclude>标签的增强版本,可选择要包含的部分。这已在所有维基媒体的wiki上启用。

普通嵌入主要用来将小模板的大部分内容传入,而标记式章节嵌入主要用于将大型页面的一小部分嵌入。

两者也存在一些差异。在原生的模板嵌入中,章节是以结果标记,因此只能完全包含或跳过一个可能是不连续的章节。

而在这里,章节以名称标记,且由调用者选择行为,可以按需要包含或跳过章节。不同的页面可以包括或排除自己选择的章节,不限数量且可任意重叠。

通过名称而非行为标记章节将允许“编辑章节”链接对从较大文本中摘录的内容更适当体现,因为扩展现在可以考虑在页面开头跳过的部分,从而允许适当地偏移包含的部分。

工作原理

第1步:标记章节

使用‎<section>标签标记章节中的文本,如下所示:

<section begin="chapter1" />this is a chapter 1<section end="chapter1" />

请注意,这些标记不是HTML/XML,并且不使用通常的属性语法。 出于此原因,且因为beginend标记是独立的而非普通的XML打开/关闭标签,这允许嵌套或重叠的章节。这允许您插入章节标记而不必担心干扰其他章节。

步骤2a:嵌入章节

调用解析器函数#lst来嵌入,即从名为articleX的页面嵌入(转换)一个名为chapter1的章节:

{{#lst:articleX|chapter1}}

目标条目定义了该章节的位置;它的行为由解析器函数决定。

步骤2b:嵌入页面但排除章节

要嵌入一个页面但排除指定章节,使用#lstx函数:

{{#lstx:articleX|chapter1}}

(可选)您可以将需替换的文本添加到排除部分。

{{#lstx:articleX|chapter1|replacement_text}}

例如:

{{#lstx:articleX|chapter1|See chapter 1 in [[articleX]].}}

替换文本将出现在章节跳过(排除)的区域。

其他功能

不连续的章节

可以有多个具有相同名称的章节,在这种情况下,将包含/排除具有该名称的每个部分。这对标记各种讨论尤为实用。

章节范围

这些函数有一个额外的可选参数来指定一个章节范围,即{{#lst:articleX|chapter1|chapter3}},包含从第1章开头到第3章结尾的所有内容。这允许使用空标记对来标记章节的一端,这可能在一个模板中。目前法语维基文库使用了类似的机制。

替换引用

这也适用于替代,甚至可以用一篇文章替换它自己的一部分。这样做的一个用途是提供一种简洁的方式来存档讨论页:使用<section begin=archive />等标记要存档的文本,然后使用{{subst:#lst:talk_page|archive}}创建一个包含文本的存档页面,该页面复制存档的部分。最后用{{subst:#lstx:talk_page|archive}}替换讨论页的内容以删除这些部分。

按标题嵌入章节

可选支持转换标有正常标题的文本部分,即==this section==。如果已安装,则使用lsth功能完成。

嵌入序言

要嵌入一个页面的序言(即第一个标题之前的内容),使用

{{#lsth:pagename}}

嵌入特定章节

您还可以嵌入sectionX的整个内容(包括其所有子章节,但不包括sectionX本身的标题)。

{{#lsth:pagename|sectionX}}

注意以下几点:

  1. 如果您有多个相同名称的章节,则仅嵌入sectionX的第一个匹配项。
  2. 确保输入的sectionX标题是它在源码中的内容,不是它显示的内容。例如,如果章节的标题是==List of [[Extension]]==,则应输入“List of [[Extension]]”而非“List of Extension”。
  3. 当嵌入一个标记为已使用“翻译扩展”的页面的章节时,会嵌入特定语言版本的内容。 例如,会使用页面名称/en而非页面名称
  4. 匹配不区分大小写,以免链接因大小写改变而中断。

转换多个章节

您还可以从sectionX第一次出现(不包括sectionX本身的标题)开始嵌入,直到它在sectionY的下一次出现。请注意,sectionY充当停止点,因此嵌入不包含sectionY的内容。

{{#lsth:pagename|sectionX|sectionY}}

关于跳过标题的说明

由于MediaWiki中的传统转换不是为了嵌入章节,因此不会考虑跳过标题。因此,如果您要转换(嵌入)包含多个标题的模板,并跳过第一个标题,则所有编辑章节的链接都将指向模板中的错误章节。

当使用此扩展时(使用MediaWiki 1.9或更高版本),#lst#lsth函数会计算“跳过”开头部分中的标题,并相应地偏移已转换的标题。这将允许这些链接指向简单情况下的正确章节。

请注意,#lstx不计算跳过的标题,并且不连续章节中跳过的标题不会抵消。 但它现在似乎已得到修复(可能在移植到MediaWiki的新预处理器时)。嵌入的标题可以链接到正确的章节.

本地化

在内部,解析器函数都使用lst前缀,以与扩展名称保持一致。由于这个首字母缩略词可能会让非开发人员感到困惑,因此引入了可读的英语变体,因此目前可以从任一名称调用这些函数。

函数 英语 德语 希伯来语 (RTL) 葡萄牙语
#lst #section #Abschnitt
#קטע
#trecho
#lstx #section-x #Abschnitt-x
#בלי קטע
#trecho-x
#lsth #section-h

此外,标签(tag)现在可以本地化,即: 英语, 德语, 希伯来语, 葡萄牙语; 即:

英语
<section begin=x/> ... <section end=x/>
德语
<Abschnitt Anfang=x/> ... <Abschnitt Ende=x/>
希伯来语 (RTL)
<קטע התחלה=א> ... <קטע סוף=א> (“启动”代码到右边,“结束”代码在左边)
葡萄牙语
<trecho começo=x/> ... <trecho fim=x/>

限制

  • 虽然可以跨命名空间使用此扩展,但跨维基参考来源未解决。例如,不能将一个维基文库页面的部分内容包含在远程MediaWiki站点中。
  • 部分标签本身不能被转换以便在其他页面上工作。{{#lst:}} and {{#lstx:}}仅在部分标记直接出现在已转换页面的wiki文本中时才起作用。这意味着,例如使用模板参数解析函数不能将这些标签嵌入到模板中。#tag魔术字不适用于章节标签。
  • 截至2014年,在模板参数中使用时,章节标记没有任何效果。如果页面A包含文本{{B|X}},则{{#lst:A|...}}无法访问X。

下载

此扩展可直接从Git检索到 [?]:

  • 浏览代码
  • 部分扩展有稳定版本标签。
  • 每个分支与过去的MediaWiki发布版本相关联。 这里也有一个“主线”分支,包含最新alpha版本(可能需要MediaWiki的alpha版本)。

提取快照,并将它放置在您的MediaWiki安装副本的extensions/LabeledSectionTransclusion/目录中。

如果您对git熟悉,并且拥有您服务器的shell访问权,您也可以通过以下方法获得扩展:

cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/LabeledSectionTransclusion.git

安装

  • 下载文件,并将其放置在您extensions/文件夹中的LabeledSectionTransclusion目录内。
  • 将下列代码放置在您的LocalSettings.php的底部:
    wfLoadExtension( 'LabeledSectionTransclusion' );
    
  •   完成 – 在您的wiki上导航至Special:Version,以验证扩展已成功安装。

致使用MediaWiki 1.27或更早版本的用户:

上面的说明介绍的是安装此扩展的新方法,它使用wfLoadExtension()。 如果您需要在早期版本(MediaWiki 1.27和更早版本)中安装此扩展,而不是wfLoadExtension( 'LabeledSectionTransclusion' );,您需要使用:

require_once "$IP/extensions/LabeledSectionTransclusion/LabeledSectionTransclusion.php";

在各种维基文库上还有一个Gadget,可以使用简化的## label ##语法定义部分。 它的代码可以在Wikisource:MediaWiki:Gadget-Easy_LST.js找到。

例子

参见