
我一直想知道為什麼 SVG 對於許多文件建立工具來說都是一個問題。例如,MS Office 無法做到這一點,Libre Office 只能使用非常簡單的SVG,據我所知,即使在Latex 中,我們也無法正確使用它們,但它們必須進行轉換,要么手動轉換,然後用作點陣圖圖形,要么透過自動轉換外部工具,例如 InkScape。雖然我喜歡 InkScape,但這並不令人滿意。
特別是 Latex 或 TeX,我期望 SVG 支持,因為學術界有很多人直接或間接使用它,並且非常關注細節,所以必須採用包含 SVG 的解決方法似乎很奇怪在一部作品中。例如,如果 PDF 具有無限縮放功能,且圖表中的線條仍然清晰,而不是像素化的線條,那就太好了,因為 SVG 在用於 PDF 之前已轉換。
那麼為什麼 TeX 後端仍然沒有 SVG 支援呢?實施起來會非常困難嗎?
我對 TeX 後端了解不多,基本上只知道它存在並將您的內容轉換為 PDF 文件,所以這個問題可能很天真。另一方面,每個瀏覽器和幾乎每個圖像檢視器軟體都支援 SVG,所以我認為應該可以實現這一點。也許是因為 PDF 格式本身不支援包含 SVG,因此在 PDF 格式變更之前更改 TeX 後端以允許 SVG 是沒有意義的?
答案1
經典 TeX 不處理任何圖形格式,dvi 檔案僅包含指向 dvi 驅動程式包含的圖形檔案的指標。 TeX 只需要知道要離開的空間,它可以從 BoundingBox 註釋或\includegraphics
.
如果圖形格式是您為文件產生的格式,那麼包含圖形格式(通常)要容易得多,因為 dvi 驅動程式不需要“理解它們”,只需複製到流中,因此例如dvips
可以包含EPS 文件,因為它們只是逐字複製到輸出,類似的jpg 文件,以及某些可以或多或少簡單地轉換為PostScript 位圖的位圖格式。
pdftex 的情況類似,只是它不能處理 EPS 文件,但可以再次處理 PDF 文件,因為如果您正在編寫 PDF,則處理 PDf 會容易得多。
要處理 pdftex 中的 EPS,您需要一個外部 EPS 到 PDF 轉換程序,該程序可以透過 TeX 的 shell 轉義來調用,但在概念上(實際上)是完全獨立的。
SVG 的情況也一樣。如果您正在產生 svg(例如 dvisvgm dvi 驅動程式),則包含 SVG 比包含 EPS 或 PDF 更容易,如果您正在產生 PostScript 或 PDF,則在循環中需要一個轉換程式(通常是 incscape)。同樣,這可能隱藏在 shell 轉義後面,並在需要時從 TeX 呼叫。但是,如果最終目標是包含到 PDF 文件中,您應該將 SVG 轉換為可擴展格式(PDF 或 EPS)而不是點陣圖。
答案2
將自己置於正在編寫 TeX 編譯器的人的立場。有許多程式可以將圖像轉換為一種或另一種格式(inkscape、imagemagick 等convert
);那麼為什麼要花時間支援多種格式,這本質上與從頭開始重新實作轉換器是相同的工作呢?
特別是,SVG 格式包含除了廚房水槽之外的所有東西:從使用背景顏色圖案以自訂字體呈現的彎曲貝塞爾曲線路徑上的雙向中文文本,到成熟的JavaScript 解釋器。噢,太恐怖了。不,謝謝;您的時間最好花在修復錯誤和改進核心功能。
(好吧,大多數轉換器不支援 SVG 的全部功能集,這是同意的,但這個概念仍然有效。)
因此,在實踐中,您只支援一種格式(或可能是一種點陣圖和一種向量格式),並告訴您的使用者使用許多可用的外部工具之一將圖形轉換為該格式。幸運的是,他們中的大多數都是聰明的 UNIX 用戶,因此他們了解 Makefile 或建置腳本。
如果你想成為一個優秀的人,你可以支援從eps
到 的自動轉換pdf
,但即便如此也不是你的責任。或者也許您可以與維護人員聊天latexmk
並請他們介紹自訂依賴項,所以這可以從他們這邊自動化。
長話短說:程式設計師不喜歡重新發明輪子。
答案3
透過以下方式支援建立 SVG 圖形dvisvgm
TeXLive 發行版中的軟體套件。它的工作原理是轉換 DVI 檔案(由tex
和生成,latex
而不是pdftex
和pdflatex
)。