这是我的代码:
\documentclass{acmart}
\usepackage{MnSymbol}
\newcommand*{\ohat}[2]{%
\stackrel{\textcolor{gray}{#1}}{%
\textcolor{gray}{%
\overlinesegment{\textcolor{black}{%
\vrule height 8pt depth 1pt width 0pt%
#2%
}}%
}%
}%
}
\begin{document}
$x = 42 \times \ohat{y}{5 + 8}$
\end{document}
其渲染效果如下:
是否可以做同样的事情,但没有MnSymbol
?此包与amssymb
其他一些ams*
包冲突,因为这里讨论。
答案1
如果可以使用单边括号而不是双边括号,\overbracket
则数学工具您可能对该包感兴趣。
下面,我使用\overbracket
宏来定义一个名为 的用户宏\ohat
,它将gray
上括号和括号上方显示的材料设置为默认“颜色”。例如,$x = 42 \times \ohat{5+8}{y}$
。可以通过指定替代颜色作为可选参数来覆盖默认颜色;例如,$x = 42 \times \ohat[blue]{5+8}{z}$
。
\documentclass{acmart}
\acmConference{}{}{} % just for this example
\usepackage{mathtools} % for \overbracket macro
\usepackage{xcolor} % for \textcolor macro
\newcommand\ohat[3][gray]{%
\overbracket[0.4pt][2pt]{\textcolor{black}{#2}}^{\color{#1}#3}}
\begin{document}
$x = 42 \times \ohat{5+8}{y}$
\medskip
$x = 42 \times \ohat[blue]{5+8}{z}$
\end{document}
答案2
以下是导入所需符号的步骤。
首先看一下\overlinesegment
\DeclareRobustCommand{\overlinesegment}{\mathpalette{\overarrow@\linesegmentfill@}}
这表明该命令使用与相同的基础结构\xrightarrow
。好的,现在我们需要\linesegmentfill@
\def\linesegmentfill@{\arrowfill@\leftfootline\relbar\rightfootline}
好的,我们需要\leftfootline
和\rightfootline
。
\Decl@Mn@Char\rightfootline {MnSyA}{\mathrel}
\Decl@Mn@Char\upfootline {MnSyA}{\mathrel}
\Decl@Mn@Char\leftfootline {MnSyA}{\mathrel}
\Decl@Mn@Char\downfootline {MnSyA}{\mathrel}
嗯,MnSymbol
不太友好,因为它只列出符号并自动步进插槽编号。解决方法并不难,因为我们可以询问 TeX。
\documentclass{article}
\usepackage{MnSymbol}
\show\rightfootline
\show\leftfootline
\stop
控制台会告诉你
> \rightfootline=\mathchar"3478
> \leftfootline=\mathchar"347A.
我们知道需要找到MnSyA
。
\DeclareSymbolFont{MnSyA} {U} {MnSymbolA}{m}{n}
\SetSymbolFont{MnSyA} {bold}{U} {MnSymbolA}{b}{n}
\DeclareFontFamily{U} {MnSymbolA}{}
\DeclareFontShape{U}{MnSymbolA}{m}{n}{
<-6> MnSymbolA5
<6-7> MnSymbolA6
<7-8> MnSymbolA7
<8-9> MnSymbolA8
<9-10> MnSymbolA9
<10-12> MnSymbolA10
<12-> MnSymbolA12}{}
\DeclareFontShape{U}{MnSymbolA}{b}{n}{
<-6> MnSymbolA-Bold5
<6-7> MnSymbolA-Bold6
<7-8> MnSymbolA-Bold7
<8-9> MnSymbolA-Bold8
<9-10> MnSymbolA-Bold9
<10-12> MnSymbolA-Bold10
<12-> MnSymbolA-Bold12}{}
我们已经拥有了我们需要的一切。
\documentclass{acmart}
\DeclareFontFamily{U} {MnSymbolA}{}
\DeclareFontShape{U}{MnSymbolA}{m}{n}{
<-6> MnSymbolA5
<6-7> MnSymbolA6
<7-8> MnSymbolA7
<8-9> MnSymbolA8
<9-10> MnSymbolA9
<10-12> MnSymbolA10
<12-> MnSymbolA12}{}
\DeclareFontShape{U}{MnSymbolA}{b}{n}{
<-6> MnSymbolA-Bold5
<6-7> MnSymbolA-Bold6
<7-8> MnSymbolA-Bold7
<8-9> MnSymbolA-Bold8
<9-10> MnSymbolA-Bold9
<10-12> MnSymbolA-Bold10
<12-> MnSymbolA-Bold12}{}
\DeclareSymbolFont{MnSyA} {U} {MnSymbolA}{m}{n}
\SetSymbolFont{MnSyA} {bold}{U} {MnSymbolA}{b}{n}
\DeclareMathSymbol{\rightfootline}{\mathrel}{MnSyA}{"78}
\DeclareMathSymbol{\leftfootline}{\mathrel}{MnSyA}{"7A}
\makeatletter
\DeclareRobustCommand{\overlinesegment}{\mathpalette{\overarrow@\linesegmentfill@}}
\def\linesegmentfill@{\arrowfill@\leftfootline\relbar\rightfootline}
\makeatother
\newcommand*{\ohat}[2]{%
\overset{\textcolor{gray}{#1}}{%
\colorlet{currentcolor}{.}%
\textcolor{gray}{%
\overlinesegment{\textcolor{currentcolor}{%
\vrule height 8pt depth 1pt width 0pt
#2%
}}%
}%
}%
}
\begin{document}
$x = 42 \times \ohat{y}{5 + 8}$
\end{document}
请注意\overset
,还有\stackrel
更好的色彩管理,所以如果当前颜色不是黑色,宏也会起作用。