JetBrains 箭头 `->`、`

JetBrains 箭头 `->`、`

我想使用 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正确渲染-><-尽管->>在任何环境中都无法正确渲染):

给定 MWE 的渲染

以下更改不会影响输出:

  • 用 替换字体行\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>}),因此连字不起作用。

相关内容