mpost를 통해 컴파일하는 메타포스트 파일이 있습니다. 이 파일에는 라텍스에 파일을 포함할 때 표시할 수 없는 특수 문자가 포함되어 있습니다. 라텍스에 inputenc utf8이 필요했습니다.
이에 대한 답을 아는 사람이 있나요?
답변1
당신은 당신의 환경에 대해 많이 말하지 않으므로 추측합니다.
Metapost에서 유니코드 문자를 설정하는 세 가지 방법은 다음과 같습니다.
전통 라텍스
레이블 문자열에 UTF8을 사용하려면 다음과 같이 하면 됩니다.
prologues := 3;
outputtemplate := "%j%c.eps";
verbatimtex
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
etex
beginfig(1);
label.top(btex sprichwörtlichen etex, origin);
draw (left--right) scaled 2cm;
endfig;
end.
이를 처리하는 데 사용할 Metapost를 얻으려면 latex
다음을 사용하여 컴파일해야 합니다.
mpost -tex=latex <filename>
내 시스템에서는 다음이 생성됩니다.
utf8
이 설정을 사용하면 인코딩이 알고 있는 모든 유니코드 문자를 사용할 수 있습니다 . 생성된 파일을 파일 에 포함하기 전에 파일 .eps
로 변환하는 것이 더 편리할 수 있습니다 ..pdf
.tex
최신 LuaLaTeX
lualatex
오늘 제가 개인적으로 선호하는 것은 라이브러리를 사용한 모든 Metapost 작업에 사용하는 것입니다 luamplib
. 장점은 전체 fontspec
환경이 자신에게 맞게 작동하고 설치된 적절한 OTF 글꼴을 사용할 수 있다는 것입니다. 여기에서는 Linux Libertine O
다양한 범위의 유니코드 문자가 정의된 글꼴을 사용했습니다 .
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
label.top("☞ sprichwörtlichen", origin);
draw (left--right) scaled 2cm;
endfig;
\end{mplibcode}
\end{document}
이것을 컴파일하면 lualatex <filename>
다음이 생성됩니다.
기본 LaTeX 엔진으로 채택할 준비가 되지 않은 경우 lualatex
여기에서 수행한 작업을 수행하고 standalone
클래스를 사용하여 MP 그래픽용 독립 실행형 PDF 파일을 생성할 수 있습니다.
구식 일반 Metapost
(진짜 이러지 마세요...)
LaTeX를 전혀 사용하지 않고 구식 일반 Metapost를 사용하고 싶다면 내장된 infont
연산자를 사용하여 최소한 UTF8의 하위 집합을 지원할 수 있습니다.
다음 MP 프로그램을 고려하십시오.
prologues := 3;
outputtemplate := "%j%c.eps";
def U primary s = if string s: decode(s) fi enddef;
vardef decode(expr given) =
save a, i, s, out; string s, out; numeric a, i;
out = ""; i=0;
forever:
s := substring (i, incr i) of given;
a := ASCII s;
if a < 128:
elseif a = 194:
s := substring (i, incr i) of given;
elseif a = 195:
s := char (64 + ASCII substring (i, incr i) of given);
else:
s := "?";
fi
out := out & s;
exitif i >= length given;
endfor
out
enddef;
beginfig(1);
defaultfont := "phvr8r";
label.top(U"sprichwörtlichen", origin);
draw (left--right) scaled 2cm;
endfig;
end.
mpost
이는 옵션 없이 일반 old로 컴파일할 수 있으며 다음을 생성합니다.
그러나 간단하고 빠르고 더러운 루틴은 UTF8의 매우 제한된 하위 집합만 지원하며 수행하는 작업을 ISO8859-1로 변환하거나 사용된 인코딩 decode
에서 제공하는 ISO8859-1에 가까운 근사치로 변환한다는 점에 유의하세요. 글꼴 8r
과 함께 phvr8r
. 반면 속도는 빠르다..
노트
- 의 메인 루프는
decode
문자열을 단계별로 실행하는 "매끄러운" 방법을 보여줍니다. 매크로incr
는 일반 MP에서 가져온 것입니다. 숫자 변수의 값을 1만큼 증가시킨 다음 해당 값을 반환합니다. 이것이 바로substring
문자열의 각 문자를 읽는 데 사용해야 하는 것입니다 .