如何检测我是否处于 LaTeX 中的电传打字模式?我正在寻找类似\ifmmode
或\mathpalette
或 的内容\mathchoice
。
也许这是一个 xy 问题,所以让我给出我原来的背景:我想定义一些在 中运行良好的运算符的版本texttt
。例如,我想要一个\vdash
在等宽字体中运行良好的版本。在这里,我可以为 tt 模式和正常模式定义单独的版本,但我想要一个根据模式选择使用哪一个的单个命令:
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\usepackage{ifthen}
\usepackage{calc}
\newcommand{\aswidthof}[2]{\rlap{#1}\hphantom{#2}}
\makeatletter
\newlength{\aswidthof@w}
\newcommand{\aswidthofc}[2]{%
\settowidth{\aswidthof@w}{#2}%
\hspace{\dimexpr\aswidthof@w/2\relax}%
\ifthenelse{\boolean{mmode}}{\mathclap{#1}}{\clap{#1}}%
\hspace{\dimexpr\aswidthof@w/2\relax}%
}
\makeatother
\newcommand{\bettervdash}{\aswidthofc{\ensuremath{\vdash}}{\text{|-}}}
\begin{document}
\noindent \texttt{abcdefghijklmnopqrstuvwxyz} \\
\noindent \texttt{a$\vdash$cdefghi$\vdash$klmnopqrstuvwxyz} \\
\noindent \texttt{abcdefghijklmnopqrstuvwxyz} \\
\noindent \texttt{a\bettervdash cdefghi\bettervdash klmnopqrstuvwxyz} \\
\noindent \texttt{abcdefghijklmnopqrstuvwxyz} \\
\noindent $abc\bettervdash def$ \\
\noindent $abc\vdash def$ \\
\end{document}
我曾经有过的想法:
- 我可以尝试解析
\the\font
,寻找tt
- 我可以判断
\widthof{i}
和是否\widthof{m}
相等
有没有更好的方法?如果没有,是否有理由相信其中一种方法会比另一种方法更有效?