在代码列表中使用带有连字符的 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 Code 的连字符为:

参考

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 Code。但是,并非所有连字符都可以在那里使用。不幸的是,我不知道为什么。

\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

在此处输入图片描述

相关内容