数学模式下括号作为普通符号

数学模式下括号作为普通符号

我想在数学模式下使用 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}

在此处输入图片描述

相关内容