在我编写的文档中,我必须大量使用带尖括号的符号 M,因此我使用$M\langle x \rangle$
,我想改用 ,$M<x>$
因为它更具可读性(并且输入速度更快!)但它会在符号周围留下一个讨厌的空格。有没有办法将数学模式下的符号<
和的行为更改为和?>
\langle
rangle
谢谢
答案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}
其他数学字体可能具有不同的符号编码。例如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}
一个更自动化的解决方案,它假设\langle
和\rangle
由 LaTeX 定义\DeclareMathDelimiter
,其定义文本后跟 7 个十六进制数字。然后,重新定义的和\delimiter"
的数学类别代码的值可以从和的定义中提取出来。像、、这样的软件包可以开箱即用(如果它们已加载<
>
\langle
\rangle
MnSymbol
mathabx
txfonts
前)。
\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}
答案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}
这应该独立于数学字体包。
另一方面,您可以使用mathtools
and \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}