我想在数学模式下使用 tt 字体书写,一切正常,但括号除外。下一个代码
$ \mathtt{[x + y]} $
得到
但我想得到
可以通过一些附加命令来完成
$ \mathtt{\texttt{[}x + y\texttt{]}} $
有没有什么方法不加任何添加就能得到理想的结果?
我尝试为活动符号写定义
\def\lbr{[}
\begingroup
\catcode`[=\active
\gdef[{\texttt{[}}
\endgroup
\AtBeginDocument{\mathcode`[="8000}
但看起来替换是递归执行的。
另一种方法是我认为有必要将 [ 的数学代码更改为字母的数学代码,但找不到解决方案。
添加
解决方案
\def\lbr{[}
\begingroup
\catcode`[=\active
\gdef[{\texttt{\lbrack}}
\endgroup
\AtBeginDocument{\mathcode`[="8000}
正确使用\gdef[{\texttt{\lbrack}}
答案1
当您想在定义中将和用作活动字符时,您必须存储[
和的数学代码。]
当然,扩展的括号不能来自等宽字体。
\documentclass{article}
\usepackage{amsmath}
\DeclareSymbolFont{mathttfont}{OT1}{\ttdefault}{m}{n}
\DeclareSymbolFontAlphabet{\mathtt}{mathttfont}
\edef\keptlbrack{\mathchar\the\mathcode`[}
\edef\keptrbrack{\mathchar\the\mathcode`]}
\begingroup
\catcode`[=\active \catcode`]=\active
\gdef[{%
\ifnum\mathgroup=\symmathttfont
\mathopen{\mathchar\numexpr"7000+`\[\relax}
\else
\keptlbrack
\fi
}
\gdef]{%
\ifnum\mathgroup=\symmathttfont
\mathclose{\mathchar\numexpr"7000+`\]\relax}
\else
\keptrbrack
\fi
}
\endgroup
\AtBeginDocument{%
\mathcode`\[="8000 \mathcode`\]="8000
}
\begin{document}
$[\mathtt{x+y}]$
$\mathtt{[x+y]}$
$\displaystyle\left[\frac{a}{b}\right]$
\end{document}
答案2
我从这里修改了我的答案:我怎样才能让每个出现的“+”和“-”都被宏替换,但仅限于数学模式?,大量借用自这里:如何设置临时数学字体?。
结果是[
和]
在数学模式下转换为\texttt
等效的,但\big
和家族以及\left...\right
不受影响。
\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
%%%%% FROM https://tex.stackexchange.com/questions/385013/how-to-set-temporary-math-font/385068#385068
\usepackage{xpatch}
\DeclareMathVersion{ttmath}
\SetSymbolFont{letters}{ttmath}{OT1}{\ttdefault}{m}{n}
\xapptocmd{\ttfamily}{\mathversion{ttmath}}{}{}
%%%%% ADAPTED FROM
%%%%% https://tex.stackexchange.com/questions/392338/bracket-as-ordinary-symbol-in-math-mode/392350#392350
\makeatletter
% Commands that take the original meanings of the special characters
\let\lbr[
\let\rbr]
% Macro \setmathshorthands activates and defines the special characters
\begingroup
\catcode`\[=\active
\catcode`\]=\active
\gdef[{\texttt{\lbr}}
\gdef]{\texttt{\rbr}}
\@ifdefinable{\setmathshorthands}{%
\xdef\setmathshorthands{%
\mathcode\number`\[="8000 %
\mathcode\number`\]="8000 %
}%
}%
\endgroup
\makeatother
% Activate math shorthands in the math modes
\everymath{\setmathshorthands}
\everydisplay{\setmathshorthands}
%%%%%
\begin{document}
\ttfamily
\begin{equation*}
[x+y] \bigl[x\bigr] \left[\frac{a}{b}\right]
\end{equation*}
\begin{equation*}
\int_0^X f[x] dx
\end{equation*}
\end{document}