我想使用費拉代碼用於程式碼清單和逐字區塊的 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