XeLaTeX の Unicode 数学から ConTeXt の Typescript へ

XeLaTeX の Unicode 数学から ConTeXt の Typescript へ

次のXeLaTeXの宣言を翻訳する方法を検索します(unicode-mathパッケージに基づく)

\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}

ConTeXt のタイプスクリプトに。セリフ、サンセリフ、モノフォントの設定は成功しましたが、数式の設定については助けが必要です。

\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

前もって感謝します。

PS: の同等のものを知っている人はいますかScale=MatchLowercase?rscale私が使用した は、XeLaTeX によって生成されたログ ファイルからのものです。

編集。コメントで示唆されているように、これはフォールバックベースのソリューションの始まりですが、驚くべきことに機能しません。

\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

答え1

Libertine にはすでに TypeScript が定義されています。Libertine で見栄えのよい TeXGyre Pagella Math を取得するには、まず次のように Pagella をロードします。

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

\starttext
foo $bar$
\stoptext

フォントは次のとおりです:

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

答え2

解決方法は次のとおりです。ConTeXt の最新バージョンが必要になることに注意してください。次の例では、Libertine、Liberation、Latin Modern Mono の代わりに、Baskervald、Corbel、Ubuntu Mono を使用します。混合数学フォントは Pagella Math をベースにします。

まず、Opentype 数学フォント内の数学グリフのコードを知っておく必要があります。たとえば、MS Word の文字テーブルにあります。Pag​​ella Math の場合、次のようになります。

  • 0x30-0x39 = 0-9
  • 0x41-0x5A = 直立ローマンAZ
  • 0x61-0x7A = 直立ローマン az
  • 0x1D434-0x1D44D = イタリック体ローマンAZ
  • 0x1D44E-0x1D467 = イタリック体ローマンaz
  • 0x1D400-0x1D419 = 直立太字ローマン AZ
  • 0x1D41A-0x1D433 = 直立太字ローマン az
  • 0x1D468-0x1D481 = 斜体太字ローマン AZ
  • 0x1D482-0x1D49B = 斜体太字ローマンaz
  • 0x1D5A0-0x1D5B9 = 直立サンセリフ AZ
  • 0x1D5BA-0x1D5D3 = 直立サンセリフ az
  • 0x1D608-0x1D621 = イタリックサンセリフ AZ
  • 0x1D622-0x1D63B = イタリックサンセリフaz
  • 0x1D5D4-0x1D5ED = 直立太字サンセリフ AZ
  • 0x1D5EE-0x1D607 = 直立太字サンセリフ az
  • 0x1D63C-0x1D655 = 斜体太字サンセリフ AZ
  • 0x1D656-0x1D66F = 斜体太字サンセリフ az
  • 0x1D670-0x1D689 = 直立モノ AZ
  • 0x1D68A-0x1D6A3 = 直立モノaz

ここで、フォールバック メカニズムとオフセット オプションを使用してマッピングを実行します。

\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

関連情報