LaTeX 實現「合字」或「合詞」效果的嘗試
合字,是種特殊的書寫、排版方式,就是以特殊的合併形式一起展示不同的字元等等,以求簡潔、方便或美觀等等。無論中西,都有其相應合字實踐。比如,西文排版將f和i合併起來(見下圖)。再比如,漢字中「不」和「正」合成「歪」。諸如此類。
圖系引用
如果計算機的字符集及字型檔裡包含我們想用的合字,那當然方便。諸如「㍿」之類。
此外,現代排版還常需組合起來特定的文字,以避免斷開或缺失。這一需求,當然可以其他方式來解決,不過這裡也可藉助我所嘗試的方式。
xelatex的生僻字處理這篇博文介紹了造生僻字的第三種方法,「
倉頡造字
」。它藉助「盒子」以組合原來獨立的諸字元。
我利用這一方法,並加以發揮,嘗試實現瞭如下合併效果:
這三句話,字數未必相等,排版卻能「對齊」。
我把實現之的程式碼分享出來(已刪無關內容),供大家參考:
\documentclass{ctexart}
\usepackage{graphicx}
\begin{document}
鄧先生說,\hbox{\lower-1。0ex\hbox{\scalebox{1}[0。4]{黑}}\lower。1ex\hbox{\kern-1em \scalebox{1}[0。5]{貓}}}白貓,抓到老鼠就是好貓。
他的\hbox{\scalebox{0。5}[1]{黑}\scalebox{0。5}[1]{貓}}論意義深遠,以實用主義打擊\hbox{\lower-。75ex\hbox{\scalebox{0。33}[0。5]{斯大林}}\lower。2ex\hbox{\kern-1em\scalebox{0。5}[0。5]{主義}}}。
一般說來,建設\hbox{\lower-。75ex\hbox{\scalebox{0。5}[0。5]{社會}}\lower。2ex\hbox{\kern-1em\scalebox{0。5}[0。5]{主義}}},需要高度的生產力。
\end{document}
kern指物件水平方向平移,lower指物件垂直方向平移。這裡,對kern、lower而言,分別是正值指往右或下,負值指往左或上。
scalebox中的花括號{}、方括號[]中的數值,分別影響字元的縱、橫方向的比例變化。這些值也可是負數,茲不詳述。