在谷歌文档/云端硬盘文档中,是否可以对标题进行编号?
在谷歌文档/云端硬盘文档中,是否可以对标题进行编号?
更新:现在可以在GitHub找到。
更新2:由于GitHub上的2个拉取请求,现在可以处理空标题和空行。
更新3:已修复GitHub和下面的代码以处理新的“文档标题”标识。
我修改了Mikko Ohtamaa提到的脚本,并创建了一个Google Apps脚本,添加了一个标题工具文档菜单,允许您:
如何自动编号Google文档标题:
~~免责声明:您可能会遇到空标题的问题...但是您可以随时修复它们并再次运行操作。~~
要复制和粘贴的代码:
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]+/, ''));
}
}
}
你所要做的就是复制/粘贴先前的标题。
如果你复制并粘贴任何一个编号列表项,则它会保留其编号,并自动更改相关情况下的数字。
我写了一个版本来处理 Markdown 的标题,但它也支持普通的标题编号。源代码在这里 https://github.com/jordan2175/markdown-tools,并可通过 G Suite Marketplace 名称为“Markdown Tools”获取。
之前提到的“目录”插件今天不可用。 我安装了一个叫做“Markdown Tools”的插件。 安装完成后,您必须应用原生标题样式,然后转到附加组件>Markdown工具>标题编号并选择所需的编号样式,该样式将应用于文档中的所有标题。
## 4.1 Foo
。标题和ToC也是静态的,必须手动重新生成。 ToC也采用Markdown样式格式化。另一方面,该扩展开源且在客户端上工作,因此您的文档是私有的。 - crypdick首先感谢Luciano的分享。
我修改了代码,使其在标题以数字开头时也保留数字。
例如:
标题: 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]+[.]/, ''));
}
}
}