Экспортируете файлы 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

Похоже, что это проблема с оболочкой, которая вызывается, 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.

та же проблема, что и у ОП.

Но обратите внимание, что я не заключил аргумент -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, "неправильно интерпретирует" двойные кавычки. Попробуйте удвоить их? Или использовать обратную косую черту?

Дополнительное примечание

Кстати, если вы сможете найти способ правильно передавать кавычки mpost, вы можете установить это в верхней части исходного кода MP:

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

Это позволяет mpostиспользовать текущий выходной формат в качестве расширения файла, что, вероятно, вам и нужно.

Связанный контент