2014-08-16

答琮: 字符表示的方法及其它

本文 Context 見歐洲動態的這篇網誌。 寫在這裡的原因是估計這個留言會較長, 又會被 blogspot 關小黑屋。 琮同學習慣讀繁體字(或者他們叫做正體字),所以這篇就用 “正體字” 寫,請各位習慣讀簡體字的朋友見諒。

--------------------------------------------------

首先, 大家已經用慣了的普通鍵盤上大概有 100 多個鍵,不可能包含世界上所有的字符。 從文本輸入的角度講, 就必須使用一些符號代碼去表示這 100 多個鍵之外的字符。 用 Unicode 的編碼去表示希臘字母 / 中文字符,或者用 \alpha 表示希臘字母  “α” / 用 \cong 表示 “琮”, 其實不過是直接間接的區別而已。 只要你在文件的設定命令中指定用 Unicode 的字符集, TeX 的源碼文件編譯以後, 所有的字符都是用 Unicode (比如 U1234, U2345 等等) 在機器上儲存的。 至於在屏幕上顯示為 “α”, 是操作系統的字符顯示系統讀了 TeX 文件裡的 Unicode 以後, 再到所加載的 font 的碼表中找到相應的 “矢量圖形” (就是 “α” 這個字符) 在屏幕上畫出來的。  我把這個流程極度簡化以後畫了一個圖表:



我是寫應用程序的, 不是系統軟件專家, 估計圖中字符顯示的最後一步應該是 “畫” 在PostScript 文件或者 pdf 文件裡,而不一定是屏幕上。 但就是這麼個大意。 我是想說, Unicode 碼實質上就是輸入輸出之間轉換用的 key。 

而 Unicode 的碼表太過龐大, 估計沒有人能記得住全部字符的代碼,為了 TeX code 寫作的方便, 就約定使用  \alpha \sigma 之類的符號來間接表示那個 Unicode 字符, 這純粹是為了人寫作的方便。 我估計你其實是想在你的論文文件裡直接寫 “α” 這個字符而不是直接寫 0XCE 0XB1, word 那類軟件的毒你中得太深,XD。 不是每台電腦上都裝有希臘字母的輸入法啦,就算裝了也不是人人都懂怎樣調用, 我倒覺得 \alpha \sigma 這樣的表示方法其實很方便用戶哦。 另外, 在 TeX 源文件裡是可以用中文輸入法寫中文的,不必用 \cong 的。 其實純文本文件裡寫希臘文也是可以, 只是, 為了保證數學表達式的通用可讀可見性 (也就是說,在沒有安裝希臘字符集的機器上都可以令人明白 TeX 源文件中那些數學表達式都寫了些什麼),數學式子裡用一下 \alpha \sigma 這樣的表示方法也是情有可原的嘛。



我覺得, 上面我們討論的這一點, 只是 TeX 的使用中,枝節中的枝節。 我覺得 TeX 跟 word 相比, 最大的好處是把文本文件的結構,語義和它的外觀給分離了。 這樣, 我寫論文的時候就可以先專心於內容, 完了以後 compile, 如果生成的 pdf 文件哪裡不好看, 可以通過一些外觀設定命令來給文件化妝。 用 word 就不是這樣的, 我在寫作的時候, 無法在文件裡直觀地看到文件的結構 (在 TeX 源文件裡你可以直接看到, 這裡是 \chapter, 那裡是 \section, \subsection,  而再那裡則是 \equation, \figure \table  \list。。。。。), 而且一直一直被文件的外觀分心, 有時多打一個空行就會令後面的全部內容面目全非而掙扎半天沒法修復。 雖然是所謂 “所見即所得” 的編輯器,可是在我眼裡就像黑盒子一樣到處都是 puzzle 十分神秘。 結構性不強,段落和功能模塊難以操控使用也就算了,最終生成的打印文件還遠沒有 TeX 做的那麼美觀。 字母與字母之間的距離,詞與詞之間的距離, 行與行之間的距離, 不知為何看著就是不太舒服。 好多書籍就是用 TeX 寫作以後直接付印的, 但是你有聽說過多少書籍用 word 格式寫作以後直接拿去印刷的嗎? 一般還要用別的 DTP 軟件再處理過的吧? 可以想像示芒那份報紙用 word 排版嗎? 但是我可以想像那份報紙用 TeX 排版。 只是,那樣一來, 需要一位精通 TeX 編程的程序師寫版面的框架, 而且每一位編輯都必須會使用 TeX,  似乎好像對 staff 的要求有點高。 所以一般編輯部裡沒有用 TeX。 但是科學界的絕大多數學術期刊就是直接用 TeX 排版的, 不少學術期刊都規定了只收 TeX 格式的投稿, 他們的網站上提供相應的 TeX 模板下載。

