
여러 형식으로 내보내야 하는 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.
이는 OP와 동일한 문제입니다.
-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
현재 출력 형식을 파일 확장자로 사용하게 되는데, 이는 아마도 원하는 것일 것입니다.