我想让公式 (1) 更紧凑,公式 id 在同一行。目前,它看起来像这样。
\documentclass[10pt, oneside, twocolumn, notitlepage]{book}
\usepackage{amsthm,latexsym,amssymb,amsmath, amsfonts}
\usepackage{graphicx}
\usepackage{lipsum}
\newtheorem{thm}{Theorem}[section]
\newtheorem{rem}[thm]{Remark}
\begin{document}
\lipsum[1]
%\resizebox{.9\linewidth}{!}{
\begin{align}
\label{eq:LS1}
\mathbf{u}_{e}^{b} = \tanh\Big(\sum_{(r,e') \in \mathcal{N}_{\operatorname{in}}(e)} \mathbf{W}_{\operatorname{in}}\mathbf{z}_{r} +\sum_{(r, e') \in \mathcal{N}_{\operatorname{out}}(e)} \mathbf{W}_{\operatorname{out}} \mathbf{z}_r\Big),
\end{align}%}Z
\lipsum
\end{document}
我尝试用\mathclap
它删除 \sum 周围的空格,但是它看起来有点丑(太紧)。
有没有办法可以稍微减少 \sum 周围的空间,但不全部删除?
答案1
以下示例将定义\makemathbox[<width>]{<math>}
为与 的数学等价物\makebox[<width>]{<stuff>}
。您可以指定比例\width
以将下标设置\sum
为其自然宽度的较小部分。
\documentclass[twocolumn]{book}
\usepackage{amsmath}
\usepackage{lipsum}
\makeatletter
\NewDocumentCommand{\makemathbox}{O{\width} m}{%
\def\makemathbox@##1##2{\makebox[#1]{$##1##2$}}%
\mathpalette\makemathbox@{#2}%
}
\makeatother
\begin{document}
\lipsum[1]
\begin{equation}
\mathbf{u}_e^b = \tanh\Big(
\sum_{\makemathbox[.5\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \mathbf{W}_{\mathrm{in}}\mathbf{z}_r +
\sum_{\makemathbox[.5\width]{(r, e') \in \mathcal{N}_{\mathrm{out}}(e)}} \mathbf{W}_{\mathrm{out}} \mathbf{z}_r
\Big),
\end{equation}
\lipsum
\end{document}
使用不同宽度的示例:
\usepackage{array}
%...
\[
\begin{array}{ c >{\displaystyle}c }
\verb|1.0\width| & \left| \sum_{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)} \right| \\
\verb|0.9\width| & \left| \sum_{\makemathbox[0.9\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.8\width| & \left| \sum_{\makemathbox[0.8\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.7\width| & \left| \sum_{\makemathbox[0.7\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.6\width| & \left| \sum_{\makemathbox[0.6\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.5\width| & \left| \sum_{\makemathbox[0.5\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.4\width| & \left| \sum_{\makemathbox[0.4\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.3\width| & \left| \sum_{\makemathbox[0.3\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.2\width| & \left| \sum_{\makemathbox[0.2\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.1\width| & \left| \sum_{\makemathbox[0.1\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right| \\
\verb|0.0\width| & \left| \sum_{\makemathbox[0.0\width]{(r,e') \in \mathcal{N}_{\mathrm{in}}(e)}} \right|
\end{array}
\]
答案2
以双栏格式排版大型公式通常需要做出一些妥协。
我建议在公式之后解释一下这些指标的来源。
\documentclass[10pt, oneside, twocolumn, notitlepage]{book}
\usepackage{amsthm,amssymb,amsmath}
\usepackage{lipsum}
\begin{document}
\lipsum[1][1-3]
\begin{equation}\label{eq:LS1}
\mathbf{u}_{e}^{b} =
\tanh\Bigl(
\sum_{\mathrm{in}} \mathbf{W}_{\mathrm{in}}\mathbf{z}_{r}
+
\sum_{\mathrm{out}} \mathbf{W}_{\mathrm{out}} \mathbf{z}_r
\Bigr),
\end{equation}
where the first summation is taken for
$(r,e') \in \mathcal{N}_{\mathrm{in}}(e)$ and the second for
$(r, e') \in \mathcal{N}_{\mathrm{out}}(e)$.
\lipsum
\end{document}
需要注意的几点:
- 不要
latexsym
一起加载amssymb
; amsfonts
已经加载amsfonts
;- 不要用
\operatorname
它来获取直立字母,除非你真的有一个操作员(这里不是这种情况); align
只有一行时不要使用。
答案3
在精细排版中,做出权衡几乎是不可避免的。关键是要尽量减少权衡的总“成本”。
由于在一行上排版方程及其相关方程编号非常重要,因此必须在其他地方做出妥协。IMNSHOm,在两个求和表达式上使用\mathclap
(或等效地)的任何负面影响在大多数情况下都可以通过分别用和替换和来\smashoperator
抵消。\Big(
Big)
\bigl(
\bigr
为了进一步改善公式的外观和底层代码的质量,请考虑(a)加入一些\!
(负薄空间)指令以改善字距调整和(b)\operatorname
用\mathrm
指令替换指令。
\documentclass[oneside, twocolumn]{book}
\usepackage{mathtools,lipsum}
\begin{document}
\hrule % illustrate width of text (column) block
\begin{gather}
\mathbf{u}_{e}^{b} = \tanh\Big(
\sum_{(r,e') \in \mathcal{N}_{\operatorname{in}}(e)}
\mathbf{W}_{\operatorname{in}} \mathbf{z}_{r}
+\sum_{(r, e') \in \mathcal{N}_{\operatorname{out}}(e)}
\mathbf{W}_{\operatorname{out}} \mathbf{z}_{r}
\Big),
\\[1ex]
\mathbf{u}_{e}^{b} = \tanh\bigl(\,
\smashoperator{\sum_{(r,e') \in \mathcal{N}_{\mathrm{in}}\mkern-1.5mu(e)}}
\mathbf{W}_{\!\mathrm{in}} \mathbf{z}_{r}
+\smashoperator{\sum_{(r, e') \in \mathcal{N}_{\mathrm{out}}\mkern-1.5mu(e)}}
\mathbf{W}_{\!\mathrm{out}} \mathbf{z}_{r}
\bigr),
\end{gather}
\hrule
\end{document}
答案4
该mathtools
包(加载amsmath
)定义了一个\smashoperator
执行该作业的命令。
amsfonts
无关:加载时无需加载amssymb
:后者会为您完成此操作。
\documentclass[10pt, oneside, twocolumn, notitlepage]{book}
\usepackage{amsthm, amssymb,mathtools}
\usepackage{graphicx}
\usepackage{lipsum}
\begin{document}
\lipsum[1]
\begin{align}
\label{eq:LS1}
\mathbf{u}_{e}^{b} = \tanh\Bigl(\smashoperator{\sum_{(r,e') \in \mathcal{N}_{\operatorname{in}}(e)}} \mathbf{W}_{\operatorname{in}}\mathbf{z}_{r} +\smashoperator{\sum_{(r, e') \in \mathcal{N}_{\operatorname{out}}(e)}} \mathbf{W}_{\operatorname{out}} \mathbf{z}_r\Bigr),
\end{align}
\lipsum
\end{document}