AltSearch是LibreOffice Writer的一个用于自动化执行复杂文本替换操作的扩展,能够在不需要复杂编程的条件下进行一些文档格式的手动与批量转换和调整。该扩展除了支持普通文本与正则表达式的查找与替换外,还能够进行文本与段落样式的匹配与替换,这是其他的排版软件,包括微软的Office,所不具备的。利用这些功能,将其写为简单的批处理脚本,就可以自动地格式化文件,满足常见的学习与工作需求,大大提高工作效率。本文以格式化由Kindle 导出的笔记为例,介绍AltSearch的基本使用方法。

由Kindle iPad版导出的芝加哥格式的笔记直接存为LibreOffice Writer文件,其格式基本与纯文本无异,并不适合结构化的浏览或发布为豆瓣笔记。所以,需要对文本格式进行调整。对此,首先在LibreOffice Writer中点击绿色望远镜按钮,打开AltSearch对话框:

然后依次执行如下步骤:

  • 删除“标注(黄色)”之类的标记和后面的(原版书)页码:

    • 搜索:^标注\(.*\)\s*-\s*第\s*\d+\s*页·

    • 替换为空字符

  • 搜索“笔记”并删除后面的(原版书)页码:

    • 搜索:^(笔记\s*-\s*)第\s*\d+\s*页·

    • 替换:\1

  • 将“位置”替换为“P”并将其与下一行合并:

    • 搜索:位置\s*(\d+)\s*\p

    • 替换: P\1

  • 将所有段落设为“Quotations”样式:

    • 搜索:.*

    • 替换:\P{Quotations}

  • 将所有以“笔记”开头的段落设为“Text Body”样式:

    • 搜索:^\s*笔记

    • 替换:\P{Text Body}

上述步骤手动操作起来比较繁琐,我们可以利用AltSearch的批处理模式将其写为脚本。点击AltSearch对话框中的“Batch”按钮:

在如下打开的批处理模式对话框中点击“Edit”,打开文本编辑器编辑脚本。需要注意的是,如果是第一次运行AltSearch,点击“Edit”后会提示使用什么编辑器进行编辑,直接输入编辑器的命令名确认即可(在Linux下可以使用kate,在Windows下用notepad)。

然后,将下面的脚本拷贝到文件末尾“[End]”的前一行即可。

[Name] Process the selected Kindle notes in Chicago format
[Parameters] MsgOff Regular CurrSelection [Find]^标注\(.*\)\s*-\s*第\s*\d+\s*页·
[Replace]
[Command] ReplaceAll [Find]^(笔记\s*-\s*)第\s*\d+\s*页·
[Replace]\1
[Command] ReplaceAll [Find]位置\s*(\d+)\s*\p
[Replace]P\1
[Command] ReplaceAll [Find].*
[Replace]\P{Quotations}
[Command] ReplaceAll [Find]^\s*笔记
[Replace]\P{Text Body}
[Command] ReplaceAll

可以看出,这个脚本的语法非常简单:方括号中的单词表示需要执行的命令,括号之后则为该命令执行所需的参数。目前用到命令有:

  • Name:定义脚本功能名称。

  • Parameters:指定脚本功能执行时的参数,包括:

    • MsgOff:关闭提示信息。

    • Regular:使用正则表达式查找与替换。

    • CurrSelection:仅操作当前选中的文本。

  • Find:指定待查找的文本或正则表达式。

  • Replace:指定需替换的文本或样式

    • \1:反斜线后加一个数字N,表示正则表达式中第N括号中匹配的部分。

    • \P{Paragraph style name}:将名称为“Paragraph style name”的段落样式应用于查找到的文本。该段落样式需事先在LibreOffice Writer中定义好。

  • Command:指定需要执行的命令。ReplaceAll则表示对所有匹配的文本执行替换。

更多AltSearch的功能可以查阅其说明书。

