
假設我有一個 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
使用當前的輸出格式作為檔案副檔名,這可能是您想要的。