LaTeX 中內容結構與風格的分離?

LaTeX 中內容結構與風格的分離?

在 HTML 中,在過去十年左右的時間裡,人們大力推動內容結構和樣式的完全分離。現在,大多數網站都是使用 HTML 進行結構標記,並使用 CSS 來表示該標記。這使得在相同的內容上應用不同的樣式變得非常容易:如果您不知道它有多強大,請參閱例如http://www.csszengarden.com/。有一個 W3c 文件說明了這一點語意標記和表示標記的分離

我對 LaTeX 比較陌生,但我設計網站已經有一段時間了。是的,他們是不同的領域,但他們都在努力做同樣的事情:好好呈現內容。過去 6 個月的 LaTeX 體驗讓我感覺到這種內容和風格分離的概念在 TeX 世界中並沒有發揮太大作用。例如,要在 HTML+CSS 中定義表格單元格的換行規則,只需向單元格添加一個類,然後向 CSS 文件添加一行即可。在 LaTeX 中,你需要做像這樣可怕的事情

那麼,我是否遺漏了什麼,還是 LaTeX? LaTeX 的設計中是否使用了這種內容與風格分離的概念?只是執行不力嗎?在未來的版本中它可能會得到更好的實現嗎(LaTeX3?ConTeXt?)?

注意:我無意冒犯 LaTeX 開發人員:出於許多其他原因,該系統確實非常好。我只是看到了這個巨大的漏洞,並且很少有圍繞它的討論,我想知道為什麼。

答案1

歷史

Knuth 在 20 世紀 70 年代末編寫了 TeX,因為考慮到他自己的知識和當時可用的技術的限制,他想盡可能地排版材料。人們普遍認為他做得很好,但他肯定不想做的是分離結構和風格。

Lamport 在 20 世紀 80 年代中期編寫了 LaTeX,當時他看到需要更清晰地分離這兩個區域。 LaTeX 在 20 世紀 90 年代初進行了修訂,當前的核心可以追溯到 1994 年(當然,也修復了錯誤)。這比 HTML + CSS 模型早了一段時間,技術限制再次意味著 LaTeX 不可能更複雜。 (1994 年,LaTeX 對於許多 PC 來說幾乎太大了,團隊非常努力地將其壓縮。)

在 HTML 世界中,可以新增標籤,但會被不認識它們的渲染器忽略。 TeX 的情況並非如此:未知的控制序列就是錯誤。因此,我們不能只是添加新概念並期望現有文件能夠發揮作用:這是真的重要的。因此 1994 年所做的決定對今天的 LaTeX 仍然具有重要意義。

ConTeXt 較新,並且確實比 LaTeX“開箱即用”分離出更多的設計。 ConTeXt 也採取了與 LaTeX 不同的穩定性方法,對核心的開發前景更加積極。然而,ConTeXt 方法在某些方面更像普通 TeX,而不是 LaTeX,從某種意義上說,ConTeXt 比 LaTeX 讓設計「更貼近用戶」。

輸入輸出

在 HTML 世界中,文件被完全讀入記憶體以建立用於渲染的 DOM。 TeX 不是這樣運作的,至少除非我們自己編程。相反,TeX 會讀取一行並對其進行處理,然後再轉到下一行。 (LuaTeX 可以改變這一點,但我認為即使在 ConTeXt 中,TeX 模型仍然是主要模型。)因此,改變外觀所需的方法非常不同。

在考慮這個領域時要記住的一個關鍵問題是人們想要的產出是什麼。在 TeX 世界中,我們專注於高品質的排版。因此,幾乎總是會對設計進行一些手動調整以反映內容的現實。這不是「編寫良好」的 HTML 中發生的情況,儘管它可以用 XML 表示,但它肯定打破了嚴格的分離。我和其他人認為這並不是壞事:您確實需要手動幹預才能獲得最佳結果。

表格

問題中特別提到了表格,我認為它們本身就值得考慮。在 HTML 中,表格有多種用途。在 TeX 中,對錶的處理受到更多限制。在 TeX 世界中,表格是出了名的複雜野獸,Knuth 確實指出,它們能夠工作真是太神奇了!在大多數排版文件中,表格主要用於“正式表格”,並且這些表格的“良好”外觀範圍相當有限。因此,不太需要提供全套類似 CSS 的控制項。

正如 canaaerus 在他的回答中所說,TeX 世界不是由一個委員會而是由任何人管理的,因此實現什麼取決於個人使用者的需求。有一系列適用於 LaTeX 的表格包,以及 ConTeXt 方法和\halignplain TeX 中的原始包。然而,他們主要是試圖解決其他問題,這告訴你用戶的優先順序在哪裡。

展望未來

