Tengo un archivo metapost que compilo mediante mpost. Este archivo contiene caracteres especiales que no se pueden mostrar cuando incluyo el archivo en látex. He requerido inputenc utf8 en latex.
¿Alguien sabe una respuesta para esto?
Respuesta1
No dices mucho sobre tu entorno, así que supongo.
Aquí hay tres formas de configurar caracteres Unicode en Metapost.
Látex Tradicional
Para usar UTF8 en tus cadenas de etiquetas, puedes hacer este tipo de cosas:
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.
Para que Metapost pueda utilizarlo latex
para procesar esto, debes compilarlo con:
mpost -tex=latex <filename>
En mi sistema esto produce:
Con esta configuración, debería poder utilizar cualquier carácter Unicode que la utf8
codificación conozca. Puede que le resulte más conveniente convertir el .eps
archivo producido en un .pdf
archivo antes de incluirlo en su .tex
archivo.
LuaLaTeX moderno
Mi preferencia personal hoy es utilizarlo lualatex
para todo el trabajo de Metapost con la luamplib
biblioteca. La ventaja es que consigue que todo el fontspec
entorno funcione para usted y puede utilizar cualquiera de las fuentes OTF adecuadas que haya instalado. Aquí he utilizado Linux Libertine O
como fuente, que tiene definido un buen rango de caracteres Unicode.
\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}
Compilas esto con lualatex <filename>
lo que produce:
Si no está listo para adoptar lualatex
LaTeX como su motor principal, entonces puede hacer lo que he hecho aquí y usar la standalone
clase para generar un archivo PDF independiente para su gráfico MP.
Metapost simple y antiguo
(Realmente no hagas esto...)
Si desea seguir con el antiguo Metapost simple y no usar LaTeX en absoluto, aún es posible admitir al menos un subconjunto de UTF8 con el infont
operador integrado.
Considere el siguiente programa 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.
Esto se puede compilar con el formato antiguo mpost
sin opciones y produce:
pero tenga en cuenta que la rutina simple, rápida y sucia decode
solo admite un subconjunto muy limitado de UTF8, y está convirtiendo lo que hace a ISO8859-1, o más bien a la aproximación cercana a ISO8859-1 que proporciona la 8r
codificación utilizada. con la phvr8r
fuente. Por otro lado es rápido...
Notas
- El bucle principal de
decode
muestra una forma "hábil" de recorrer una cadena. Laincr
macro es de MP simple: aumenta el valor de una variable numérica en 1 y luego devuelve ese valor. Esto es exactamente lo que necesitamos usarsubstring
para leer cada carácter de la cadena.