「Digital Typography筆記」修訂間的差異
跳至導覽
跳至搜尋
Tankianting(討論 | 貢獻) |
Tankianting(討論 | 貢獻) |
||
行 1: | 行 1: | ||
{{Nav|程式語言、邏輯學}} | |||
{{Book|Donald Knuth|9781575860107}} | {{Book|Donald Knuth|9781575860107}} | ||
於 2023年12月5日 (二) 01:05 的最新修訂
這本高德納書主要講到一些排版演算法以及字型和 TeX 相關的東西。
對於想要重複發明輪子,開發排版系統的人,這本書有他一定的幫助也說不定。
第1章與第2章
講到一些排版的歷史,以及一些排版不美觀的案例,但是後來高德納發現,排版可以用演算法來表示。
書裏面提到box和glue的概念,段落、行、字元都是box,中間用glue做填充墊,glue定義(space 正常大小, stretch 伸長係數, shrink 收縮係數)。
如果中間有,那當,
就可以拉伸,
就可以收縮。
其中上二式 。
- 斷行演算法
W 為最終呈現大小,w 為盒子寬度和,z為最小允許收縮量和,x為允許伸長量和,則:
是壞度函數,詳細定義如下:
1 if W = w 1 + 100 * ((W - w)/y)^3 if W > w 1 + 100 * ((w - W)/z)^3 if w - z <= W < w ∞ if W < w - z
利用可拉伸的 glue,可以製作強迫靠右、靠左等等的效果。
可以設置懲罰點 penalty points
假設有 n 個斷行點(連字號、空白),則f(x)即爲到x的總換行代價,b(i,j)為以自i到j為一行的壞度,則:
f(0) = 0 f(j) = min {from 0<= i < j} f(i) + (b(i,j)^2), for 1 <= j <= n+1
作者提到古代的字型設計師使用幾何方法來設計字型,並提出最適曲線的特性:
- 無異性:線配合點移動放大尺寸
- 對稱性:組成圈的形狀若是從 x_1, x_2, ... x_n 變成 x_n, x_1, x_2, ..., x_(n-1),線性不變
- 擴展性:線上加上一個點不改變解。
- locality:任何曲線的片段現行取決於其起訖和起點的上一個點和訖點的下一個點,共計四點。
- 平滑性:沒有尖點。
- 圓潤性:如果z_1, z_2, z_3, z_4 在圓形上,那最適曲線就是圓形。
但是不可行。所以提出應用近似解(p.42)。後來作者用這種形式,做成 Metafont,有許多參數,可以調整字型的呈現。
Ch3 自動斷行
p.67序言 p.68:hyphenation(連字號斷字)和justification(換行平整)
形式化問題 一個段落長這樣: x1, x2, ... , xm x_i可為glue、peanalty、box