我一直在使用投影机和铸造(并使用 Xelatex 构建 PDF)。当使用 Unicode方框绘制字符,垂直线实际上并没有像其他字符一样“连接”。起初我以为这是我的字体的问题(DejaVu Sans),但后来我尝试了几种不同的等宽字体,但都没有成功。我还尝试过在 minted 环境中调整基线选项,但没有任何变化(负数似乎根本不会影响它)。最后,我尝试添加一个新的 Unicode 字符,用 tikz 绘图(垂直线)替换垂直线,但这有点黑客,我无法让它在与正常框绘图字符相交的地方看起来完全正确,并且不想重新定义我可能使用的每个字符)。
我想知道是什么导致了这个问题。请注意,同样的事情发生在 Minted 环境之外,但是如果我使用另一个类,那么它在 Beamer/Verbatim 环境中的知识可能会影响解决方案,因此我将其包含在下面的 MWE 中:
\documentclass[xelatex,aspectratio=169]{beamer}
\usepackage{fontspec,minted}
\setmonofont{Source Code Pro}
% \setmonofont{DejaVu Sans} % Same thing
% Don't display annoying red boxes around errors
\renewcommand{\fcolorbox}[4][]{#4}
\begin{document}
\begin{frame}[fragile]
\begin{minted}{C}
╭─────────────────────────────╮
│ ╭───╮ │
│ ╭───╮ │╭─╮│ │
│ ↑ │ │↑ ││ │
void (*signal(int, void (*fp)(int)))(int);
↑ ↑ │ ↑ ↑ ││ │
│ ╰──────╯ │ ╰──╯│ │
│ ╰────────╯ │
╰──────────────────────────────────╯
\end{minted}
\end{frame}
\end{document}
产生的结果(请注意垂直条中的间隙):
答案1
原因是箭头比字符 U+2502 (BOX DRAWINGS LIGHT VERTICAL) 短得多,如下图所示:
另一个原因是\lineskip
进入方式。
可以通过使用另一种字体中的箭头,然后稍微缩放以反映框绘图字符的尺寸来获得可接受的版本。
\documentclass{article}
\usepackage{fontspec,minted,color,graphicx}
\usepackage{newunicodechar}
\setmonofont{Source Code Pro}
\newfontfamily{\Carrows}{TeX Gyre Adventor}
\newunicodechar{↑}{\arrowresize{\Carrows ↑}}
\newcommand{\arrowresize}[1]{%
\sbox0{\ttfamily │}%
\setlength{\dimen8}{\dimexpr\ht0+\dp0\relax}%
\makebox[\wd0]{\raisebox{-.5\dp0}[\ht0][\dp0]{\resizebox{\width}{.8\dimen8}{#1}}}%
}
% Don't display annoying red boxes around errors
\renewcommand{\fcolorbox}[4][]{#4}
\begin{document}
\setlength{\lineskip}{0pt}
\begin{minted}{C}
╭─────────────────────────────╮
│ ╭───╮ │
│ ╭───╮ │╭─╮│ │
│ ↑ │ │↑ ││ │
void (*signal(int, void (*fp)(int)))(int);
↑ ↑ │ ↑ ↑ ││ │
│ ╰──────╯ │ ╰──╯│ │
│ ╰────────╯ │
╰──────────────────────────────────╯
\end{minted}
\end{document}
仅在本地进行分配\lineskip
。