
Предположим, у меня есть код 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
использовать текущий выходной формат в качестве расширения файла, что, вероятно, вам и нужно.