此 MWE
\documentclass{article}
\usepackage{libertine}
\renewcommand\ttdefault{lmtt}
\begin{document}
foo \texttt{bar}
\end{document}
以前(比如说,大约一年前)bar
如果使用 XeLaTeX 处理,则使用 lmtt 排版。现在不再这样了。相反,使用 Libertine 字体系列的成员。显然,更改\ttdefault
会被忽略。为什么?
请注意,使用 pdflatex 处理可提供预期的拉丁现代字体。
使用的软件包(来自 TeXLive SVN rev 52404,2019-10-16)
- LateX2e 2019-10-01
- 字体规格 2019-10-14
- 放荡 2019-02-27
[我用 重新生成了所有格式fmtutil-usr --all
。]
答案1
2019/10/18 更新
Will 澄清说,这个问题是fontspec
在他的评论中.我建议如下临时补丁在 的下一个版本之前fontspec
。该补丁适用于 pdfLaTeX、XeLaTeX 和 LuaLaTeX:
\documentclass{article}
\usepackage{libertine}
\renewcommand\ttdefault{lmtt}
% Temporary patch
\makeatletter
\AtBeginDocument{%
\@ifpackageloaded{fontspec}{%
\DeclareRobustCommand\ttfamily{%
\fontencoding{\csname g__fontspec_nfss_enc_tl\endcsname}%
\fontfamily{\ttdefault}%
\selectfont
}%
}{%
}%
}
\makeatother
\begin{document}
foo \texttt{bar}
\end{document}
警告:此补丁依赖于fontspec
的私有变量\g_@@_nfss_enc_tl
,因此可能无法与的较新版本兼容fontspec
。
原始答案
运行以下 MWE
\documentclass{article}
\usepackage{fontspec}
\setmonofont{Fira Mono}
\renewcommand\ttdefault{lmtt}
\begin{document}
foo \texttt{bar}
\end{document}
但随着fontspec
2017/02/12 v2.6或者后来,我得到了
在 XeLaTeX 或 LuaLaTeX 上运行时,此包会在内部libertine
调用。自v2.6 起,的实现已更改。在较新的版本中,发布后,将重新定义为始终使用字体系列,而不是 的字体系列。fontspec
fontspec
\setmonofont
\setmonofont{<Foo>}
fontspec
\ttfamily
<Foo>
\ttdefault
在我看来,用户级重新定义\ttdefault
从来都不是一个好的语法。我建议使用更高级别的重新定义:
\documentclass{article}
\usepackage{libertine}
% For XeLaTeX or LuaLaTeX
\setmonofont{Latin Modern Mono}[Scale=MatchLowercase]
\begin{document}
foo \texttt{bar}
\end{document}
答案2
这再次适用于 2019-10-19 发布的 fontspec 2.7d 版本。