我正在尝试对二进制数字进行如下解释:
10111101
'--''---'
B D
为了显示二进制和十六进制的对应关系,但使用两次下括号命令:
\underbrace{1011}_B\underbrace{1101}_D
显然,我得到了两个不同的“词”:
1011 1101
'--' '---'
B D
我该如何解决这个问题?
答案1
\underbrace is defined in
fontmath.ltx`(LaTeX 数学内核的一部分)如下(缩短):
\def\underbrace#1{\mathop{...}\limits}
该构造定义为数学运算符 ( \mathop
)。这样,下限可以很容易地指定为下标。但 TeX 会在两个\mathop
原子之间添加一个很窄的空间。
可以通过添加负数细空格 来删除此空格\!
。或者可以将整个下括号结构放入花括号(子公式)中。然后它将成为普通的数学原子(\mathord
),其中 TeX 不会在它们之间添加空格。
下面的例子显示了这两种方法的区别:
\documentclass{article}
\begin{document}
\[
a
\underbrace{1011}_B
\!
\underbrace{1101}_D
b
\]
\[
a
{\underbrace{1011}_B}
{\underbrace{1101}_D}
b
\]
\end{document}
答案2
我建议使用tikzmark
:
传递给的参数\InsertUnderBrace
为:
[#1]
tikz 绘图选项,[#2]
tikz 括号选项,{#3}
左边的名字\tikzmark
,{#4}
权利名称\tikzmark
,{#5}
放置在括号下方的文本。
笔记:
这确实需要两次运行。第一次确定位置,第二次进行绘图。
这使用
\InsertUnderBrace
来自不对称过度支撑。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
% Tweak these as necessary
\newcommand*{\BraceAmplitude}{0.4em}%
\newcommand*{\BraceAspect}{0.5}%
\newcommand*{\VerticalOffset}{0.4ex}%
\newcommand*{\HorizontalOffset}{0.0em}%
\NewDocumentCommand{\InsertUnderBrace}{%
O{} % #1 = draw options
O{} % #2 = optional brace options
m % #3 = left tikzmark
m % #4 = right tikzmark
m % #5 = text to place underbrace
}{%
\begin{tikzpicture}[overlay,remember picture]
\draw [decoration={brace, amplitude=\BraceAmplitude, aspect=\BraceAspect, #2}, decorate, thick, draw=blue, text=black, #1]
($(#4)+(\HorizontalOffset,-\VerticalOffset)$) --
($(#3)+(-\HorizontalOffset,-\VerticalOffset)$)
node [below=\VerticalOffset, midway] {#5};
\end{tikzpicture}%
}%
\begin{document}
$\tikzmark{Left Mark} 1011 \tikzmark{Middle Mark} 1101 \tikzmark{Right Mark}$
\InsertUnderBrace[blue]{Left Mark}{Middle Mark}{B}%
\InsertUnderBrace[red]{Middle Mark}{Right Mark}{D}%
\end{document}