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

Posted

技术标签:

【中文标题】如何对 Google Docs/Drive 文档中的标题进行编号?【英文标题】:How to number the headings in a Google Docs/Drive document? 【发布时间】:2012-09-05 12:39:17 【问题描述】:

是否可以对 Google Docs/Drive 文档中的标题进行编号?

【问题讨论】:

怎么还不原生支持? 【参考方案1】:

如果您想要更简单的内容,可以使用名为 "Table of Contents" 的 Google 插件来为标题编号。

要安装此插件:

    点击加载项 > 获取加载项。 点击“目录”图标或搜索此插件进行安装

然后您的目录应该出现在您的侧边栏中。单击标题编号格式菜单,然后选择 1.2.3

如果您有旧文档,则必须重新格式化您的文档才能“刷新”数字,但实际上插件运行良好。

我见过the answer in this forum。

【讨论】:

如果侧边栏未显示,请转到“附加组件->目录->在侧边栏中显示” 我认为任何人都可以将他们的附加组件称为“目录”。因此,指向实际附加组件的链接很有帮助。我猜你的意思是这个:chrome.google.com/webstore/detail/table-of-contents/… 插件是如何安装的——每台机器/浏览器、每个文档、每个用户在谷歌文档上?如果其他人想要编辑文档会怎样? 很遗憾,这个插件好像坏了。由于授权问题,它无法安装。其他人是否得到相同的结果? @gavdotnet 它对我有用,所以他们必须修复它。【参考方案2】:

更新:现已在 github 中提供。

更新 2: 由于 github 上的 2 个拉取请求,现在可以处理空标题和空行。

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


我修改了script mentioned by Mikko Ohtamaa 并创建了一个 Google Apps 脚本,它添加了一个标题工具文档菜单,让您可以:

自动编号标题 清除标题编号

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

    打开您的文档 > 工具 > 脚本编辑器... 开始一个空白项目 粘贴下面的代码并使用您的首选名称保存 选择 Run > onOpen 并首次授权脚本 选择运行 > onOpen 切换到您的文档并尝试创建的标题工具自定义菜单上的功能。

~~免责声明:您可能会遇到空标题的问题。但您可以随时修复它们并再次执行操作。~~

要复制和粘贴的代码:

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]+/, ''));
    
  


【讨论】:

我很高兴知道@IvanCachicatari 我正计划制作一个改进版本以作为附加组件启动,这样我们就不需要每次都打开脚本编辑器...... @IvanCachicatari 好主意,你有它! github.com/lpanebr/autoNumberHeadings @MrGravity 实现这一目标的方法是将脚本转换为 Add-On for Google Drive 我计划这样做,但现在没时间了.. 哇!感觉又是90年代了。我们真的需要一个脚本来完成像标题编号这样的基本事情吗?现在我明白为什么会有所有这些编程计划了——我们的孩子真的需要知道他们的 javascript 才能编写任何工作文档;P @Luciano 有点的作品。我看到一件奇怪的事情正在发生。如果我从 git 剪切并粘贴代码,我会得到以下两个结果之一:在第 38 行没有任何反应或正则表达式解析错误。为了使其正常工作,我必须 1) 从 10/16/ 剪切并粘贴 git 代码17, 2) 保存, 3) 手动进行 nsof 建议的更改, 4) 保存并按照上面列出的方式运行。我注意到一个细微的差别:您的版本中的第 38 行删除了 \d 周围的括号。【参考方案3】:

自撰写(2020 年 4 月)以来,许多提议的应用都已过时或不再工作。

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

    转到获取插件 搜索并安装 Markdown 工具

Markdown 工具有一个使用编号标题的选项。与 Google 的内置目录相得益彰。

创建目录:

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

【讨论】:

这个超级有用!我不会想到一个简单的 TOC 编号功能会出现在降价工具中,但效果很好,谢谢! 起初我不喜欢每次想要标题编号时都必须选择菜单项。但是可以只输入标题编号,并且仅在不连续的标题编号开始烦人时才使用菜单项。我现在很欣赏这种管道类型的实现。【参考方案4】:

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

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

【讨论】:

多么务实,这个解决方案被低估了。 确实,这是最简单的 NATIVE 解决方案(如果您仍处于编辑阶段)! 据我所知,这要求您缩进每个标题级别。是这样还是有其他方法? 问题是:你需要从同一个文档中复制标题。例如,如果您从另一个 html 文档中复制“标题 1”,尽管保留了“标题 x”格式,但它不会有数字。这意味着,如果您已经有另一个包含大量文本的文档要复制粘贴,那么您的解决方案将需要太多的手动工作。或者实际上:如果您已经有一个文档并且您只想在其中枚举标题,那也是一样的。【参考方案5】:

我写了一个做markdown标题的版本,但它也支持普通的标题数字。源代码在此处https://github.com/jordan2175/markdown-tools,可通过 G Suite Marketplace 作为“Markdown Tools”获得。

【讨论】:

嗨@jordan2175,插件很棒。如果它生成的 TOC 有页码就好了。【参考方案6】:

之前提到的插件“目录”从今天开始不可用。 我安装了一个名为“Markdown Tools”的 安装后,您必须应用原生标题样式,然后转到 Add-Ons>Markdown 工具 >标题编号 并选择将应用于文档中所有标题的所需编号样式。

【讨论】:

以上是关于如何对 Google Docs/Drive 文档中的标题进行编号?的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有独立脚本的Google文档上使用“getBody()”?

如何使用nodejs和request将不同请求的响应放在同一个文档中?

如何在 Google BigQuery 的记录中查询字符串?文档不工作

使用 NodeJS 对 Google 推送通知的操作

Google云端硬盘文档编辑器显示了其他链接的应用,例如日历和其他Google产品导航。如何隐藏完成的投递箱?

如何使用自己的身份验证系统控制对 Google Cloud Storage 对象的访问?