Exportando arquivos MetaPost em vários formatos usando opções de linha de comando?

Exportando arquivos MetaPost em vários formatos usando opções de linha de comando?

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, mposte 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 -sentre 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 mpostcorretamente, você pode querer definir isso próximo ao topo da sua fonte MP:

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

Isso faz com que mposto formato de saída atual seja usado como extensão de arquivo, que provavelmente é o que você deseja.

informação relacionada