使用命令列選項將 MetaPost 檔案匯出為多種格式?

使用命令列選項將 MetaPost 檔案匯出為多種格式?

假設我有一個 MetaPost 程式碼需要匯出為多種格式。根據MetaPost手冊,MetaPost本身可以匯出三種不同的文件類型(EPS、SVG和PNG)。

指定輸出檔案格式的「正確」方法是在來源檔案中新增一行:

outputformat := "svg"

但由於我希望它們具有多種格式,因此我需要一個命令列選項,而不是每次需要更改輸出格式時編輯文件,我發現了以下命令:

mpost -s 'outputformat="svg"' xxx.mp

但我收到這個警告:

Warning: 'outputformat=0: variable does not exist, assignment ignored.

它只會輸出 EPS 檔。是否有一個命令列選項可以使其按照其聲稱的那樣直接輸出 SVG 檔案?

答案1

這似乎是正在呼叫的 shell 的問題mpost,而不是 Metapost 的問題。

在我的主 Mac 系統上,我得到以下資訊:

bash-3.2$ mpost -s outputformat="svg" wavelength.mp
This is MetaPost, version 2.00 (TeX Live 2019) (kpathsea version 6.3.1)
(/usr/local/texlive/2019/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2019/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./wavelength.mp
Warning: outputformat=0: value has the wrong type, assignment ignored.
[1{psfonts.map}<cmr10.pfb>] )
1 output file written: wavelength1.eps
Transcript written on wavelength.log.

這與 OP 遇到的問題相同。

但請注意,我沒有將參數放在-s單引號中。

如果我轉義雙引號,它會按預期工作:

bash-3.2$ mpost -s outputformat=\"svg\" wavelength.mp
This is MetaPost, version 2.00 (TeX Live 2019) (kpathsea version 6.3.1)
(/usr/local/texlive/2019/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2019/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./wavelength.mp [1{psfonts.map
}<cmr10.pfb>] )
1 output file written: wavelength1.svg
Transcript written on wavelength.log.

我還可以用單引號轉義雙引號,這也有效:

bash-3.2$ mpost -s 'outputformat="svg"' wavelength.mp
This is MetaPost, version 2.00 (TeX Live 2019) (kpathsea version 6.3.1)
(/usr/local/texlive/2019/texmf-dist/metapost/base/mpost.mp
(/usr/local/texlive/2019/texmf-dist/metapost/base/plain.mp
Preloading the plain mem file, version 1.005) ) (./wavelength.mp [1{psfonts.map
}<cmr10.pfb>] )
1 output file written: wavelength1.svg
Transcript written on wavelength.log.

我無法存取 Windows 系統進行測試,但我猜 OP 使用的任何 shell 都會「錯誤解釋」雙引號。嘗試將它們加倍嗎?或使用反斜線?

額外說明

順便說一句,如果您能找到正確傳遞引號的方法mpost,您可能希望將其設置在 MP 來源的頂部附近:

outputtemplate := "%j%c.%{outputformat}";

這使得mpost使用當前的輸出格式作為檔案副檔名,這可能是您想要的。

相關內容