使 < 表现得像 \langle

使 < 表现得像 \langle

在我编写的文档中,我必须大量使用带尖括号的符号 M,因此我使用$M\langle x \rangle$,我想改用 ,$M<x>$因为它更具可读性(并且输入速度更快!)但它会在符号周围留下一个讨厌的空格。有没有办法将数学模式下的符号<和的行为更改为和?>\langlerangle

谢谢

答案1

LaTeX 内核 ( fontmath.ltx) 按以下方式定义符号:

\DeclareMathDelimiter{<}{\mathopen}{symbols}{"68}{largesymbols}{"0A}
\DeclareMathDelimiter{>}{\mathclose}{symbols}{"69}{largesymbols}{"0B}
...
\DeclareMathDelimiter{\rangle}
   {\mathclose}{symbols}{"69}{largesymbols}{"0B}
\DeclareMathDelimiter{\langle}
   {\mathopen}{symbols}{"68}{largesymbols}{"0A}

因此,可以按照<>的同样方式定义\langle\rangle

\documentclass{article}

\DeclareMathDelimiter{<}{\mathopen}{symbols}{"68}{largesymbols}{"0A}
\DeclareMathDelimiter{>}{\mathclose}{symbols}{"69}{largesymbols}{"0B}

\begin{document}
$M< x >$
\end{document}

结果

下一个示例保护宏中的较小符号和较大符号\less\greater以备需要时使用:

\documentclass{article}

\mathchardef\less=\mathcode`<
\mathchardef\greater=\mathcode`>

\DeclareMathDelimiter{<}{\mathopen}{symbols}{"68}{largesymbols}{"0A}
\DeclareMathDelimiter{>}{\mathclose}{symbols}{"69}{largesymbols}{"0B}

\begin{document}
$1 \greater 0 \less M< x >$
\end{document}

结果带有 less 和 greater 符号

其他数学字体可能具有不同的符号编码。例如MnSymbol

\documentclass{article}
\usepackage{MnSymbol}

\mathchardef\less=\mathcode`<
\mathchardef\greater=\mathcode`>

\DeclareMathDelimiter{<}{\mathopen}{largesymbols}{'140}{largesymbols}{'140}
\DeclareMathDelimiter{>}{\mathclose}{largesymbols}{'145}{largesymbols}{'145}

\begin{document}
$1 \greater 0 \less M< x >$
\end{document}

结果 MnSymbol

一个更自动化的解决方案,它假设\langle\rangle由 LaTeX 定义\DeclareMathDelimiter,其定义文本后跟 7 个十六进制数字。然后,重新定义的和\delimiter"的数学类别代码的值可以从和的定义中提取出来。像、、这样的软件包可以开箱即用(如果它们已加载<>\langle\rangleMnSymbolmathabxtxfonts)。

\documentclass{article}
\usepackage{txfonts}

\mathchardef\less=\mathcode`<
\mathchardef\greater=\mathcode`>

\def\tmp{\delimiter"}
\edef\tmp{\meaning\tmp}
\expandafter\def\expandafter\ScanDelimiterDefinition\tmp#1#2#3#4#5\relax#6{%
  \mathcode`#6="#1#2#3#4\relax
}
\expandafter\ScanDelimiterDefinition\meaning\langle\relax<
\expandafter\ScanDelimiterDefinition\meaning\rangle\relax>

\begin{document}
$1 \greater 0 \less M< x >$
\end{document}

结果 txfonts

答案2

与 Heiko 的方法类似,但代码不那么神秘:\mathcode可以通过除以(截断)来获得所需的值\delcode

\documentclass{article}
%\usepackage{newtxmath}

\AtBeginDocument{%
  \mathchardef\lt=\mathcode`<
  \mathchardef\gt=\mathcode`>
  \count255=\delcode`< \divide\count255 "1000
  \mathcode`<=\count255
  \count255=\delcode`> \divide\count255 "1000
  \mathcode`>=\count255
}

\begin{document}
$1 \gt 0 \lt M<x>$

$\displaystyle\left<\frac{a}{b}\right>$

$<\bigl<\Bigl<\biggl<\Biggl<\Biggr>\biggr>\Bigr>\bigr>>$
\end{document}

这应该独立于数学字体包。

在此处输入图片描述

另一方面,您可以使用mathtoolsand \DeclarePairedDelimiter

\documentclass{article}
\usepackage{mathtools}
%\usepackage{newtxmath}

\DeclarePairedDelimiter{\avg}{\langle}{\rangle}


\begin{document}
$1 < 0 < M\avg{x}$

$\displaystyle\avg*{\frac{a}{b}}$

$\avg{\avg[\big]{\avg[\Big]{\avg[\bigg]{\avg[\Bigg]x}}}}$
\end{document}

相关内容