Verwenden Sie die Schriftart Fira Code mit Ligaturen in Codeauflistungen

Verwenden Sie die Schriftart Fira Code mit Ligaturen in Codeauflistungen

Ich möchte dieFira-CodeOTF-Schriftart für Codeauflistungen und Wortblöcke, die über schöne Ligaturen verfügt. Die Schriftart wird mit der folgenden Zeile korrekt geladen:

\setmonofont{FiraCode-Regular}

Aber ich bekomme die Ligaturen nicht zum Laufen, egal wie viele Kombinationen von [Ligatures={X}]oder [RawFeatures={X}]ich ausprobiere.

Gibt es eine Möglichkeit, sie zum Laufen zu bringen xelatex?

Antwort1

Zunächst müssen Sie sicherstellen, dass Fira Code auf Ihrem Computer installiert ist (was sicher bereits der Fall ist).

Die Schriftfunktionen, die Fira Code verwendet, sind eigentlich nicht als Ligaturen im OTF aufgeführt, scheinen aber unterKontextuellesUm diese Schriftfunktionen zu verwenden, müssen Sie lediglich die entsprechenden Kontextelemente aktivieren:

\documentclass{article}

\usepackage{fontspec}
\setmonofont[
  Contextuals={Alternate}
]{Fira Code}

\begin{document}
\begin{verbatim}
           .= .- := =:=
        == != === !== =/=

    <<- <-- <- <-> -> --> ->>
<=< <<= <==    <=> => ==> =>> >=>
    >>= >>- >-     -< -<< =<<
        <~~ <~ ~~~ ~> ~~>

     <<< << <= <>  >= >> >>>
            <| <|> |>

            <$ <$> $>
            <+ <+> +>
            <* <*> *>

       \\ \\\ {- -} // ///
          /* /** **/ */ 
      </ <!-- www  --> />
      0xF  9:45  m-x *ptr

       ;; ;;; :: ::: !! !!!
       ?? ??? %% %%% && &&& 
       || ||| .. ... ..< []
       -- --- ++ +++ ** ***

          ~= ~- -~ =~ ~@
        ^= ?= /= /== |= ||=
           ## ### ####
         #{ #[ #( #? #_ #_(


a*b a*A B*b A*B *a *A a* A*
a-b a-A B-b A-B -a -A a- A-
a+b a+A B+b A+B +a +A a+ A+
a:b a:A B:b A:B :a :A a: A:
\end{verbatim}
\end{document}

Ausgabe

Beachten Sie, dass ich immer noch versuche herauszufinden, warum bestimmte Ersetzungen funktionieren (wie .=), andere jedoch nicht (wie ). Ich vermute, dass es an der Konvertierung vom ASCII-Bindestrich in einen anderen Bindestrich .-liegen könnte .-

Nur als Referenz, die Ligaturen von Fira Code sind:

Referenz

Die „fehlenden“ Ligaturen können durch Entfernen der Zeichen erhalten werden, verbatimdie speziell behandelt werden sollen, da herkömmliche TeX-Schriftarten über Ligaturen verfügen. Dies fontspecgilt standardmäßig nicht für die Monospace-Schriftart, sodass bei einer Neudefinition auf Leerzeichen Ligatures=TeXkein Risiko besteht .\verbatim@noligs@list

\documentclass{article}

\usepackage{fontspec}

\setmonofont[
  Contextuals={Alternate}
]{Fira Code}

\makeatletter
\def\verbatim@nolig@list{}
\makeatother


\begin{document}

\begin{verbatim}
           .= .- := =:=
        == != === !== =/=

    <<- <-- <- <-> -> --> ->>
<=< <<= <==    <=> => ==> =>> >=>
    >>= >>- >-     -< -<< =<<
        <~~ <~ ~~~ ~> ~~>

     <<< << <= <>  >= >> >>>
            <| <|> |>

            <$ <$> $>
            <+ <+> +>
            <* <*> *>

       \\ \\\ {- -} // ///
          /* /** **/ */ 
      </ <!-- www  --> />
      0xF  9:45  m-x *ptr

       ;; ;;; :: ::: !! !!!
       ?? ??? %% %%% && &&& 
       || ||| .. ... ..< []
       -- --- ++ +++ ** ***

          ~= ~- -~ =~ ~@
        ^= ?= /= /== |= ||=
           ## ### ####
         #{ #[ #( #? #_ #_(


a*b a*A B*b A*B *a *A a* A*
a-b a-A B-b A-B -a -A a- A-
a+b a+A B+b A+B +a +A a+ A+
a:b a:A B:b A:B :a :A a: A:
\end{verbatim}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Es ist auch möglich, Fira Code in ConTeXt zu verwenden. Allerdings scheinen dort nicht alle Ligaturen zu funktionieren. Leider habe ich keine Ahnung, warum.

\definefontfeature
  [firacode-ligs]
  [mode=node,
   calt=yes]

\starttypescriptcollection[firacode]

  \starttypescript [mono] [firacode]
    \definefontsynonym [FiraCodeBold]    [file:FiraCode-Bold.otf]    [features=firacode-ligs] 
    \definefontsynonym [FiraCodeLight]   [file:FiraCode-Light.otf]   [features=firacode-ligs] 
    \definefontsynonym [FiraCodeMedium]  [file:FiraCode-Medium.otf]  [features=firacode-ligs] 
    \definefontsynonym [FiraCodeRegular] [file:FiraCode-Regular.otf] [features=firacode-ligs] 
    \definefontsynonym [FiraCodeRetina]  [file:FiraCode-Retina.otf]  [features=firacode-ligs] 
  \stoptypescript

  \starttypescript [mono] [firacode] [name]
    \setups[font:fallback:mono]
    \definefontsynonym [Mono]     [FiraCodeRegular]
    \definefontsynonym [MonoBold] [FiraCodeBold]
  \stoptypescript

  \starttypescript [firacode]
    \definetypeface [\typescriptone] [rm] [serif] [modern]   [default] [features=default]
    \definetypeface [\typescriptone] [ss] [sans]  [modern]   [default] [features=default]
    \definetypeface [\typescriptone] [tt] [mono]  [firacode] [default]
    \definetypeface [\typescriptone] [mm] [math]  [modern]   [default] [features=default]
  \stoptypescript

\stoptypescriptcollection

\setupbodyfont[firacode]

\starttext

\starttyping
           .= .- := =:=
        == != === !== =/=

    <<- <-- <- <-> -> --> ->>
<=< <<= <==    <=> => ==> =>> >=>
    >>= >>- >-     -< -<< =<<
        <~~ <~ ~~~ ~> ~~>

     <<< << <= <>  >= >> >>>
            <| <|> |>

            <$ <$> $>
            <+ <+> +>
            <* <*> *>

       \\ \\\ {- -} // ///
          /* /** **/ */ 
      </ <!-- www  --> />
      0xF  9:45  m-x *ptr

       ;; ;;; :: ::: !! !!!
       ?? ??? %% %%% && &&& 
       || ||| .. ... ..< []
       -- --- ++ +++ ** ***

          ~= ~- -~ =~ ~@
        ^= ?= /= /== |= ||=
           ## ### ####
         #{ #[ #( #? #_ #_(


a*b a*A B*b A*B *a *A a* A*
a-b a-A B-b A-B -a -A a- A-
a+b a+A B+b A+B +a +A a+ A+
a:b a:A B:b A:B :a :A a: A:
\stoptyping

\stoptext

Bildbeschreibung hier eingeben

verwandte Informationen