
Suponha que eu tenha um código MetaPost que precise ser exportado para vários formatos. De acordo com o manual do MetaPost, o próprio MetaPost pode exportar três tipos de arquivos diferentes (EPS, SVG e PNG).
A maneira "correta" de especificar o formato do arquivo de saída é adicionar uma linha ao arquivo de origem:
outputformat := "svg"
Mas como os quero em vários formatos, precisaria de uma opção de linha de comando em vez de editar o arquivo toda vez que precisar alterar o formato de saída, e encontrei o seguinte comando:
mpost -s 'outputformat="svg"' xxx.mp
Mas recebo este aviso:
Warning: 'outputformat=0: variable does not exist, assignment ignored.
E só gera arquivos EPS. Existe uma opção de linha de comando para gerar arquivos SVG diretamente como afirma?
Responder1
Este parece ser um problema com o shell que está chamando, mpost
e não com o Metapost.
No meu sistema Mac principal, recebo isto:
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.
que é o mesmo problema que o OP teve.
Mas observe que não coloquei o argumento -s
entre aspas simples.
Se eu escapar das aspas duplas, funcionará conforme o esperado:
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.
Também posso escapar das aspas duplas com aspas simples, e isso também funciona:
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.
Não tenho acesso a um sistema Windows para testar, mas acho que qualquer shell que o OP estava usando está "interpretando mal" as aspas duplas. Tente dobrá-los? Ou usando barra invertida?
Nota extra
Aliás, se você conseguir encontrar uma maneira de passar as aspas mpost
corretamente, você pode querer definir isso próximo ao topo da sua fonte MP:
outputtemplate := "%j%c.%{outputformat}";
Isso faz com que mpost
o formato de saída atual seja usado como extensão de arquivo, que provavelmente é o que você deseja.