首页 > 解决方案 > 乳胶逐字:使用后备字体显示字符?

问题描述

我对逐字块使用特定的单字体。在我的逐字块之一中,字体中不包含某些字符。正如这篇文章中所建议的,可以使用不同的字体,或者使用pmboxdraw包来呈现不受支持的字符。但它似乎对我不起作用。

下面是一个MWE,其中黑色圆圈(即第二行的第一个字符)无法正确绘制。我的意图是使用我用于逐字块的单字体,并使用黑色圆圈字符的任何替代字体。有解决方案吗?非常感谢!

\documentclass{article}
\usepackage{fancyvrb}

\usepackage[utf8]{inputenc}
\usepackage{pmboxdraw}

\usepackage{fontspec}
\setmonofont[Path=./fonts/PragmataPro/,
    UprightFont=*-R,
    ItalicFont=*-RI,
    BoldFont=*-B,
    BoldItalicFont=*-BI]{PragmataPro}

\begin{document}
\begin{Verbatim}
$ systemctl status redsocks
● redsocks.service - Redsocks transparent SOCKS proxy redirector
   Loaded: loaded (/lib/systemd/system/redsocks.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-10-28 16:14:16 CST; 5s ago
  Process: 1499 ExecStart=/usr/sbin/redsocks -c ${CONFFILE} (code=exited, status=0/SUCCESS)
  Process: 1496 ExecStartPre=/usr/sbin/redsocks -t -c ${CONFFILE} (code=exited, status=0/SUCCESS)
\end{Verbatim}
\end{document}

使用输出xelatex显示黑色圆圈渲染不正确:

在此处输入图像描述

顺便说一句,如果我不指定自定义的单字体,黑色圆圈根本不会绘制。

标签: fontslatexverbatim

解决方案


您可以用包替换单个符号newunicodechar。您只需要找到包含该字符的字体,请参见例如https://www.fileformat.info/info/unicode/char/25cf/fontsupport.htm

% !TeX TS-program = xelatex

\documentclass{article}
\usepackage{fancyvrb}

\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}

\usepackage{fontspec}
\setmonofont{Monaco}

\newfontfamily{\dejamono}{DejaVu Sans Mono}

\newunicodechar{●}{{\dejamono ●}}

\begin{document}
\begin{Verbatim}
$ systemctl status redsocks
● redsocks.service - Redsocks transparent SOCKS proxy redirector
   Loaded: loaded (/lib/systemd/system/redsocks.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-10-28 16:14:16 CST; 5s ago
  Process: 1499 ExecStart=/usr/sbin/redsocks -c ${CONFFILE} (code=exited, status=0/SUCCESS)
  Process: 1496 ExecStartPre=/usr/sbin/redsocks -t -c ${CONFFILE} (code=exited, status=0/SUCCESS)
\end{Verbatim}
\end{document}

(我在Monaco上面的例子中使用了字体,因为这种字体也缺少符号并且我没有专有PragmataPro字体)

在此处输入图像描述


推荐阅读