需要字体和 siunitx 问题方面的帮助吗?

需要字体和 siunitx 问题方面的帮助吗?

我对字体一无所知,尽管我尝试阅读了很多关于字体的内容。我最终只想要一种看起来像是用打字机风格书写的字体,并且还具有清晰的数学符号。我在 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”看起来与文本的字体相同。

有人能帮助我防止文本像这样被挤压吗,或者建议一种不会出现此问题的替代字体?

关联: \textbf 不适用于 cmvtt 样式

编辑:我用 \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\ttzdefaultnewtxmathnomono, ttdefault

打字机字体将允许连字和文本对齐。

这类似于lmodern“variablett”,但lmodern另外具有可变长度的字形(a..z 中每个字形都有自己的宽度),即使有选项,它mlmvtt不会与newtxtt包中的字形相反地被挤压nomono

相关内容