作為 LaTeX3 專案的成員,我知道我們當然正在討論更好地分離內容和設計。這裡值得記住的一個問題是 HTML + CSS 模型並不總是能很好地轉化為我們想要的排版效果。這兩個領域之間存在一些顯著差異,這意味著事情永遠不會那麼簡單。

任何更好的方法都必須與 TeX 配合使用,無論是在程式碼方面還是在介面方面。我們有實驗程式碼處理對象之間的關係('l3ldb'),加上的想法設計“模板”,兩者都在這個區域。

答案2

儘管這種內容和標記的分離對於 TeX 開發人員和使用者來說肯定不陌生,但 TeX 和 HTML 及其社群的工作方式之間存在一些根本差異。

HTML 本質上是集中組織的。有一個委員會(即 W3C)負責制定網路標準。然後,所有 HTML 文件的作者都必須根據這些標準進行編寫,並且 HTML 解釋器(即主要是 Web 瀏覽器)的開發人員必須實現這些標準。

另一方面,對於 TeX,事情的發生卻大不相同。沒有明確的標準。當然,大多數東西都是基於 Knuth 的原始 TeX。但添加了很多東西。例如,現在有不同的巨集包,ConTeXt 和 LaTeX。在那裡你可以很容易地看到,基本語法還沒有固定。任何人都可以說他想使用/巨集而不是\像 LaTeX 那樣。此外,當今使用的許多功能都是作為套件添加的。它們使 TeX 具有極強的可擴展性。

這讓我們看到了差異的技術部分。 TeX 是圖靈完備的!相反,HTML 只是一種標記語言。在 HTML 中,您指定文件的內容、結構和樣式,在 TeX 中,您會編寫如何建立文件的演算法。
當然,在最簡單的情況下,您不必使用複雜的程式設計結構,因此 TeX 文件看起來與用標記語言編寫的沒有什麼不同。但我認為,就這些類型的文件而言,內容和標記的分離在 TeX 中應用得很好。

如果你看這個例子您給出的,這正是文檔不再像標記一樣的點。

答案3

LaTeX 的設計中是否使用了這種內容與風格分離的概念?只是執行不力嗎?

已經用了,也不一定不好已實施(請參閱其他答案以了解歷史觀點)。相反,它是在相當低級

絕對要在 LaTeX 中嚴格分離內容和樣式(事實上我強烈建議這樣做)。但為了做到這一點,您需要利用 LaTeX 定義巨集的功能。

LaTeX 有一個很少語意宏,例如\chapterand \emph(當然還有更多)。有文件類別和套件為您提供更多選項。例如,KOMA-script 類別提供了一整套巨集來客製化LaTeX 提供的語意宏的外觀和感覺。

但實際上,您需要哪種語義很大程度上取決於您正在編寫的文檔類型。因此,有一些文件類別scrlttr2為寫信的特定任務提供語義宏,但這些是例外:LaTeX 不是提供大量高度特定於領域的語義宏,而是提供了一種用於構建特定於領域的宏的語言

最終,您的文件應該沒有實體佈局宏,而只使用語意宏。\textbf?不,使用巨集描述為什麼你想要粗體文字。

因為它們是特定於領域的,所以您需要的大多數巨集可能是由您自己編寫的。這就是為什麼許多 LaTeX 軟體包為您提供了盡可能簡單的工具。例如,有一些套件可以自訂圖形的顯示(或建立自訂圖形類型;請參閱captionfloat);有一些軟體包可以幫助編寫強大的巨集(etoolbox以及大多數 LaTeX3)。還有許多特殊用例的包,例如突出顯示原始程式碼。

有了這些,在大多數情況下,將一組可在整個文件中使用的簡單語義巨集組合在一起相對簡單。儘管如此,我的碩士論文的宏觀定義大約佔整個文件的六分之一(在 SLOC 中,註釋被刪除)。

答案4

我當然同意結構和風格的分離是 LaTeX 和 ConTeXt 的基本優勢之一。也就是說,在實踐中很難避免將它們完全混合。事實證明,只有非常簡單的文件才能將樣式和內容完全分開。即使是一本中等大小的書的現實生活案例,幾乎總是需要一些最後一刻的微調,這有效地破壞了它們的分離。對於我作為出版商來說,實現 100% 分離的最實用的解決方案是始終將內容保留在定義文件結構的 xml 文件中,並將所有與樣式相關的指令放在 ConTeXt 文件中。 ConTeXt 剛好是一個非常實用的 xml 處理器。當然,您可以使用 XSLT 從 xml 中輕鬆建立 LaTeX 文件,如果您願意,也可以使用 LaTeX。在這種情況下,您應該將所有與樣式相關的指令放入您的 xsl 檔案中。

相關內容