你說的那個 dynamic scoping 啊? 其實有時也可以是一種很方便的特性啦。 這裡有一篇不長的文章, 簡單說了一下它的利弊。 文章摘要:

Dynamic scoping does have some advantages:
  • Certain language features are easier to implement.
  • It becomes possible to extend almost any piece of code by overriding the values of variables that are used internally by that piece.
These advantages, however, come with a price:
  • Since it is impossible to determine statically what variables will be accessible at a particular point in a program, the compiler cannot determine where to fi nd the correct value of a variable, necessitating a more expensive variable lookup mechanism. With static scoping, variable accesses can be implemented more effi ciently, as array accesses.
  • Implicit extensibility makes it very diffi cult to keep code modular: the true interface of any block of code becomes the entire set of variables used by that block.

我比較感興趣的是,為什麼你感到 LaTeX 的這個特性不好用呢? 我可能是 TeX 用得不夠多, 印象中不記得哪些命令的調用會令我產生很大的 suprise。 如果你忙就不必理的, 你的功課比較要緊。 你幾時畢業呢?

1 comment:

  1. 謝謝你費心打了那麼長一段文章,還特地翻譯成繫體...其實就算是簡體我也看得懂啦XD

    謝謝你一開始詳細解釋字碼輸入和顯示的原理...
    用你的例子寫的話,就是在對我而言用 CEB1 或 \alpha 都是一樣的...
    它們是經過處理之後就會變成 "α" 的字串,但它們都不是 "α"...
    當我想要 "α" ,而我在螢幕上有一個 "α" 時,我可以把它複製貼上到任何可以顯示 Unicode 的應用程式中,任何瀏覧器, 通訊軟體, 文書軟體, 排版軟體, 試算表, 檔案名稱... 中,而所有看到 "α" 的人都可以看到跟我看到的一樣的東西,而不需要編譯或用自己的腦編譯或處理任何編譯錯誤。
    所以對我來說,Linux的LaTeX輸入法是可接受的,因為輸入完成後我可以看到 "α" ;我可以接受比較複雜的符號用複製貼上來輸入,事實上,去年修程式語言課時,還不清楚在Emacs輸入 "⟩" 的組合建時,我開心的用複製貼上輸入 "⟩" 一學期;我也可以接受用LyX...但我就是不喜歡整篇文章都用 \alpha 代替 "α",它們看起來一點都不像,而且會干擾到我用符號來順利思考...

    關於把文本中語義和外觀分離,或換句話說,在文章中記錄語義結構,是很好的想法。事實上,我最近用 MS Word 時,也會僅量用 Styles 之類的記下文章的格式之類的... 不過話說回來,有需要時全部取代也很方便的...

    我不確定 dynamic scoping 是否相關... 雖然 package 沒那麼常衡突,但有時衡突偵錯很久就很討厭了... 然後就會開始想,為什麼只是打文件也要 debug ...

    畢業的話...還要一陣子吧,明年肯定是不行的~~

    ReplyDelete