Me gustaría usar elCódigo FiraFuente OTF para listados de códigos y bloques textuales, que tiene hermosas ligaduras. La fuente se carga correctamente usando la siguiente línea:
\setmonofont{FiraCode-Regular}
Pero no puedo hacer que las ligaduras funcionen, no importa cuántas combinaciones de [Ligatures={X}]
o [RawFeatures={X}]
intente.
¿Hay alguna manera de hacer que funcionen xelatex
?
Respuesta1
En primer lugar, deberás asegurarte de que Fira Code esté instalado en tu computadora (lo cual estoy seguro que ya haces).
Las características de fuente que utiliza Fira Code en realidad no figuran como ligaduras dentro de la OTF, pero parecen estar incluidas.Contextuales. Para poder utilizar estas características tipográficas, sólo es cuestión de habilitar los contextos apropiados:
\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}
Tenga en cuenta que todavía estoy tratando de descubrir por qué ciertas sustituciones funcionan (como .=
) pero otras no (como .-
). Sospecho que puede ser necesario -
convertir el guión ASCII a algún otro guión.
Sólo como referencia, las ligaduras de Fira Code son:
Las ligaduras “faltantes” se pueden obtener eliminando los caracteres verbatim
que se quieren tratar de una manera especial porque las fuentes TeX tradicionales tienen ligaduras; de forma predeterminada, fontspec
no se aplica Ligatures=TeX
a la fuente monoespaciada, por lo que no hay riesgo al redefinirla \verbatim@noligs@list
para que esté vacía.
\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}
Respuesta2
También es posible utilizar Fira Code en ConTeXt. Sin embargo, no todas las ligaduras parecen funcionar allí. Lamentablemente no tengo idea de por qué.
\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