更改 fancyvrb 默认字体时出现问题

更改 fancyvrb 默认字体时出现问题

我想在以下 MWE 中更改 fancyvrb 的默认字体。

    % arara: xelatex: { shell: true }
    \documentclass{article}
    \usepackage[svgnames]{xcolor}
    \usepackage{fontspec}
    \usepackage{fancyvrb}
    
    \newfontface{\cBld}{SourceSansPro-Bold.ttf}
    \newfontface{\cEm}{SourceSansPro-LightItalic.ttf}
    \newfontface{\cNrm}{SourceSansPro-Regular.ttf}
    
    \def\It#1{{\cEm #1}}
    \def\Bf#1{{\cBld #1}}
    \def\Br#1{{\color{IndianRed}{\cNrm #1}}}
    \def\Bl#1{{\color{CornflowerBlue}{\cNrm #1}}}
    \def\Gr#1{{\color{LimeGreen}{\cNrm #1}}}
    
    \begin{document}
    \begin{Verbatim}[commandchars=\\\{\}, numbers=left]
    \It{;;}
    \It{;; goff.ufm}
    \It{;; 13:00:35 11:08:2021 (MST)}
    \It{;;}
    MyGoFF \{
    \Bf{init:}
      z = \Br{@Z}
      \Bf{complex} zf = \Br{@ZF}
    
    \Bf{loop}:
      \Bf{if} \Br{@fof} > 0
        zf = Utils.\Bl{fofz}(\Br{@inverse}, \Br{@fof}, Utils.\Bl{zFunction}(\Br{@inverse}, \Br{@fofz},  z, \Gr{\#pixel}))
        z  = Utils.\Bl{fofz}(\Br{@inverse}, \Br{@fof}, Utils.\Bl{gFunction}(\Br{@inverse}, \Br{@gofz}, zf, \Gr{\#pixel}))
      \Bf{else}
        zf = Utils.\Bl{zFunction}(\Br{@inverse}, \Br{@fofz},  z, \Gr{\#pixel})
        z  = Utils.\Bl{gFunction}(\Br{@inverse}, \Br{@gofz}, zf, \Gr{\#pixel})
      \Bf{endif}
      \Bf{if} \Br{@const} > \Bl{0}
        \Bf{if} \Br{@op} == \Bl{0}
          z = z * Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{elseif} \Br{@op} == \Bl{1}
          z = Utils.\Bl{GetConstant}(\Br{@const}) / z;
        \Bf{elseif} \Br{@op} == \Bl{2}
          z = z + Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{elseif} \Br{@op} == \Bl{3}
          z = Utils.\Bl{GetConstant}(\Br{@const}) - z;
        \Bf{elseif} \Br{@op} == \Bl{4}
          z = z / Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{elseif} \Br{@op} == \Bl{5}
          z = z - Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{elseif} \Br{@op} == \Bl{6}
          z = z\^{}\Bl{2} + Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{elseif} \Br{@op} == \Bl{7}
          z = z\^{}\Bl{2} - Utils.\Bl{GetConstant}(\Br{@const});
        \Bf{endif}
      \Bf{endif}
    \end{Verbatim}
    \end{document}

我尝试了所有能想到的解决方法,但无法让 fancyvrb 使用任何东西,除了它提供的硬编码默认值或替代方案。手册上说:

4.1.5 
Fonts fontfamily (family name) : font family to use. tt, courier and
helvetica are predefined (Default: tt).

我尝试过 helvetica,但后来遇到了一种字体与另一种字体的字符大小不同的问题。我想使用 SourceSansPro-Regular.ttf,但还不知道该怎么用。在尝试过程中,我尝试了字体名称的所有变体:

    Family:              Source Sans Pro
    Subfamily:           Regular
    Full name:           Source Sans Pro Regular
    PostScript name:     SourceSansPro-Regular

这些都没有什么区别。我相信线索就在于“预定义”这个词。我没有看到任何 API 来实现这一点——给出的方法没有带来任何变化。

如果我可以改变字体,其他一切都会按照我想要的方式运行。这是对半原型的尝试。”列表' 环境。所讨论的语言(Ultra Fractal 的公式语言)不适合其他可用的解析器。

我在 Windows 11 下使用 MikTeX 2.9(前沿技术),字体系列可在https://fonts.google.com/specimen/Source+Sans+Pro

答案1

这在 4.2 中的 fontspec 文档中有描述,具体来说是选择 NFSS 系列:

\documentclass{article}
\usepackage{fontspec}
\usepackage{fancyvrb}
   
\newfontfamily\verbatimfont{SourceSansPro-Regular.ttf}[NFSSFamily=myverbatimfont]
    

\begin{document}
\begin{Verbatim}[fontfamily=myverbatimfont]
aaaa
\end{Verbatim}
\end{document}
    

相关内容