[情报] 一个排版软件与语言的实作+TeXBook笔记

楼主: yoxem (Yoxem)   2025-01-31 01:34:39
其实我快二十年前的高中时期,就对LaTeX这套时而复杂,却功能强大的语言很感兴趣。
后来也曾经想完成类似LaTeX这样的排版软件,也曾经试过使用Typst、SILE等同类
排版语言。中途也曾经想做过排版语言产生PDF的编译器,但一直失败。
后来我看了TeXBook的前半段(双弯路标示的就略过了),做了一些笔记,连结:
https://kianting.info/wiki/w/TeXBook%E7%AD%86%E8%A8%98 (个人笔记)
也藉之了解plainTeX的原理,于是最近这几个礼拜,加上利用春节长达九天的连续假期,
想说把这个排版语言的雏形做完。
==选用语言==
我不想用静态型别语言写这个(处理算法和debug够烦了懒得处理型别问题),Python
又比较慢,于是采用虽然相对少用但声称效率比较快的Julia语言。
因为Julia语言有好用的ParserCombinator函式库,加上取用二进制C生成的函式库也有
打包binding的工具,加上libharu这个C的PDF函式库,不仅弥补Julia没有生成PDF函式
库的问题,还支援UTF-8(只是印出右向左文字,比如希伯来文,就效果不好,阿拉伯文
我没实验过,但想必更惨,我猜不会显示词内字母型态),因为初期目标不想要过于复
杂,所以就优先考虑支援汉字和英文就好。
==实作的功能==
- Knuth-Liang 断字算法(TeXBook 附录H,但我没看)
- 最小崎岖(ragged)度断行算法,但是因为时间等因素,
还没有实作出Glue的fill填空功能
- 用ParserCombinator.jl函式库作出语言分析器(parser),语言有点像是Wikipedia
的排版语言和LISP,只是用直线符号“|”做分隔。
- 操作AST的Pass,所以可以支援中文换行
- 加入英文的断字pattern
- <del>直译器</del>(其实应该是编译器,毕竟产生PDF)
- 也加入类似Glue这样的东西,但是目前只是作为断行用,没有浮动padding
- 生成PDF
==已知使用Library==
- ArgParse 命令列指令分析器
- fontconfig 猜字体路径
- libfreetype 量字图(glyph)尺寸
- libharu PDF生成
- ParserCombinator.jl 分析器
- Match.jl 模式比对
==已知问题==
- 一些token/term(编译器界的术语)还没被解析
- 速度太慢
- 有些测试print没删除
- 四则运算等primitive指令没实作
==下载点与其他说明==
请到我的个人repo:
https://repo.kianting.info/yoxem/uahgi
==备注==
因为这个板应该是最接近这篇文的主旨的看板,所以贴这,如果有问题,
请通知我删除,感谢。
==补充图片==
输入排版语法范例:https://imgur.com/a/kBJTLbn
输出PDF截图:https://imgur.com/a/pr37joQ
作者: sppmg (sppmg)   2025-01-31 03:46:00
很厉害的感觉XD。难得有人选用 Julia 做非资科!

Links booklink

Contact Us: admin [ a t ] ucptt.com