接下来,点击“Refresh”钮,则可以看到刚才新添加进去的脚本功能:

这时,在LibreOffice Writer选中所有需要处理的文本,在AltSearch对话框中选中需要执行的脚本功能,点击“Execute”,便可以完成自动化处理工作。最后,根据个人需要,可以再手动设置Kindle图书中各个章节的标题样式。至此,就可以得到一份漂亮的读书笔记了。

使用AltSearch格式化Kindle读书笔记的更多相关文章

  1. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  2. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  3. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  4. TJI读书笔记17-字符串

    TJI读书笔记17-字符串 不可变的String 重载”+”和StringBuilder toString()方法的一个坑 String上的操作 格式化输出 Formatter类 字符串操作可能是计算 ...

  5. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  6. 读书笔记-Coding faster(英文版)

    读书笔记-Coding faster(英文版) Getting More Productive with Microsoft visual Studio Author: Zain Naboulsi S ...

  7. 读书笔记 之 《阿里巴巴Java开发手册》

    一.前言 这本书主要定义了一些代码的规范以及一些注意事项.我只根据我自己的不足,摘录了一些内容,方便以后查阅. 二.读书笔记 命名 1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符 ...

  8. MacTalk·人生元编程 - 读书笔记

    简介 <MacTalk·人生元编程>是一本随笔文集,主要内容来自作者的微信公众平台"MacTalk By 池建强".本书撰写于2013年,书中时间线却不止于此.作者以一 ...

  9. 《玩转Django2.0》读书笔记-Django配置信息

    <玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...

随机推荐

  1. 番外篇-AppService服务

    一. public async Task<ListResultDto<ArchitectureDto>> GetArchitecture() { var architectur ...

  2. Python——Mysql

    一.导入 import pymysql 二.连接 def connect_wxremit_db(): return pymysql.connect(host='10.123.5.28', port=3 ...

  3. python之内置函数(二)与匿名函数、递归函数初识

    一.内置函数(二)1.和数据结构相关(24)列表和元祖(2)list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素).tuple:将一个可迭代对象转化成元组(如果是字典,默认将k ...

  4. mac/Linux/centos ssh连接服务器以及跳板机,实现类型Xshell 功能

    1. 由于之前一段时间,公司测试服务器需要有跳板机这种操作,由于mac机器上没有类似Xshell这种程序,所以,只能自己造轮子啦. 本程序采用Shell+Expect脚本编写 具体代码请查看:http ...

  5. 记一次504 Gateway Time-out

    使用curl请求是超时,查了下资料原来是端口被占用,造成了死锁,记录下 首先要知道为什么会出现死锁? 在我们访问页面的时候这个端口进程就已经被使用,当我们再在页面中curl请求其他页面因为没有其他的端 ...

  6. 剑指Offer_编程题_24

    题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. /* struct TreeNode { int ...

  7. EF CodeFirst系列(8)--- FluentApi配置单个实体

    我们已经知道了在OnModelCreating()方法中可以通过FluentApi对所有的实体类进行配置,然而当实体类很多时,我们把所有的配置都放在OnModelCreating()方法中很难维护.E ...

  8. canvas绘图工具

    关于canvas绘图,在html页面上太方便了.当然刚开始还是入了不少坑,用了比如jcanvascript等三方插件.真实效果反而不理想,后来就没用插件. 下面是实现效果,可以在线绘制工地图然后传给后 ...

  9. HDU 5965(三行扫雷 dp)

    题意是在一个 3 行 n 列的图上进行扫雷,中间一行没有雷,且中间一行的每一格都会显示周围的雷数,问根据已知的雷数在上下两行设置地雷的方法数. 分析知每一列所填雷数的和与周围的雷数有关,但每列具体的填 ...

  10. LFYZ-OJ ID: 1026 数的计数(数的计算)NOIP2001

    数的计算(数的计数) 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数n).先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 不作任何处理; 在它的左边加上 ...