¿Cómo admitir caracteres Unicode en metapost?

¿Cómo admitir caracteres Unicode en metapost?

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 latexpara procesar esto, debes compilarlo con:

mpost -tex=latex <filename>

En mi sistema esto produce:

ingrese la descripción de la imagen aquí

Con esta configuración, debería poder utilizar cualquier carácter Unicode que la utf8codificación conozca. Puede que le resulte más conveniente convertir el .epsarchivo producido en un .pdfarchivo antes de incluirlo en su .texarchivo.

LuaLaTeX moderno

Mi preferencia personal hoy es utilizarlo lualatexpara todo el trabajo de Metapost con la luamplibbiblioteca. La ventaja es que consigue que todo el fontspecentorno funcione para usted y puede utilizar cualquiera de las fuentes OTF adecuadas que haya instalado. Aquí he utilizado Linux Libertine Ocomo 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:

ingrese la descripción de la imagen aquí

Si no está listo para adoptar lualatexLaTeX como su motor principal, entonces puede hacer lo que he hecho aquí y usar la standaloneclase 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 infontoperador 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 mpostsin opciones y produce:

ingrese la descripción de la imagen aquí

pero tenga en cuenta que la rutina simple, rápida y sucia decodesolo 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 8rcodificación utilizada. con la phvr8rfuente. Por otro lado es rápido...

Notas

  • El bucle principal de decodemuestra una forma "hábil" de recorrer una cadena. La incrmacro 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 usar substringpara leer cada carácter de la cadena.

información relacionada