LWN:Sigil 简化了 EPUB 的创建与编辑

关注了就能看到更多这么棒的文章哦~

Joe Brockmeier
 Gemini translation
 原文链接:https://lwn.net/Articles/1054751/ 

以某种标准衡量,创建一个 EPUB (Electronic Publication,电子出版物) 格式的电子书是很简单的。你真正需要的只是一个文本编辑器和几个命令行工具;此外,还需要掌握 XHTML (Extensible Hypertext Markup Language,可扩展超文本标记语言)、CSS (Cascading Style Sheets,层叠样式表) 的实用知识,并了解该格式的结构和必要的 Boilerplate (样板代码)。但要制作一本排版精美且吸引人的电子书就难一些了。不过,使用专门为此目的设计的应用程序可以简化这一过程。Sigil 就是这样一款 EPUB 编辑器,它提供了作者和出版商可能需要的各种工具。 

关于 Sigil

Sigil 基本上是创建和处理 EPUB 格式出版物的一站式商店;它同时支持 EPUB 2 和 EPUB 3 标准。用户通常不会想使用 EPUB 2 创建新出版物,因为它早在 2011 年就被 EPUB 3 取代了,但在处理旧版出版物或为那些可能没有最新电子书阅读器的人创建电子书时,EPUB 2 的支持可能会派上用场。 

它是一款跨平台的桌面应用程序,使用了 Qt 6 框架,主要用 C++ 编写,也包含相当数量的 C 和 Python 代码。这个遵循 GPLv3 (GNU General Public License version 3,GNU 通用公共许可证第三版) 的项目始于 2009 年,当时 Strahinja Marković 作为其计算机科学课程作业的一部分开始了该项目的开发工作。 

自那时起,Sigil 经历了几段沉寂期。其中一段时期导致 Kovid Goyal 在 2013 年为 Calibre 项目创建了一个电子书编辑器,因为当时 Sigil 似乎已经永久停更了。2014 年,当 Kevin Hendricks 和 Doug Massay 接管了该项目的维护工作后,Sigil 的开发得以恢复,该项目目前托管在 GitHub 上。自那以后,两人一直致力于 Sigil 的开发;该项目目前维护活跃,在 2025 年期间发布了八个版本。该应用程序目前已经相当成熟,因此大部分工作集中在细微的新功能、错误修复以及为了跟上依赖项变化而进行的更新。 

文档

当然,Sigil 的用户指南本身就是一个 EPUB 文件。还有一个在线可读版本的用户指南;它的内容与 EPUB 相同,但由 Readium 驱动,Readium 是一个用于在浏览器中显示 EPUB 内容的项目。 

从项目的文档开始查阅总是一个好主意,对于没有太多折腾 EPUB 经验的人来说,阅读 Sigil 的文档尤其重要。该指南不仅提供了 Sigil 功能的参考,还包含了一些简短的教程。例如,它在将 LibreOffice (ODF) 或 Microsoft Word (DOCX) 格式的内容转换为 XHTML 方面提供了非常有用的指导,因为 Sigil 并不直接导入这些格式。 

我建议先从教程开始,然后再回头大致浏览“功能”部分,该部分可以作为 Sigil 界面、工具和功能的良好参考。作为 EPUB 格式的用户指南,它本身也是一个使用 Sigil 的绝佳测试文档。它展示了 EPUB 的结构、格式良好的 CSS 和 XHTML,以及其他元数据文档的范例。 

使用 Sigil

乍一看,Sigil 就像一个带有代码语法高亮功能的简单文本编辑器——事实也确实如此,但它的功能远不止于此。默认布局包括 Sigil 的菜单栏和应用窗口顶部的多个工具栏。在工具栏下方,Sigil 在左侧显示“书籍浏览器”窗格,中间是文本编辑器,右侧是预览窗格,用于显示最终页面的排版效果。当然,这取决于读者的电子书阅读器渲染 EPUB 样式的方式是否与 Sigil 一致,而这通常难以预测。 

