為什麼現代 TeX 變體不支援浮點運算?

為什麼現代 TeX 變體不支援浮點運算?

據我了解,在設計 TeX 時,沒有可用的浮點計算單一標準。但是,現在有了 IEEE 754。

當然,有 LuaTeX,但 IEEE 754 早在這之前就很流行,所以這個問題是有道理的。

答案1

回答這樣的問題很困難,因為「為什麼不」的記錄通常比「為什麼」的記錄更難獲得。然而,我們可以重建一個合理的事件鏈。

Knuth 編寫 TeX 來解決一個特定問題:排版電腦程式設計的藝術。雖然他確實使 TeX 圖靈完備,但他創建文件的模型非常接近 TeX 輸入與排版:查看原始程式碼教材例如,很明顯有一種方法可以「解析」資訊。 Knuth 的用例很大程度上也不是那些可能使用 FPU 之類的東西的用例。因此,他沒有在這個領域擴展 TeX 也就不足為奇了。

(這與提到向後相容性一樣好。添加新的原語總是有可能破壞某些東西,正如某些用戶\fpexpr自己定義的那樣。但是,像 TeX90 這樣的存檔穩定產品的更大風險是任何改變都可能在其他地方帶來新的錯誤:「如果它沒有壞,就不要修復它」是一個指導思想。

高德納之後的引擎開發人員都有他們感興趣的特定問題。不能輕鬆解決排版本身以外的問題。浮點工作並不真正屬於這個範圍:對於任何「嚴肅」的東西,人們可能會合理地期望在專業工具中進行預處理。

如果我們看看引擎開發方面的主要努力,我們會發現添加 FPU 作為特定目標不太可能。按大致時間順序排列這些想法

  • e-TeX 增加了支援 TeX 程式設計的非常通用的想法(\protected、新的暫存器範圍、ETC。)它建立在 TeX90 中現有的想法之上。這裡至關重要的是,雖然\numexpr添加了等,但它們提供了一些運算符(+, -, *, /, (, )),只有括號不直接映射到現有原語。 FPU 必須涵蓋更多內容
  • e-TeX 還添加了「接近」排版的程式碼,例如將寡婦/孤兒控制擴展到多行,添加\middle,ETC。:所有這些都與所需的 FPU 支援相距甚遠
  • pdfTeX 添加了直接 PDF 輸出,同時還包括各種實用程式添加,其中大多數都是來自支援庫的微不足道的想法暴露(例如經過的時間)
  • XeTeX(和先前的專案)擴展了 TeX 以支援 Unicode:專注於字元範圍,並包含處理一系列腳本的想法
  • XeTeX 還添加了對系統字體的支援:同樣,沒有與 FPU 工作的鏈接
  • LuaTeX 執行上述操作並使用 Lua 公開 TeX 的內部結構:添加 FPU 是整合後者的結果,但並不是這些努力的主要驅動力

因此,總的來說,我們可以看到,對於實際從事引擎工作的人來說,在 LuaTeX 之前沒有明顯的地方可以添加 FPU。此外,用戶社群的推動也很少。人們可以在巨集中執行一系列近似操作,例如,請參閱該trig套件,它將支援一般排版的浮點數。做更複雜的工作往往最好被視為專業工具的工作:排版好看的結果很棒,但如果你想做更多的分析,你可能需要一種互動式方法。諸如pgfplotsdo 之類的套件使得使用 TeX 來完成此類工作變得更加容易(這是我的工作流程),但除了人們可能指出的一系列複雜的排版挑戰之外,FPU 支援相當小眾。

(我認為還值得注意的是,在沒有某些庫支援的情況下實現全系列的 FP 功能並非易事:我是根據l3fp工作經驗來發言的。這項工作對引擎開發專家的吸引力可能很低:做它在宏觀層面是一個有趣的智力挑戰!

答案2

歸根結底,它扼殺了向後相容性的神聖牛,唐納德·高德納 (Donald Knuth) 本人在視頻中對此進行了最好的解釋穩定性對於 TeX 的重要性

相關內容