与有关 ”我可以将所有数学输出更改为使用等宽文本吗?“,是否可以仅在内部使用等宽数学\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}