用户可以隐藏或移动各种工具栏和预览窗格,但中间的文本编辑器窗格除外。窗格还可以从主窗口中弹出,成为独立的浮动窗口。 

值得注意的是,在内容准备好转换成 EPUB 之前,Sigil 并不是撰写内容或进行协作出版的最佳选择。Sigil 的设计初衷是将内容组装成书,或者对已经是 EPUB 格式的内容进行修饰。该应用程序的编辑器并不是真的为了创作或大量的文稿编辑而设计的;它不是一个令人愉悦的写作环境,在编辑散文方面也不怎么符合人体工程学。它其实只适合进行轻量级编辑和为文本添加标记。 

但这并不意味着 Sigil 没有任何辅助文稿编辑的工具;它拥有一个不错的拼写检查器,并支持通过 PCRE2 库使用 Perl 兼容正则表达式 (PCRE) 进行文本查找和替换。还有一个“已保存搜索”工具,方便用户创建并保存经常使用的查找和替换操作。例如,Sigil 附带了许多示例搜索,用于删除空段落、尾随空格,以及将诸如 em dash ("—") 之类的字符转换为 XHTML 实体 (—)。 

该项目确实提供了一个名为 PageEdit 的独立 XHTML 编辑器,它允许用户在 WYSIWYG (What You See Is What You Get,所见即所得) 编辑器中创建内容。在将书籍章节或类似内容导入 Sigil 进行最终组装之前,PageEdit 更适合进行编写和排版。用户还可以在 Sigil 中使用自己喜欢的外部编辑器;那些喜欢使用 Emacs、nano、Vim 或其他工具的人也可以如愿以偿。对于那些需要一个简单的 WYSIWYG HTML 编辑器用于其他用途的人来说,PageEdit 也值得一试。 

Sigil 最擅长的是将内容组装成 EPUB 格式,对其进行优化以提高读者的可用性,并检查结果以确保出版物符合 EPUB 标准(不过 EPUB 3 需要插件支持)。例如,使用自己喜欢的文本编辑器或文字处理器生成章节的 XHTML 文件并不太难,但创建目录或索引就是另一回事了。幸运的是,Sigil 拥有易于使用的工具来完成这两项工作。 

Sigil 可以根据书中的标题生成目录,因此每个标题标签(

 到 

)都会成为目录中的一个条目。如果这不完全符合你的要求——也许包含 

 和 

 标题会导致条目过多——用户可以选择仅包含特定级别的标题。也可以手动编辑目录,添加或删除条目。   

创建索引是一个更偏向手动过程的工作,但在 Sigil 的帮助下仍然变得容易得多。用户可以标记任何文本,例如人名或对特定程序的引用,并将其选入索引。或者,用户也可以通过 Sigil 的“索引编辑器”工具,将某个单词或文本字符串的所有实例都包含在索引中。不过,最好将这种做法留给较少出现的词汇或名字。一旦所有的文本都已标记或通过编辑器添加到出版物的索引中,Sigil 就可以自动创建一个指向每个条目的索引。这个过程可以根据需要多次重复。 

插件与自动化

Sigil 支持使用 Python 编写的插件来扩展其功能。该项目提供了一个 API (Application Programming Interface,应用程序接口) 指南(同样也有 EPUB 版本),其中包含插件预期结构的信息以及一个插件示例。 

然而,也许并没有必要自己编写插件。目前已经有很多插件提供了人们可能需要的功能,例如导入 DOCX 文件、使用 W3C 的 EPUBCheck 工具验证 EPUB,以及增强 EPUB 的 Accessibility (可访问性) 功能。MobileRead 论坛上有一个可用的插件索引。特别是 EPUBCheck 插件,用户在安装 Sigil 后应立即添加,以便识别错误并确保 EPUB 符合标准。 

如果你正在使用 Sigil 处理大量出版物,那么很可能会有一些适合自动化的操作组合;自然,Sigil 也为此提供了一个工具。用户可以创建由工具操作(例如删除未使用的 CSS 样式)和插件组合而成的自动化任务。 

