目前无法对文档结构的标题进行自动编号。我知道有(付费)第三方插件可用。
如何实现连续编号的标题?
为以下 javascript 创建书签,然后在 confluence 的编辑模式下单击它以重新编号标题。
javascript:(function()%7Bfunction%20addIndex()%20%7Bvar%20indices%20%3D%20%5B%5D%3BjQuery(%22.ak-editor-content-area%20.ProseMirror%22).find(%22h1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%22).each(function(i%2Ce)%20%7Bvar%20hIndex%20%3D%20parseInt(this.nodeName.substring(1))%20-%201%3Bif%20(indices.length%20-%201%20%3E%20hIndex)%20%7Bindices%3D%20indices.slice(0%2C%20hIndex%20%2B%201%20)%3B%7Dif%20(indices%5BhIndex%5D%20%3D%3D%20undefined)%20%7Bindices%5BhIndex%5D%20%3D%200%3B%7Dindices%5BhIndex%5D%2B%2B%3BjQuery(this).html(indices.join(%22.%22)%2B%22.%20%22%20%2B%20removeNo(jQuery(this).html()))%3B%7D)%3B%7Dfunction%20removeNo(str)%20%7Blet%20newstr%20%3D%20str.trim()%3Bnewstr%20%3D%20newstr.replace(%2F%5B%5Cu00A0%5Cu1680%E2%80%8B%5Cu180e%5Cu2000-%5Cu2009%5Cu200a%E2%80%8B%5Cu200b%E2%80%8B%5Cu202f%5Cu205f%E2%80%8B%5Cu3000%5D%2Fg%2C'%20')%3Bif(IsNumeric(newstr.substring(0%2Cnewstr.indexOf('%20'))))%7Breturn%20newstr.substring(newstr.indexOf('%20')%2B1).trim()%3B%7Dreturn%20newstr%3B%7Dfunction%20IsNumeric(num)%20%7Bnum%20%3D%20num.split('.').join(%22%22)%3Breturn%20(num%20%3E%3D0%20%7C%7C%20num%20%3C%200)%3B%7DaddIndex()%7D)()
对结构进行更改后,单击添加书签的 javascript 会对文档重新编号。
限制是它只提供 n.n.n。编号,但对于许多情况来说这已经足够了。脚本也可以根据需要定制。
我尝试了这个 TaperMonkey 脚本,显然是由 this post 产生的,但它没有按原样工作。所以我拿了它的源代码并剥离了集成代码、旧版本兼容性,并做了一些小的调整以获得这个:
function addIndex() {
var indices = [];
jQuery(".ak-editor-content-area .ProseMirror").find("h1,h2,h3,h4,h5,h6").each(function(i,e) {
var hIndex = parseInt(this.nodeName.substring(1)) - 1;
if (indices.length - 1 > hIndex) {
indices= indices.slice(0, hIndex + 1 );
}
if (indices[hIndex] == undefined) {
indices[hIndex] = 0;
}
indices[hIndex]++;
jQuery(this).html(indices.join(".")+". " + removeNo(jQuery(this).html()));
});
}
function removeNo(str) {
let newstr = str.trim();
newstr = newstr.replace(/[\u00A0\u1680\u180e\u2000-\u2009\u200a\u200b\u202f\u205f\u3000]/g,' ');
if(IsNumeric(newstr.substring(0,newstr.indexOf(' ')))){
return newstr.substring(newstr.indexOf(' ')+1).trim();
}
return newstr;
}
function IsNumeric(num) {
num = num.split('.').join("");
return (num >=0 || num < 0);
}
addIndex();
(我不是 JavaScript 开发人员,我确信它可以写得更好/更好)
然后我使用 bookmarklet 将其转换为顶部的 javascript 书签,点击即可触发功能。
基于小书签方法,我创建了一个 Chrome 扩展,它将在上下文菜单中添加此功能并将脚本注入页面中。 请参阅 https://tdalon.blogspot.com/2024/03/crx-confluence-numbered-headings.html 以及 GitHub 中提供的源代码 https://github.com/tdalon/confluence_crx
这避免了设置书签的麻烦,并使功能也更易于访问。 除了 Chrome 扩展程序之外,Chrome 扩展程序还具有其他一些不错的功能,例如按标签快速组合搜索。
灵感来源:https://2ality.com/2012/01/numbering-headingshtml.html
这是一个 CSS,您可以在 Confluence 外观/样式表中应用该 CSS 以进行自动编号。
.wiki-content h1 {
counter-increment: h1counter;
counter-reset: h2counter;
}
.wiki-content h1::before {
content: counter(h1counter) ".\0000a0\0000a0";
}
.wiki-content h2 {
counter-increment: h2counter;
counter-reset: h3counter;
}
.wiki-content h2::before {
content: counter(h1counter) "." counter(h2counter) ".\0000a0\0000a0";
}
.wiki-content h3 {
counter-increment: h3counter;
counter-reset: h4counter;
}
.wiki-content h3::before {
content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) ".\0000a0\0000a0";
}
.wiki-content h4 {
counter-increment: h4counter;
}
.wiki-content h4::before {
content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) "." counter(h4counter) ".\0000a0\0000a0"; }
有了这个,您可以使编号在目录中可见:
.toc-macro.hidden-outline span.toc-outline {
display: inline;
}
我们为 Confluence 构建了一个编号标题应用程序。这是令人惊讶的复杂,即使你让它工作一次,当你更新添加/删除标题时会发生什么。没有人愿意为应用程序付费,包括我自己,但如果您正在处理公共页面,例如 Confluence 在技术文档中很受欢迎..
Atlassian Marketplace 上有 5 个应用程序,但只有 3 家公司,即 2 家拥有 2 个应用程序,而且价格相差很大。