我对字体一无所知,尽管我尝试阅读了很多关于字体的内容。我最终只想要一种看起来像是用打字机风格书写的字体,并且还具有清晰的数学符号。我在 stackexchange 上的某个地方找到了一个示例(请参阅下面的链接),使用 pdflatex 对其进行了编译,我认为它看起来还不错。但是有些数学字体在使用时siunitx
在内联数学模式下看起来被挤压了。
我的最小工作示例是这样的:
\documentclass[a4paper,openany]{book}
\usepackage[variablett]{lmodern} % line 2
\renewcommand*\familydefault{\ttdefault} % line 3
\usepackage{siunitx}
\sisetup{
detect-all = true,
detect-inline-family = text,
detect-inline-weight = text
}
\begin{document}
\noindent normal text: [\SI{5}{\milli\meter\squared}] \\
inline math mode: $[\SI{5}{\milli\meter\squared}]$ \\
mm
\end{document}
如果我只是使用默认字体,即删除第 2 行和第 3 行,然后使用 siunitx,“mm”看起来与文本的字体相同。
有人能帮助我防止文本像这样被挤压吗,或者建议一种不会出现此问题的替代字体?
编辑:我用 \sisetup 编辑了 MWE,但无法解决问题。
答案1
一种选择是关闭模式的自动检测,并指定siunitx
始终使用文本模式,\texttt
而不是使用\mathtt
(被挤压的模式)。
\documentclass[a4paper,openany]{book}
\usepackage[variablett]{lmodern} % line 2
\renewcommand*\familydefault{\ttdefault} % line 3
\usepackage{siunitx}
\sisetup{
detect-mode=false,
mode=text,
}
\begin{document}
\noindent
normal text: [\SI{5}{\milli\meter\squared}] \\
inline math mode: $[\SI{5}{\milli\meter\squared}]$ \\
mm \\
$\mathtt{mm}$
\end{document}
答案2
您可以重新声明\mathtt
。
\documentclass[a4paper,openany]{book}
\usepackage[variablett]{lmodern} % line 2
\renewcommand*\familydefault{\ttdefault} % line 3
\usepackage{siunitx}
\sisetup{
detect-all = true,
detect-inline-family = text,
detect-inline-weight = text
}
\DeclareMathAlphabet{\mathtt}{OT1}{lmvtt}{m}{n}
\SetMathAlphabet{\mathtt}{bold}{OT1}{lmvtt}{b}{n}
\begin{document}
\noindent normal text: [\SI{5}{\milli\meter\squared}] \\
inline math mode: $[\SI{5}{\milli\meter\squared}]$ \\
mm
\noindent
{\boldmath mathtt in bold math: $\mathtt{mm}$}% testing
\结束{文档}
我们需要纠正的\mathtt
可以说是一个错误lmodern.sty
:它提供了一个选项variablett
,可以切换到lmvtt
打字机字体来代替,lmtt
但它仍然定义\mathtt
为使用,lmtt
因为声明没有使用\ttdefault
。
如果我们看一下替代方案,newtxtext/newtxtt/newtxmath
我们会发现在其声明中newtxmath
确实使用了。\ttdefault
\mathtt
因此以下工作将按预期进行:
\documentclass[a4paper,openany]{book}
\usepackage[T1]{fontenc}
\usepackage{newtxtext}
\usepackage[nomono, ttdefault]{newtxtt}% tt with variable stretch/shrink
\usepackage{newtxmath}
\usepackage{siunitx}
\sisetup{
detect-all = true,
detect-inline-family = text,
detect-inline-weight = text
}
\begin{document}
\noindent normal text: [\SI{5}{\milli\meter\squared}] \\
inline math mode: $[\SI{5}{\milli\meter\squared}]$ \\
mm
\noindent
{\boldmath mathtt in bold math: $\mathtt{mm}$}% testing
\end{document}
另一方面,ttzdefault
选项newtxtt
不会重新定义 ,因此在加载之前\ttdefault
我们仍然需要一个。无论如何,选项完成了工作。\let\ttdefault\ttzdefault
newtxmath
nomono, ttdefault
打字机字体将允许连字和文本对齐。
这类似于lmodern
“variablett”,但lmodern
另外具有可变长度的字形(a..z 中每个字形都有自己的宽度),即使有选项,它m
也lmvtt
不会与newtxtt
包中的字形相反地被挤压nomono
。