我最欣赏的功能之一是 Checkpoint (检查点);检查点是 EPUB 在某一时刻的快照。用户可以创建一个检查点,继续处理他们的 EPUB,然后将当前状态与之前的检查点进行对比,查看发生了哪些变化。Sigil 会显示添加或删除了哪些文件,以及哪些文件发生了更改。用户还可以查看检查点之间文件变化的 Diff (差异)。最棒的是,如果需要,用户可以从之前的检查点进行恢复——因此,如果误删了文件,或者需要撤销一系列更改,检查点会非常有用。不过,这种恢复是“全有或全无”的。例如,如果删除了多个文件,Sigil 不支持仅从检查点恢复某一组编辑或某个特定文件。而且,正如 Sigil 会警告的那样,恢复检查点会覆盖项目的当前状态——因此,养成经常创建检查点并在恢复之前将工作保存到新 EPUB 文件中的习惯是个好主意。 

最近发布的 2.7.0 版本改进了 Sigil 元数据编辑器的导航功能,更新了用户自定义自动化操作的菜单,并包含了一系列错误修复。Sigil 项目在每个版本发布时都会提供 AppImage 格式的 Linux 构建版本。该项目还在 GitHub 上引导用户前往 Flathub 下载 Flatpak 构建版本,但显然该项目尚未确认 Flatpak 的所有权,因此它显示为未经验证的应用。大多数主流 Linux 发行版也提供 Sigil 软件包。 

Sigil 项目的支持社区聚集在 MobileRead 论坛上;项目开发者在那里相当活跃。用户可以使用 GitHub Issues 报告错误和其他问题。 

总的来说,我发现 Sigil 很容易上手,尽管有些地方显得有些笨拙。例如,在使用目录编辑器时,无法一次选择多个条目来更改标题级别或将其从目录中彻底删除;只能逐个操作。但是,除去这些小抱怨,它确实是一个制作和处理 EPUB 的理想工具。 

LWN 评论概述:

这些评论讨论了 Sigil 之外的其他电子书制作工具和工作流。 

Pandoc 也可以提供帮助。对于作者来说,在转换过程中使用 Pandoc 将其支持的众多格式转换为 EPUB 可能会有所帮助。虽然自动化转换可能无法生成地道的高质量输出,但它可以作为一个良好的起点。它甚至可以转换 LaTeX,并拥有专门针对此用法的教程页面。Pandoc 同时支持 EPUB v2 和 v3。 

LibreOffice 的 EPUB 导出功能也值得关注。LibreOffice Writer 自 6.0 版本(2018 年初发布)起就支持导出到 EPUB (2)。对于习惯使用字处理软件的用户来说,这可能是为 Sigil 制作输入内容的优选方式。 

  全文完
 LWN 文章遵循 CC BY-SA 4.0 许可协议。 

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

