私はフィラコードコード リストと逐語ブロック用の 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}
特定の置換 ( など.=
) は機能するのに、他の置換 ( など) は機能しない理由をまだ解明しようとしていることに注意してください。 do が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 コードを使用することもできます。ただし、すべての合字が機能するわけではないようです。残念ながら、その理由はわかりません。
\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