
複数の形式でエクスポートする必要がある MetaPost コードがあるとします。MetaPost のマニュアルによると、MetaPost 自体は 3 つの異なるファイル タイプ (EPS、SVG、PNG) をエクスポートできます。
出力ファイル形式を指定する「適切な」方法は、ソース ファイルに次の行を追加することです。
outputformat := "svg"
しかし、複数の形式で出力したいので、出力形式を変更するたびにファイルを編集するのではなく、コマンド ライン オプションが必要になります。そこで、次のコマンドを見つけました。
mpost -s 'outputformat="svg"' xxx.mp
しかし、次のような警告が表示されます:
Warning: 'outputformat=0: variable does not exist, assignment ignored.
また、EPS ファイルのみを出力します。主張どおりに SVG ファイルを直接出力するためのコマンドライン オプションはありますか?
答え1
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 が使用していたシェルが二重引用符を「誤って解釈」しているのではないかと思います。二重引用符を 2 つ使用してみてはいかがでしょうか。または、バックスラッシュを使用してはいかがでしょうか。
補足事項
ちなみに、引用符を適切に渡す方法が見つかった場合はmpost
、MP ソースの上部近くにこれを設定することをお勧めします。
outputtemplate := "%j%c.%{outputformat}";
これにより、mpost
現在の出力形式がファイル拡張子として使用されます。これはおそらく必要なことです。