De las matemáticas Unicode de XeLaTeX al texto mecanografiado de ConTeXt

De las matemáticas Unicode de XeLaTeX al texto mecanografiado de ConTeXt

Busco una manera de traducir la siguiente declaración de XeLaTeX (basada en el unicode-mathpaquete)

\setmainfont{Linux Libertine G}
\setsansfont[Scale=MatchLowercase]{Liberation Sans}
\setmonofont[Scale=MatchLowercase,
  ItalicFont=lmmono10-italic.otf,
  BoldFont=lmmonolt10-bold.otf,
  BoldItalicFont=lmmonolt10-boldoblique.otf,
  SmallCapsFont=lmmonocaps10-regular]{lmmono10-regular.otf}
\setmathfont[Scale=MatchLowercase]{TeX Gyre Termes Math}
\setmathfont[Scale=MatchLowercase, range=\mathup]{linlibertine_r_g.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathbfup]{linlibertine_rz_g.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathsfup]{liberationsans-regular.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathsfit]{liberationsans-italic.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathbfsfup]{liberationsans-bold.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathbfsfit]{liberationsans-bolditalic.ttf}
\setmathfont[Scale=MatchLowercase, range=\mathtt]{lmmono10-italic.otf}
\setmathfont[Scale=MatchLowercase, range=\mathscr]{asana-math.otf}

en un texto mecanografiado de ConTeXt. Logré configurar las fuentes serif, sansserif y mono; pero necesito ayuda para la configuración matemática.

\startenvironment liberty
  \starttypescript [liberty]
    \definefontsynonym [Serif] [file:LinLibertine_R_G]
    \definefontsynonym [SerifCaps] [Serif] [features=smallcaps]
    \definefontsynonym [SerifItalic] [file:LinLibertine_RI_G]
    \definefontsynonym [SerifSlanted] [SerifItalic]
    \definefontsynonym [SerifBold] [file:LinLibertine_RZ_G]
    \definefontsynonym [SerifBoldItalic] [file:LinLibertine_RZI_G]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]

    \definefontsynonym [Sans] [file:LiberationSans-Regular]
    \definefontsynonym [SansCaps] [Sans] [features=smallcaps]
    \definefontsynonym [SansItalic] [file:LiberationSans-Italic]
    \definefontsynonym [SansSlanted] [SansItalic]
    \definefontsynonym [SansBold] [file:LiberationSans-Bold]
    \definefontsynonym [SansBoldItalic] [file:LiberationSans-BoldItalic]
    \definefontsynonym [SansBoldSlanted] [SansBoldItalic]

    \definetypeface [liberty] [rm] [serif] [liberty] [default]
    \definetypeface [liberty] [ss] [sans] [liberty] [default] [rscale=0.816]
    \definetypeface [liberty] [tt] [mono] [modern] [default]
    \definetypeface [liberty] [mm] [math] [times] [default] [rscale=0.958]
  \stoptypescript
  \setupbodyfont[liberty, 10pt]
\stopenvironment

Gracias de antemano.

PD: ¿Alguien sabe cuál es el equivalente Scale=MatchLowercase? Los rscalemensajes de correo electrónico que utilicé provienen del archivo de registro producido por XeLaTeX.

EDITAR. Como se sugiere en un comentario, este es el comienzo de una solución alternativa que, sorprendentemente, no funciona.

\startenvironment liberty
  \starttypescript [serif] [liberty]
    \definefontsynonym [Serif] [file:LinLibertine_R]
    \definefontsynonym [SerifCaps] [Serif] [features=smallcaps]
    \definefontsynonym [SerifItalic] [file:LinLibertine_RI]
    \definefontsynonym [SerifSlanted] [SerifItalic]
    \definefontsynonym [SerifBold] [file:LinLibertine_RZ]
    \definefontsynonym [SerifBoldItalic] [file:LinLibertine_RZI]
    \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
  \stoptypescript

  \starttypescript [sans] [liberty]
    \definefontsynonym [Sans] [file:LiberationSans-Regular]
    \definefontsynonym [SansCaps] [Sans] [features=smallcaps]
    \definefontsynonym [SansItalic] [file:LiberationSans-Italic]
    \definefontsynonym [SansSlanted] [SansItalic]
    \definefontsynonym [SansBold] [file:LiberationSans-Bold]
    \definefontsynonym [SansBoldItalic] [file:LiberationSans-BoldItalic]
    \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
  \stoptypescript

  \starttypescript [math] [liberty]
    \definefontfallback [asserif] [Serif] [0x0030-0x0039] % Digits
    \definefontfallback [asserif] [Serif] [0x0041-0x005a] % Latin capital letters
    \definefontfallback [asserif] [Serif] [0x0061-0x007a] % Latin small letters
    \definefontsynonym [MathRoman] [file:texgyretermes-math] [fallbacks=asserif]
  \stoptypescript

  \definetypeface [liberty] [rm] [serif] [liberty] [default]
  \definetypeface [liberty] [ss] [sans] [liberty] [default] [rscale=0.816]
  \definetypeface [liberty] [tt] [mono] [modern] [default]
  \definetypeface [liberty] [mm] [math] [liberty] [default] %[rscale=0.958]
  \setupbodyfont[liberty, 10pt]
\stopenvironment

Respuesta1

para Libertine ya existe un texto mecanografiado definido. Para obtener TeXGyre Pagella Math, que se ve bien con Libertine, cargue Pagella primero:

\setupbodyfont[pagella]
\setupbodyfont[libertine,12pt]

\starttext
foo $bar$
\stoptext

las fuentes son:

voss@shania:~> pdffonts zz.pdf
name                              type        encoding   emb sub uni object ID
--------------------------------- ----------- -------------- --- --- ---------
RSSLOW+LinLibertineO              CID Type 0C Identity-H yes yes yes     18  0
TQYEHR+TeXGyrePagellaMath-Regular CID Type 0C Identity-H yes yes yes     19  0

Respuesta2

Aquí está la solución. Cuidado, necesitarás una versión reciente de ConTeXt. En el siguiente ejemplo, usaré Baskervald, Corbel y Ubuntu Mono en lugar de Libertine, Liberation y Latin Modern Mono. Nuestra fuente matemática mixta se basará en Pagella Math.

En primer lugar, se debe conocer el código de los glifos matemáticos dentro de una fuente matemática Opentype. Se encuentran, por ejemplo, en la tabla de caracteres de MS Word. Para Pagella Math tenemos:

  • 0x30-0x39 = 0-9
  • 0x41-0x5A = AZ romano vertical
  • 0x61-0x7A = az romana vertical
  • 0x1D434-0x1D44D = AZ romano en cursiva
  • 0x1D44E-0x1D467 = az romana en cursiva
  • 0x1D400-0x1D419 = AZ romano en negrita vertical
  • 0x1D41A-0x1D433 = az romana en negrita vertical
  • 0x1D468-0x1D481 = AZ romano en negrita cursiva
  • 0x1D482-0x1D49B = cursiva negrita az romana
  • 0x1D5A0-0x1D5B9 = vertical sans serif AZ
  • 0x1D5BA-0x1D5D3 = vertical sans serif az
  • 0x1D608-0x1D621 = cursiva sans serif AZ
  • 0x1D622-0x1D63B = cursiva sans serif az
  • 0x1D5D4-0x1D5ED = vertical negrita sans serif AZ
  • 0x1D5EE-0x1D607 = vertical negrita sans serif az
  • 0x1D63C-0x1D655 = cursiva negrita sans serif AZ
  • 0x1D656-0x1D66F = cursiva negrita sans serif az
  • 0x1D670-0x1D689 = mono AZ vertical
  • 0x1D68A-0x1D6A3 = vertical mono az

Ahora usamos el mecanismo alternativo y la opción de compensación para hacer el mapeo:

\startenvironment liberty
    % 0x30-0x39 = 0-9 within both Pagella Math and Baskervald
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd] [0x30-0x39] [force=yes]
    % 0x41-0x5A = upright roman A-Z within both Pagella Math and Baskervald
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd] [0x41-0x5A] [force=yes]
    % 0x61-0x7A = upright roman a-z within both Pagella Math and Baskervald
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd] [0x61-0x7A] [force=yes]
    % 0x1D434-0x1D44D = italic roman A-Z
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd-Italic] [0x41-0x5A] [offset=0x1D434-0x1D44D, force=yes]
    % 0x1D44E-0x1D467 = italic roman a-z
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd-Italic] [0x61-0x7A] [offset=0x1D44E-0x1D467, force=yes]
    % 0x1D400-0x1D419 = upright bold roman A-Z
    \definefontfallback [baskervaldmath] [file:BaskervaldADFStd-Bold] [0x41-0x5A] [offset=0x1D400-0x1D419, force=yes]
    % etc.
    % Type script
    \starttypescript [serif] [liberty]
        \definefontsynonym [Serif] [file:BaskervaldADFStd]
        \definefontsynonym [SerifCaps] [Serif] [features=smallcaps]
        \definefontsynonym [SerifItalic] [file:BaskervaldADFStd-Italic]
        \definefontsynonym [SerifSlanted] [SerifItalic]
        \definefontsynonym [SerifBold] [file:BaskervaldADFStd-Bold]
        \definefontsynonym [SerifBoldItalic] [file:BaskervaldADFStd-BoldItalic]
        \definefontsynonym [SerifBoldSlanted] [SerifBoldItalic]
    \stoptypescript
    \starttypescript [sans] [liberty]
        \definefontsynonym [Sans] [file:corbel]
        \definefontsynonym [SansCaps] [Sans] [features=smallcaps]
        \definefontsynonym [SansItalic] [file:corbeli]
        \definefontsynonym [SansSlanted] [SansItalic]
        \definefontsynonym [SansBold] [file:corbelb]
        \definefontsynonym [SansBoldItalic] [file:corbelz]
        \definefontsynonym [SansBoldSlanted] [SansBoldItalic]
    \stoptypescript
    \starttypescript [mono] [liberty]
        \definefontsynonym [Mono] [file:UbuntuMono-R]
        \definefontsynonym [MonoCaps] [Mono] [features=smallcaps]
        \definefontsynonym [MonoItalic] [file:UbuntuMono-RI]
        \definefontsynonym [MonoSlanted] [MonoItalic]
        \definefontsynonym [MonoBold] [file:UbuntuMono-B]
        \definefontsynonym [MonoBoldItalic] [file:UbuntuMono-BI]
        \definefontsynonym [MonoBoldSlanted] [MonoBoldItalic]
    \stoptypescript
    \starttypescript [math] [liberty]
        \definefontsynonym [MathRoman] [file:texgyrepagella-math] [fallbacks=baskervaldmath]
    \stoptypescript
    \definetypeface [liberty] [rm] [serif] [liberty] [default] [features=default]
    \definetypeface [liberty] [ss] [sans] [liberty] [default] [features=default, rscale=0.95]
    \definetypeface [liberty] [tt] [mono] [liberty] [default] [features=default, rscale=0.88]
    \definetypeface [liberty] [mm] [math] [liberty] [default] [features=default]
    \setupbodyfont [liberty, 12pt]
\stopenvironment

información relacionada