如何对 Google Docs/Drive 文档中的标题进行编号?

有没有可能给 Google Docs/Drive 文档中的标题编号?

123211 次浏览

更新: 现在在 Github中可用。

更新2: 现在处理空标题和空行,这要感谢 github 上的2个 pull 请求。

更新3: github 和下面的代码修复以处理新的 Docs HEADING 标识。


我修改了 剧本由 Mikko Ohtamaa 提到并创建了一个 Google Apps Script,它添加了一个 标题工具文档菜单,允许您:

  • 自动编号航向
  • 清晰标题编号

如何自动编号 Google 文档标题:

  1. 打开文档 > 工具 > 脚本编辑器..。
  2. 开始一个空白项目
  3. 粘贴下面的代码并用您喜欢的名称保存
  4. 选择 Run > onOpen 并首次授权该脚本
  5. 选择 Run > onOpen
  6. 切换到 Document 并尝试创建的 标题工具自定义菜单上的函数。

你可能会遇到空标题的问题,但是你总是可以修复它们,然后再次运行

复制和粘贴代码:

function onOpen() {
DocumentApp.getUi().createMenu('Headings Tools')
.addItem('Auto Number Headings', 'numberHeadingsAdd')
.addItem('Clear Heading Numbers', 'numberHeadingsClear')
.addToUi();
}


function numberHeadingsAdd(){
numberHeadings(true);
}


function numberHeadingsClear(){
numberHeadings(false);
}


function numberHeadings(add){
var document = DocumentApp.getActiveDocument();
var body = document.getBody();
var paragraphs = document.getParagraphs();
var numbers = [0,0,0,0,0,0,0];
for (var i in paragraphs) {
var element = paragraphs[i];
var text = element.getText()+'';
var type = element.getHeading()+'';


// exclude everything but headings
if (!type.match(/HEADING\d/)) {
continue;
}


// exclude empty headings (e.g. page breaks generate these)
if( text.match(/^\s*$/)){
continue;
}


if (add == true) {
var level = new RegExp(/HEADING(\d)/).exec(type)[1];
var numbering = '';


numbers[level]++;
for (var currentLevel = 1; currentLevel <= 6; currentLevel++) {
if (currentLevel <= level) {
numbering += numbers[currentLevel] + '.';
} else {
numbers[currentLevel] = 0;
}
}
Logger.log(text);
var newText = numbering + ' ' + text.replace(/^[0-9\.\s]+/, '');
element.setText(newText);
Logger.log([newText]);
} else {
Logger.log(text);
element.setText(text.replace(/^[0-9\.\s]+/, ''));
}
}


}

如果你想要一些更容易的东西,有一个叫做 目录的谷歌附加组件,它可以让你编号你的标题。

安装此附加组件:

  1. 点击加载项 > 获取加载项。
  2. 点击“目录”图标或搜索这个插件来安装它

然后您的目录应该出现在您的侧边栏。点击标题数字格式菜单,并选择1.2

你必须重新格式化你的文档,如果你有一个旧的,以便“刷新”的数字,但实际上插件工作得非常好。

我看过 这个论坛的答案

您所需要做的就是复制/粘贴以前的标题。

如果您复制和粘贴任何项目的编号列表,然后它保留其编号,并自动更改数字在相关的情况下。

我编写了一个用于标记标题的版本,但它也支持简单的标题编号。来源是这里的 https://github.com/jordan2175/markdown-tools,可以通过 G 套件市场作为“降价工具”。

前面提到的附加组件“目录”目前还不可用。 我安装了一个叫“ 降价工具”的程序 一旦安装,您必须应用本地标题样式,然后转到 加载项 > 标记工具 > 标题编号,并选择所需的编号样式,将适用于所有标题的文档。

自从写作以来(2020年4月) ,很多提出的应用程序都已经过时或者不再工作了。

我发现编号标题的方法如下:

  1. 去买附件
  2. 搜索并安装 降价工具

Markdown Tools 有一个使用编号标题的选项。有了内置的谷歌内容目录,就像施了魔法一样。

创建目录:

  1. 转到菜单项 插入并选择 目录

首先感谢 Luciano 的分享。

我修改了它的代码,以便在标题以数字开头时也保留这个数字。

例如:

标题: 1000欧元,应纳税的起征点?

老剧本:

  1. 欧元,应课税的起征点?

新剧本

  1. 1000欧元,应纳税的起征点?

密码:

function onOpen() {
DocumentApp.getUi().createMenu('Numérotation des titres')
.addItem('Ajouter / Mettre à jours Numérotation', 'numberHeadingsAdd')
.addItem('Supprimer Numérotation', 'numberHeadingsClear')
.addToUi();
}


function numberHeadingsAdd(){
numberHeadings(true);
}


function numberHeadingsClear(){
numberHeadings(false);
}


function numberHeadings(add){
var document = DocumentApp.getActiveDocument();
var body = document.getBody();
var paragraphs = document.getParagraphs();
var numbers = [0,0,0,0,0,0,0];
for (var i in paragraphs) {
var element = paragraphs[i];
var text = element.getText()+'';
var type = element.getHeading()+'';


// exclude everything but headings
if (!type.match(/HEADING\d/)) {
continue;
}


// exclude empty headings (e.g. page breaks generate these)
if( text.match(/^\s*$/)){
continue;
}


if (add == true) {
var level = new RegExp(/HEADING(\d)/).exec(type)[1];
var numbering = '';


numbers[level]++;
for (var currentLevel = 1; currentLevel <= 6; currentLevel++) {
if (currentLevel <= level) {
numbering += numbers[currentLevel] + '.';
} else {
numbers[currentLevel] = 0;
}
}
Logger.log(text);
var newText = numbering + ' ' + text.replace(/^[0-9\.\s]+[.]/, '');
element.setText(newText);
Logger.log([newText]);
} else {
Logger.log(text);
element.setText(text.replace(/^[0-9\.\s]+[.]/, ''));
}
}
}