内容概要:本文提出了一种考虑不同充电需求的电动汽车有序充电调度方法,并提供了基于Matlab的完整代码实现。该方法通过构建精细化的数学模型,综合考量电动汽车用户的多样化充电需求,如充电起止时间、目标电量、充电偏好及用户满意度等因素,结合智能优化算法进行求解,实现对大规模电动汽车充电行为的协调控制。研究旨在通过有序调度策略有效平抑电网负荷波动,实现削峰填谷,降低配电网运行压力,提升电力系统运行的经济性稳定性,尤其适用于未来高渗透率电动汽车接入场景下的充电管理需求响应应用。; 适合人群:电气工程、自动化、能源系统及相关领域的科研人员、高校研究生,以及从事智能电网、电动汽车充电管理、能源优化调度等方向的技术人员,需具备一定的Matlab编程能力优化理论基础。; 使用场景及目标:①应用于智能电网中规模化电动汽车集群的有序充电调度能量管理;②支撑科研工作中关于需求响应、负荷调控、分布式资源优化调度等课题的模型构建仿真验证;③为充电运营商或电力公司提供兼顾用户需求电网安全的个性化、智能化充电服务解决方案。; 阅读建议:建议读者结合Matlab代码深入理解算法的具体实现流程,重点分析目标函数的设计思路、多类型约束条件的建模方式以及优化求解器的配置过程,可在此基础上拓展至多目标优化、实时滚动调度或考虑可再生能源不确定性的联合优化研究。
内容概要:本文研究了基于Benders分解的输配电网双层优化模型,旨在解决风电出力等不确定性因素对电网运行带来的挑战。模型采用TSO-DSO协调机制,其中输电网运营商(TSO)作为上层决策者负责全局优化协调,配电网运营商(DSO)作为下层响应者进行本地优化。通过Benders分解算法将原问题分解为主问题子问题,实现双层耦合系统的高效迭代求解,确保计算可行性收敛性。研究涵盖了不确定性建模、双层博弈结构设计、协调变量传递机制及Benders割平面生成逻辑,并提供了完整的Matlab代码实现,具备良好的可复现性工程应用价值。; 适合人群:具备电力系统优化、运筹学理论基础,熟悉Matlab编程语言,从事电力系统规划、调度、可再生能源集成及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握含不确定性因素的输配电网协同优化建模范式;② 深入理解Benders分解在多主体、多层次电力系统优化中的应用原理实现路径;③ 开展高比例可再生能源接入背景下的电网调度仿真、鲁棒/分布鲁棒优化扩展研究及实际工程项目的技术验证; 阅读建议:建议结合Matlab代码逐模块剖析模型构建流程,重点关注主从问题间的变量耦合关系Benders割的构造机制,进一步可引入多场景分析、分布鲁棒优化等高级不确定性处理方法进行模型拓展深化研究。
源码链接: https://pan.quark.cn/s/a4b39357ea24 在深度学习领域,卷积神经网络(Convolutional Neural Network, CNN)是处理序列数据和图像数据的重要工具。 Keras 是一个高级神经网络API,它提供了便捷的方式来构建和训练CNN模型。 本文将深入探讨Keras中的`Conv1D`和`Conv2D`层的区别,帮助读者更好地理解和应用这两个关键组件。 `Conv1D`和`Conv2D`的主要区别在于它们处理的数据维度。 `Conv1D`主要用于一维数据,如时间序列分析、文本分类等,而`Conv2D`则用于二维数据,如图像处理。 1. 数据维度: - `Conv1D`:该层接受一维输入,形状通常是 `(batch_size, time_steps, features)`。 在这里,`time_steps`表示序列的长度,`features`是每个时间步的特征数量。 - `Conv2D`:该层处理二维输入,例如图像,其形状为 `(batch_size, height, width, channels)`。 `height`和`width`代表图像的高度和宽度,`channels`通常对应RGB图像的三个颜色通道或单通道灰度图像。 2. 卷积核(Kernel): - `Conv1D`的卷积核也是一维的,沿着输入的时间轴进行滑动,对每个时间步的特征进行卷积操作。 - `Conv2D`的卷积核是二维的,它同时在图像的高度和宽度方向上滑动,可以捕获空间上的局部特征。 3. 参数设置: - `kernel_size`:对于`Conv1D`,它是一个整数,表示卷积核在时间轴上的跨度。 对于`Conv2D`,它是一个包含两个整数...
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 【华强北悦虎耳机弹窗动画功能nvr升级包】是一款专门为华强北地区生产的悦虎耳机所打造的软件升级解决方案,其核心功能在于为耳机增添或改进弹窗动画的相关特性。在苹果公司的产品中,当无线耳机设备配对时,系统通常会展示一个设计精美的弹窗来展示耳机的当前状态,而这个升级包正是为了使非官方授权的悦虎耳机也能具备类似的功能而设计的。在接下来的内容中,我们将详细分析升级包的操作方法、技术原理以及耳机相关的技术要点。 我们需要明确什么是升级过程。在电子产品的使用领域内,"升级"通常意味着通过软件更新或替换设备的操作系统和固件,以此来改善设备的功能表现、运行效率或视觉呈现。在这个具体场景中,"升级包"指的是一个包含新版本固件和相关配置信息的集合,它用于更新悦虎耳机的内部软件,使其能够支持弹窗动画功能。 悦虎耳机,作为华强北市场上的一种产品系列,其设计往往借鉴苹果AirPods的特点和性能。尽管在物理构造上可能达到了较高的相似程度,但在软件层面,非原装设备往往无法提供正品相同的操作体验,特别是弹窗动画等细节。借助这个升级包,用户可以尝试将这些高级功能移植到他们的悦虎耳机上,从而优化使用感受。 洛达芯片是悦虎耳机及众多华强北AirPods仿制品普遍采用的一种蓝牙音频技术方案。洛达芯片因其可靠的蓝牙连接表现和出色的音质而受到认可,同时也为开发者提供了定制固件的可能性。升级包中的固件很可能就是针对洛达芯片进行特别调优的,目的是为了实现弹窗动画效果。 刷机流程通常包含以下几个环节: 1. 下载并展开升级包:务必确保从正规渠道获取升级包,以防止安装带有不良软件的版本。 2. 连接设备:通过数据线将耳机...
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 JMeter的录制方法及过滤策略、线程组构成要素是什么? JMeter能够借助第三方录制工具(如BadBoy)或其自带的录制功能来完成录制工作,JMeter的录制机制:是借助HTTP代理服务器来捕获用户在操作网站时产生的链接信息。JMeter允许在配置HTTP代理服务器时,排除掉非必要的CSS、GIF等资源,以此减轻不必要的负担。 线程组涵盖:线程组的名称标识、附加注释说明、线程组内的用户数量、线程组完成请求的时间分配、循环执行次数、时间调度机制 【JMeter性能测试详解】 JMeter是一款功能强大的性能测试软件,常用于模拟大规模用户同时访问Web应用,用以衡量系统的性能表现和稳定性。接下来将具体说明JMeter的操作方法、线程组的设置以及性能测试的重要环节。 **JMeter录制过滤** JMeter可以通过BadBoy等外部工具或其自带的HTTP代理服务器来记录用户的行为。其录制原理是JMeter作为HTTP代理,拦截用户浏览器发出的所有网络请求。在配置代理服务器时,能够过滤掉不必要的CSS、GIF等静态资源,以减少无效的负载。 **线程组配置** 线程组是JMeter测试计划的核心部分,包含以下几个关键参数: 1. **线程组名**:用于区分测试计划中的不同测试区域。 2. **注释**:用于记录测试目标或注意事项。 3. **线程数**:用于模拟并发用户的数量。 4. **循环次数**:每个线程需要执行的循环次数,可以设置为无限循环。 5. **Ramp-up period**:规定所有线程启动的时间跨度,旨在平滑增加负载。 6. **定时器**:例如思考时间或...
内容概要:本文研究了一种计及自适应预测修正的微电网模型预测控制(MPC)优化调度方法,并提供了完整的Matlab代码实现。该方法针对微电网中可再生能源(如风电)出力存在的强不确定性问题,引入自适应预测修正机制,有效提升短期预测精度调度决策的可靠性。基于MPC的滚动优化框架,结合实时量测数据对预测偏差进行动态反馈校正,实现了源-荷-储多要素在多时间尺度下的协调优化调度,显著增强了系统的经济性、鲁棒性运行稳定性。研究内容涵盖微电网系统建模、自适应修正策略设计、MPC优化模型构建及仿真验证全流程,具有明确的理论深度工程应用价值。; 适合人群:具备电力系统、自动化、新能源等相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能优化控制、可再生能源集成等方向研究的科研人员、高校研究生及工程技术开发者。; 使用场景及目标:①应用于高比例可再生能源接入的微电网能量管理系统设计;②解决风光发电预测误差引发的调度失配运行风险问题;③实现微电网在不确定环境下的经济高效、安全可靠的优化运行;④为MPC控制策略在能源系统中的落地提供可复现的技术范例。; 阅读建议:学习者应结合所提供的Matlab代码,深入理解MPC滚动优化机制自适应预测修正模块的实现逻辑,建议通过调整预测误差参数、对比有无修正机制的调度效果差异,全面掌握该方法的优势边界适用条件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值