在程式碼清單中使用帶有連字的 Fira Code 字體

在程式碼清單中使用帶有連字的 Fira Code 字體

我想使用費拉代碼用於程式碼清單和逐字區塊的 OTF 字體,具有漂亮的連字。使用以下行可以正確載入字體:

\setmonofont{FiraCode-Regular}

但無論我嘗試多少種[Ligatures={X}]或 的組合,我都無法讓連字發揮作用。[RawFeatures={X}]

有什麼辦法讓他們一起工作嗎xelatex

答案1

首先,您需要確保您的電腦上安裝了 Fira Code(我確信您已經安裝了)。

Fira Code 使用的字體功能實際上並未在 OTF 中列為連字,但似乎屬於情境。為了使用這些字體功能,只需啟用適當的上下文即可:

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

輸出

請注意,我仍在試圖弄清楚為什麼某些替換有效(例如.=),但其他一些則不起作用(例如.-)。我懷疑可能是-從 ASCII 破折號轉換為其他破折號。

僅供參考,Fira 程式碼中的連字是:

參考

verbatim「缺少」的連字可以透過刪除想要以特殊方式處理的字元來獲得,因為傳統的 TeX 字體有連字;預設情況下,fontspec不適用於等寬字體,因此重新定義為空白Ligatures=TeX沒有風險。\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}

在此輸入影像描述

答案2

也可以在 ConTeXt 中使用 Fira 程式碼。然而,並非所有連字​​都適用。不幸的是我不知道為什麼。

\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

在此輸入影像描述

相關內容