我想使用 JetBrains Mono(及其代码连字符)来渲染->
箭头。但是,根据我使用的等宽环境,我得到的结果不尽相同。我的目标是让它在以下minted
环境中工作Haskell
:
\documentclass{article}
\usepackage{minted}
\usepackage{fontspec}
\setmonofont{JetBrains Mono}
\begin{document}
texttt:\\
\texttt{-> --> ->> <- <-- <<-\\
=> ==> >=> =>>\\
<= <== <<= <=<\\
<-> <=>}
verbatim:
\begin{verbatim}
-> --> ->> <- <-- <<-
=> ==> >=> =>>
<= <== <<= <=<
<-> <=>
\end{verbatim}
minted (Haskell):
\begin{minted}{haskell}
-> --> ->> <- <-- <<-
=> ==> >=> =>>
<= <== <<= <=<
<-> <=>
\end{minted}
minted (Bash):
\begin{minted}{bash}
-> --> ->> <- <-- <<-
=> ==> >=> =>>
<= <== <<= <=<
<-> <=>
\end{minted}
\end{document}
运行时,只有texttt
正确渲染->
(<-
尽管->>
在任何环境中都无法正确渲染):
以下更改不会影响输出:
- 用 替换字体行
\setmonofont{JetBrains Mono}[Contextuals=Alternate]
。 - 将包
microtype
与行一起添加\DisableLigatures[<,>]{encoding=T1,family=tt*}
。
用 替换字体行\setmonofont{JetBrains Mono}[Ligatures=TeX]
会导致>>
被替换为 guillement“»”。
我希望 Haskellminted
环境能够将->
and渲染<-
为连字符,但不确定下一步该尝试什么步骤。
答案1
在逐字环境中禁用连字的字符由 控制\verbatim@nolig@list
;其默认定义是\do\‘\do\<\do\>\do\,\do\’\do\-
。要允许所有连字,只需清除其定义即可。
但是,如果在默认的 Node 渲染模式下使用 lualatex 进行编译,某些连字符无法正确显示。可以通过设置[Renderer=Harfbuzz]
或使用 xelatex 进行编译来解决这个问题(请参阅这个问题和这个问题在 luaotfload 的 Github 页面上)。
\documentclass{article}
\usepackage{fvextra}
\usepackage{fontspec}
\setmonofont{JetBrains Mono}[Renderer=Harfbuzz]
\makeatletter
\def\verbatim@nolig@list{}
\makeatother
\begin{document}
texttt:\\
\texttt{-> --> ->> <- <-- <<-\\
=> ==> >=> =>>\\
<= <== <<= <=<\\
<-> <=>}
verbatim:
\begin{verbatim}
-> --> ->> <- <-- <<-
=> ==> >=> =>>
<= <== <<= <=<
<-> <=>
\end{verbatim}
Verbatim (fancyvrb/fvextra):
\begin{Verbatim}
-> --> ->> <- <-- <<-
=> ==> >=> =>>
<= <== <<= <=<
<-> <=>
\end{Verbatim}
\end{document}
现在,即使minted
使用fancyvrb
排版逐字材料,它也会以一种防止连字的方式对内容进行标记。来自包作者 Geoffrey Poore 在Github 问题我做了:
这是由 Pygments 进行标记化的方式决定的。对于 Bash,
|=>
它变为\PYG{p}{|}\PYG{o}{=}\PYGZgt{}
。对于 Python,它变为\PYG{o}{|=\PYGZgt{}}
。(\PYGZgt{}
是 的 Pygments 翻译>
。)由于字符在 Bash 的不同标记之间被拆分(\PYG{<token_type>}{<token_text>}
),因此连字不起作用。