如何将数学字体更改为等宽字体,仅在 \texttt 内

如何将数学字体更改为等宽字体,仅在 \texttt 内

与有关 ”我可以将所有数学输出更改为使用等宽文本吗?“,是否可以仅在内部使用等宽数学\texttt(或其他自定义命令)?

我试图将其包含\everymath在一个组内,但似乎直到我使用一些数学运算之后它才起作用:

\documentclass{minimal}
\usepackage{amsmath}
\newcommand{\ttmath}{\everymath{\mathtt{\xdef\tmp{\fam\the\fam\relax}\aftergroup\tmp}}}
\newcommand{\val}[1]{\bgroup\ttmath\texttt{#1}\egroup}
\begin{document}

\val{1\ensuremath{\ensuremath{\cdot}10\ensuremath{^{-6}}}}

\ensuremath{a_0}, \ensuremath{m_{\text{e}}}).

\val{1\ensuremath{\ensuremath{\cdot}10\ensuremath{^{-6}}}}

\end{document}

在此处输入图片描述

请注意,第一个 10^-6 没有使用等宽字体,但第二个使用了。a_0 和 m_e 使用普通数学字体,这很好。

我可以通过在和\ensuremath{}之间添加来解决这个问题,但是有没有更干净的方法呢?\ttmath\texttt

附言。请原谅充满的丑陋代码\ensuremath,它是从 XML 生成的。

聚苯硫醚. 请不要使用 XeTeX 或 LuaLaTeX。

答案1

在此处输入图片描述

您只需要鼓励 latex 初始化 scriptstyle 和主 textstyle 中的字体设置。正如您所注意到的,它直到认为需要时才会执行此操作:

\documentclass{minimal}
\usepackage{amsmath}
\newcommand{\ttmath}{%
  \everymath{%
    {\scriptstyle\mathtt{}}%
    {\scriptscriptstyle\mathtt{}}%
    \mathtt{\xdef\tmp{\fam\the\fam\relax}\aftergroup\tmp}}}
\newcommand{\val}[1]{\bgroup\ttmath\texttt{#1}\egroup}
\begin{document}

\val{1\ensuremath{\ensuremath{\cdot}10\ensuremath{^{-6}}}}

\ensuremath{a_0}, \ensuremath{m_{\text{e}}}).

\val{1\ensuremath{\ensuremath{\cdot}10\ensuremath{^{-6}}}}

\end{document}

相关内容