[情報] 一個排版軟體與語言的實作+TeXBook筆記
其實我快二十年前的高中時期,就對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
--
"After all, you only find out who is swimming naked when the tide goes out."
(總是,水洘了後,汝才知誰赤裼咧泅水。)
----Warren Buffett, 2001
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.96.245.216 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/LaTeX/M.1738258499.A.05E.html
※ 編輯: yoxem (27.96.245.216 臺灣), 01/31/2025 01:47:29
推
01/31 03:46,
5天前
, 1F
01/31 03:46, 1F
※ 編輯: yoxem (27.96.245.216 臺灣), 01/31/2025 11:41:08
推
02/05 09:44,
12小時前
, 2F
02/05 09:44, 2F
LaTeX 近期熱門文章
PTT數位生活區 即時熱門文章