mpost でコンパイルした metapost ファイルがあります。このファイルには、latex でファイルをインクルードしたときに表示できない特殊文字が含まれています。latex で inputenc utf8 が必要になりました。
これに対する答えを知っている人はいますか?
答え1
あなたは自分の環境についてあまり語っていないので、推測しているだけです。
Metapost で Unicode 文字を設定する方法は 3 つあります。
伝統的なラテックス
ラベル文字列で 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>
私のシステムでは、次の結果が生成されます:
この設定を使用すると、エンコードが認識するすべての Unicode 文字を使用できるようになります。生成されたファイルをファイルに変換する前に、それをファイルに含める方utf8
が便利な場合があります。.eps
.pdf
.tex
最新の LuaLaTeX
lualatex
現在、私の個人的な好みは、Metapost のすべての作業にライブラリを使用することですluamplib
。利点は、環境全体が機能し、インストールされている適切な OTF フォントを使用できることです。ここでは、適切な範囲の Unicode 文字が定義されている フォントをfontspec
使用しました。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 をまったく使用しない場合でも、組み込み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
これはオプションなしでplain old でコンパイルでき、次の結果が生成されます。
ただし、このシンプルで手抜きのdecode
ルーチンは UTF8 の非常に限られたサブセットのみをサポートしており、変換は ISO8859-1、またはフォント8r
で使用されるエンコーディングによって提供される ISO8859-1 に近いものに変換されることに注意してくださいphvr8r
。その一方で、これは迅速です...
ノート
- のメイン ループは、
decode
文字列をステップスルーする「巧妙な」方法を示しています。マクロは単純な MP からのもので、数値変数の値を 1 増やし、その値を返します。これは、文字列内の各文字を読み取るためにincr
使用する必要があるものとまったく同じです。substring