MetaPost-Dateien mithilfe von Befehlszeilenoptionen in mehrere Formate exportieren?

MetaPost-Dateien mithilfe von Befehlszeilenoptionen in mehrere Formate exportieren?

Angenommen, ich habe einen MetaPost-Code, der in mehrere Formate exportiert werden muss. Laut MetaPost-Handbuch kann MetaPost selbst drei verschiedene Dateitypen exportieren (EPS, SVG und PNG).

Die „richtige“ Art, das Ausgabedateiformat anzugeben, besteht darin, der Quelldatei eine Zeile hinzuzufügen:

outputformat := "svg"

Da ich sie aber in mehreren Formaten haben möchte, bräuchte ich eine Befehlszeilenoption, anstatt die Datei jedes Mal zu bearbeiten, wenn ich das Ausgabeformat ändern muss, und ich habe den folgenden Befehl gefunden:

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

Aber ich bekomme diese Warnung:

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

Und es gibt nur EPS-Dateien aus. Gibt es eine Befehlszeilenoption, um SVG-Dateien direkt auszugeben, wie es behauptet?

Antwort1

Dies scheint eher ein Problem mit der aufrufenden Shell mpostals ein Problem mit Metapost zu sein.

Auf meinem Haupt-Mac-System erhalte ich Folgendes:

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.

Das ist das gleiche Problem, das der OP hatte.

-sBeachten Sie jedoch, dass ich das Argument nicht in einfache Anführungszeichen gesetzt habe .

Wenn ich die Anführungszeichen maskiere, funktioniert es wie erwartet:

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.

Ich kann die doppelten Anführungszeichen auch durch einfache Anführungszeichen ersetzen, und das funktioniert auch:

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.

Ich habe keinen Zugriff auf ein Windows-System, um es zu testen, aber ich vermute, dass die Shell, die der OP verwendet hat, die Anführungszeichen „falsch interpretiert“. Versuchen Sie, sie zu verdoppeln? Oder einen Backslash zu verwenden?

Zusätzlicher Hinweis

Wenn Sie übrigens eine Möglichkeit finden, die Anführungszeichen richtig weiterzugeben mpost, können Sie Folgendes oben in Ihrer MP-Quelle einfügen:

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

Dadurch wird mpostdas aktuelle Ausgabeformat als Dateierweiterung verwendet, was wahrscheinlich Ihr Wunsch ist.

verwandte Informationen