Amsmath 和 mathtools 提供了两个宏来标记方程的项:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amsfonts}
\newcommand{\E}[3][]{\mathbb{\operatorname{E}}_{#2}#1[#3#1]}
\newcommand{\KL}[2]{D_\mathrm{\operatorname{KL}}[#1\;\|\;#2]}
\begin{document}
\begin{align}
\underbrace{\E{q_\phi(\theta)}{\ln p(\mathcal{D}|\theta)}}_\text{expected likelihood}
-\underbrace{\KL{q_\phi(\theta)}{p(\theta)}}_\text{complexity} \\
\underbracket{\E{q_\phi(\theta)}{\ln p(\mathcal{D}|\theta)}}_\text{expected likelihood}
-\underbracket{\KL{q_\phi(\theta)}{p(\theta)}}_\text{complexity}
\end{align}
\end{document}
我想获得这种行为,但括号或中括号只是一条粗直线。使用这些或其他包可以实现吗?
答案1
操纵<rule thickness>
和<bracket height>
\underbracket[<rule thickness>][<bracket height>]{<arg>}
就足够了。请注意,我删除了\mathbb{...}
,简化了\mathrm{KL}
,并将其更改 \;\|\;
为 \mathrel{\Vert}
。您可能还想使用 \mid
而 |
不是 \ln p(\mathcal{D}|\theta)
。
\documentclass{article}
%\usepackage{amsmath}
\usepackage{mathtools}
%\usepackage{amsfonts}% not needed since I removed `\mathbb'
\newcommand{\E}[3][]{\operatorname{E}_{#2}#1[#3#1]}
\newcommand{\KL}[2]{D_{\mathrm{KL}}[#1\mathrel{\Vert}#2]}% Put `\mathrm{KL}' in braces. Thanks, @egreg!
\begin{document}
\begin{align}
\underbrace{\E{q_\phi(\theta)}{\ln p(\mathcal{D}|\theta)}}_\text{expected likelihood}
-\underbrace{\KL{q_\phi(\theta)}{p(\theta)}}_\text{complexity} \\
\underbracket{\E{q_\phi(\theta)}{\ln p(\mathcal{D}|\theta)}}_\text{expected likelihood}
-\underbracket{\KL{q_\phi(\theta)}{p(\theta)}}_\text{complexity} \\
\underbracket[0.27778ex][0pt]{\E{q_\phi(\theta)}{\ln p(\mathcal{D}|\theta)}}_\text{expected likelihood}
-\underbracket[0.27778ex][0pt]{\KL{q_\phi(\theta)}{p(\theta)}}_\text{complexity}
\end{align}
\end{document}
我同意@StevenB.Segletes 的观点:这看起来相当令人困惑。你是在用“预期可能性”除以期望值,还是用“复杂性”除以信息/熵?即使规则很粗略,方程 (3) 中的表达式乍一看也像是(输入错误的)分数。
答案2
您还可以用其他方法来实现\underbracket
:
\documentclass{article}
\usepackage{mathtools}
\usepackage{amssymb}
\newcommand{\E}[3][]{\operatorname{\mathbb{E}}_{#2}#1[#3#1]}
\newcommand{\KL}[2]{D_{\mathrm{KL}}[#1\dmid#2]}
\newcommand{\dmid}{\parallel} % a semantic alias
\newcommand{\explain}[2]{{%
\vtop{\offinterlineskip\halign{\hfil##\hfil\cr
$\displaystyle{#1}$\cr
\noalign{\vskip1pt\hrule height 1pt\vskip1pt}
{\scriptsize\strut#2}\cr
}}%
}}
\begin{document}
\begin{equation}
\explain{\E{q_\phi(\theta)}{\ln p(\mathcal{D}\mid\theta)}}
{expected likelihood}
-\explain{\KL{q_\phi(\theta)}{p(\theta)}\vphantom{\E{q_\phi(\theta)}{}}}
{complexity}
\end{equation}
\end{document}
\E
我已经修复了have\operatorname
和replaced的定义\mathbb
。无需执行\mathrm{\operatorname{KL}}
,建议使用一对额外的括号:D_{\mathrm{KL}}
是正确的。
A\vphantom
会使下划线对齐。 应该|
是\mid
。