【问题标题】:Latex verbatim: show characters using a fallback font?乳胶逐字:使用后备字体显示字符?
【发布时间】:2026-02-08 12:00:02
【问题描述】:

我对逐字块使用特定的单字体。在我的逐字块之一中,字体中不包含某些字符。正如this post 中所建议的那样,可以使用不同的字体,或者使用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的输出显示黑圈渲染不正确:

顺便说一句,如果我不指定自定义的monofont,黑圈根本不会画出来。

【问题讨论】:

  • pmboxdraw 包一般不会渲染不受支持的字符,它专门用于渲染方框图字符。我认为链接回有关画框字符的问题没有帮助。

标签: fonts latex verbatim


【解决方案1】:

您可以用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 字体)

【讨论】:

  • 完美运行!谢谢!
  • 这会将 all 文本中的 替换为 dejamono。如果我只想在等宽文本中对 使用 dejamono,而在普通文本中使用常规字体怎么办?
  • @Eric 如果您有新问题,请使用“提问”提出新问题
  • 我认为这是同一个问题 - 您的解决方案具有在 Verbatim 块之外的文本中未要求的效果。
  • @Eric 不要问新问题,但在这里看到你的评论的人不多,所以你得到答案的机会不是很大......