https://github.com/logcreative/beamerboost
Dirty-Frame and Parallel Rendering Implementation for LaTeX Beamer Preview
https://github.com/logcreative/beamerboost
beamer latex
Last synced: 3 months ago
JSON representation
Dirty-Frame and Parallel Rendering Implementation for LaTeX Beamer Preview
- Host: GitHub
- URL: https://github.com/logcreative/beamerboost
- Owner: LogCreative
- License: lppl-1.3c
- Created: 2022-04-17T04:49:29.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-05-11T18:23:54.000Z (about 3 years ago)
- Last Synced: 2025-02-14T12:17:36.533Z (5 months ago)
- Topics: beamer, latex
- Language: Lua
- Homepage:
- Size: 84 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# BeamerBoost
LaTeX `beamer` 文档类的**脏帧渲染**与**并行渲染**的预览级实现,借助于 [`l3build`](https://github.com/latex3/l3build) (lua) 和 [PowerShell](https://docs.microsoft.com/powershell/) 实现。
## 使用方法
```shell
l3build doc
```
以及可以使用 VS Code 预先配置的 `Recipe: preview`。为了使用并行渲染,请安装 PowerShell 7 并添加到路径(`pwsh` 在命令行中可以运行,以及需要允许脚本运行),否则将回退到非并行渲染。
```shell
l3build clean
```
将清理所有的临时文件。## 概览
```mermaid
flowchart TD
E[Expand Input] --> S[Split Frames] --> P[Precompile Header] --> D[Decide Dirty Frames]
D --> Frame0
D --> Frame3
Frame0 --> M[Merge Frames]
Frame1 --> M
Frame2 --> M
Frame3 --> M
M --> C[Clean Up]
```## 测评
在四逻辑核机器上测试。
|| BeamerBoost | LaTeXmk | BeamerBoost 修改一帧 | LaTeXmk 修改一帧 |
|---|---|---|---|---|
|帧渲染完成时间(s)| 45 | | 8 | |
|全部合成完成时间(s)| 57 | 16 | 14 | 14 |从该表可以看出,使用 BeamerBoost 不能够减少初始化时间(甚至成倍的增长了),但是通过脏区渲染,可以较早地拿到所有帧的数据,虽然最后的合并阶段仍然同样依赖于 I/O 的速度,但对于构建一些实用软件而言,每次渲染预览少了几秒,按照每个文件可能会构建 100 次计算,将会减少 10 分钟的构建时间。
| | BeamerBoost (每帧渲染两次) | BeamerBoost (每帧渲染两次) 修改一帧 |
|---|---|---|
|帧渲染完成时间(s)| 80 | 10 |
|全部合成完成时间(s)| 93 | 16 |在 `build.lua` 文件中可以更改 `secondpass` 参数用于编译两次之用,用于编译目录等用途。该表依然显示如果不进行合并,时间仍然会有节省。并行渲染对于大型多核服务器可以更好地发挥其效能,这种拆分工作的方式也可以用于分布式计算。
## 目前缺陷
- `allowframebreak` 可能会导致页码错误(无法预估)
- 仅支持 `pdflatex`,因为 `xelatex` 和 `lualatex` 的 OpenType 字体载入无法通过 `mylatexformat` 缓存,但是愿景依然是在预览完毕后,再通过较慢的方式渲染一遍。为了获得全平台中文支持(Linux 或 Mac),你可能需要使用 `CJK` 手动方法。(事实上 `xelatex` 在类 Unix 平台上的速度要比 Windows 上快得多,可以不需要再用这种并行渲染的方式。)
```latex
\documentclass{beamer}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK}{UTF8}{gbsn}
中文内容
\end{CJK}
\end{document}
```
- 需要工整的代码,也就是一行只有一个命令。
- 太过复杂的代码可能无法解析,请保证代码能够用正常的编译方式正常通过。
- 文档类中预置的 `\AtBeginPart`, `\AtBeginSection`, `\AtBeginSubsection`, `\AtBeginSubsubsection` 命令将会被全部清空,请显式地在主文件添加相关命令,并且不区分是否带星号的版本(可选参数无效),这类命令的最后一个大括号必须单独占一行。## 相关项目
[AutoBeamer](https://github.com/LogCreative/AutoBeamer) 用于转换 Markdown 为 beamer 代码。
[ReportBoost](https://github.com/LogCreative/ReportBoost) 用于准备一个开箱即用的预编译环境。