
Supongamos que tengo un código MetaPost que debo exportar a múltiples formatos. Según el manual de MetaPost, el propio MetaPost puede exportar tres tipos de archivos diferentes (EPS, SVG y PNG).
La forma "correcta" de especificar el formato del archivo de salida es agregar una línea al archivo fuente:
outputformat := "svg"
Pero como los quiero en múltiples formatos, necesitaría una opción de línea de comando en lugar de editar el archivo cada vez que necesito cambiar el formato de salida, y encontré el siguiente comando:
mpost -s 'outputformat="svg"' xxx.mp
Pero recibo esta advertencia:
Warning: 'outputformat=0: variable does not exist, assignment ignored.
Y solo genera archivos EPS. ¿Existe una opción de línea de comando para que genere directamente archivos SVG como dice?
Respuesta1
Esto parece ser un problema con el shell que llama mpost
en lugar de un problema con Metapost.
En mi sistema Mac principal, aparece esto:
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 es el mismo problema que tuvo el OP.
Pero tenga en cuenta que no puse el argumento -s
entre comillas simples.
Si escapo de las comillas dobles, funciona como se esperaba:
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.
También puedo escapar de las comillas dobles con comillas simples, y esto también 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.
No tengo acceso a un sistema Windows para realizar pruebas, pero supongo que cualquier shell que estuviera usando el OP está "malinterpretando" las comillas dobles. ¿Intentar duplicarlos? ¿O usar barra invertida?
nota adicional
Por cierto, si puedes encontrar la manera de pasar las comillas mpost
correctamente, quizás quieras configurar esto cerca de la parte superior de tu fuente MP:
outputtemplate := "%j%c.%{outputformat}";
Esto hace que mpost
utilice el formato de salida actual como extensión de archivo, que probablemente sea lo que desea.