什麼是 Metapost/Metafont?

什麼是 Metapost/Metafont?

靈感來自為什麼 Metapost 受到歧視?, 我想了解 Metapost遠的比我現在更好。我只知道Metapost是一種描述圖形的語言,而Metafont是專門用來描述字體的。

那什麼是 Metapost/Metafont?

  • Metafont/Metapost 是否有類似的語法,如名稱所示?
  • 流行的 TeX 發行版中是否包含使用和編譯它們的工具?
  • 這些系統有類似「Hello World」的東西嗎? (整個網站上都可以找到 Metapost 的各種範例,但似乎沒有那麼多 Metafont。)
  • pdfTeX 可以輕鬆使用 Metafont 建立的字體嗎?
  • (Metapost 也是如此,但該網站上的多個範例似乎不言自明)

答案1

  1. METAFONT 是由 Knuth 設計的,旨在成為 TeX 的伴侶。它的工作是根據“數學描述的”形狀生成字體。 METAFONT 的輸出是點陣圖字形的集合;透過設定合適的參數,如果字元的描述很仔細,則可以調整輸出以適應任何特定的列印設備(例如解析度非常重要,但這不是需要注意的獨特方面)。

  2. Metapost是直接源自METAFONT的程式;它最初由 John Hobby 編寫,他為 METAFONT 做出了寶貴的貢獻。所以,是的,它們的語法是相似的:語言實際上是相同的,但Metapost 添加了幾個基元和資料類型(RGB 和CMYK 顏色分別是METAFONT 中未使用的三元組和四元組) 。相反,METAFONT的一些功能在Metapost中是沒有意義的

  3. Metapost 的輸出是 Postscript 的簡單形式,這是兩個程式之間的主要區別:Metapost 的輸出是向量圖形,而 METAFONT 只輸出光柵。

  4. Metapost 可以與 TeX 互動以取得字元度量並在其輸出中包含類型。這在 METAFONT 中是不可能的(嗯,有一些 TUGboat 論文描述了 METAFONT 的巧妙用法)。

  5. METAFONT 所建立的字體可以與 一起使用pdftex:Knuth TeX 中所有可能的功能也可以與 一起使用pdftex。然而,字體是點陣圖,因此如果想要良好的輸出,就必須產生它們的高解析度版本;pdftex為此有幾個原語:\pdfpkresolution用於\pdfpkmode從來源產生按需位圖。

  6. Metapost 的輸出是(封裝的)Postscript,可以直接包含在latex;但是,由於它使用一組受限的 Postscript 函數,因此它也可以pdflatex透過一組最初為 ConTeXt 編寫的 TeX 巨集包含在其中。

  7. METAFONT 的「Hello world」可以在 METAFONTbook 中找到,但它並不像 (La)TeX 的類似測試文件那麼簡單。

  8. Metapost 的「Hello world」可以「輕鬆」編寫。寫出以下hello.mp文件:

    prologues:=3;                % include all fonts
    outputtemplate:="%j-%c.mps"; % output file will be hello-1.mps
    beginfig(1);
    draw(0,0)--(3cm,0)--(3cm,3cm)--(0,3cm)--cycle;
    label(btex Hello world! etex, (1.5cm,1.5cm));
    endfig;
    end.
    

    運行mpost hello然後epstopdf hello-1.mps進行hello-1.pdf預覽

    在此輸入影像描述

Metapost 的完整文件可在 TeX 發行版中找到(對於 TeX Live do texdoc metapost)。

答案2

直覺的視覺概覽 -http://www.metaflop.com/modulator- 確保打開解剖學。

在此輸入影像描述

答案3

為了擴展 Herbert 的評論並作為 egreg 的補充,這裡有一個代碼片段,它將允許人們直接MetaPost在 LuaLaTeX 中處理程式碼,而不需要外部工具,部分感謝luamplib,Lua 庫的包/支援接口mplib,MetaPost 的嵌入式版本:

\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
label ("Insert MP code here", (10,10));
endfig;
\end{mplibcode}
\end{document}

相關內容