Ich habe eine Metapost-Datei, die ich über mpost kompiliere. Diese Datei enthält Sonderzeichen, die nicht angezeigt werden können, wenn ich die Datei in Latex einbinde. Ich habe inputenc utf8 in Latex erforderlich.
Weiß jemand eine Antwort darauf?
Antwort1
Sie sagen nicht viel über Ihre Umgebung, also ist das nur eine Vermutung.
Hier sind drei Möglichkeiten, Unicode-Zeichen in Metapost festzulegen.
Traditionelles Latex
Um UTF8 in Ihren Beschriftungszeichenfolgen zu verwenden, können Sie Folgendes tun:
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.
Damit Metapost latex
dies verarbeiten kann, müssen Sie es mit folgendem kompilieren:
mpost -tex=latex <filename>
Auf meinem System erzeugt dies:
Mit dieser Einstellung sollten Sie alle Unicode-Zeichen verwenden können, die die utf8
Kodierung kennt. Möglicherweise ist es praktischer, die .eps
erstellte Datei in eine .pdf
Datei zu konvertieren, bevor Sie sie in Ihre .tex
Datei einfügen.
Modernes LuaLaTeX
lualatex
Ich persönlich bevorzuge es heute , für alle Metapost-Arbeiten die Bibliothek zu verwenden luamplib
. Der Vorteil besteht darin, dass die gesamte fontspec
Umgebung für Sie arbeitet und Sie alle von Ihnen installierten OTF-Schriftarten verwenden können. Hier habe ich Linux Libertine O
die Schriftart verwendet, die eine gute Auswahl an Unicode-Zeichen definiert hat.
\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}
Sie kompilieren dies, wodurch lualatex <filename>
Folgendes entsteht:
Wenn Sie noch nicht bereit sind, es lualatex
als Ihre primäre LaTeX-Engine zu übernehmen, können Sie es so machen wie ich hier und die standalone
Klasse verwenden, um eine, äh, eigenständige PDF-Datei für Ihre MP-Grafik zu generieren.
Altmodischer, schlichter Metapost
(Tu das wirklich nicht ...)
Wenn Sie beim altmodischen, einfachen Metapost bleiben und LaTeX überhaupt nicht verwenden möchten, ist es dennoch möglich, mit dem integrierten infont
Operator zumindest eine Teilmenge von UTF8 zu unterstützen.
Betrachten Sie das folgende MP-Programm:
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.
Dies kann mit dem normalen Verfahren mpost
ohne Optionen kompiliert werden und erzeugt:
aber beachten Sie, dass die einfache, schnelle und einfache decode
Routine nur eine sehr begrenzte Teilmenge von UTF8 unterstützt und das, was sie tut, in ISO8859-1 konvertiert, oder eher in die enge Annäherung an ISO8859-1, die durch die 8r
mit der Schriftart verwendete Kodierung bereitgestellt wird phvr8r
. Andererseits ist es schnell...
Anmerkungen
- Die Hauptschleife
decode
zeigt eine „elegante“ Möglichkeit, einen String durchzugehen. Dasincr
Makro stammt aus einfachem MP: Es erhöht den Wert einer numerischen Variablen um 1 und gibt dann diesen Wert zurück. Das ist genau das, was wir verwenden müssen,substring
um jedes Zeichen im String zu lesen.