下面有一个方程,它被包裹在equation
andsplit
环境中。由于方程很长,它会超出边距,所以我使用了resizebox
。根据这个问题在环境中时,我需要明确进入数学模式resizebox
。但是,我仍然收到错误。该文档可以编译(至少在 Overleaf 上可以),但我想消除该错误,以便可以共享 tex 文件。
代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amssymb}
\usepackage{parskip}
\usepackage[numbers]{natbib}
\bibliographystyle{plainnat}
\usepackage{graphicx}
\begin{document}
\begin{equation}
\label{eq:word}
\resizebox{\textwidth}{!}{%
\begin{split}
$quality(w_{i}) = & \log(1 + \operatorname{similarity}(a,b)) + \log(1 + familiarity(w_{i})) \\
& + \log(1+familiarity(\min{(e,3)})) +
\log(1 + expectedness(w_i|w_{i-1})) \\
& - \log(1+tts\textnormal{-}experience(subject)) +
quality(w_{i-1}) + \mathcal{A}$%
\end{split}
}
\end{equation}
\end{document}
引发错误:
Pakage amsmath Error: \begin{aligned} allowed only in math mode
Missing $ inserted
Missing { inserted
Missing } inserted
该错误该如何解决?
答案1
环境split
需要数学模式:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amssymb}
\usepackage{parskip}
\usepackage[numbers]{natbib}
\bibliographystyle{plainnat}
\usepackage{graphicx}
\begin{document}
\begin{equation}
\label{eq:word}
\resizebox{\textwidth}{!}{%
$
\begin{split}
quality(w_{i}) = & \log(1 + \operatorname{similarity}(a,b)) + \log(1 + familiarity(w_{i})) \\
& + \log(1+familiarity(\min{(e,3)})) +
\log(1 + expectedness(w_i|w_{i-1})) \\
& - \log(1+tts\textnormal{-}experience(subject)) +
quality(w_{i-1}) + \mathcal{A}%
\end{split}
$
}
\end{equation}
\end{document}
答案2
为什么要调整大小?多一行就足够了。
\documentclass{article}
\usepackage{amsmath,amssymb}
\makeatletter
\newcommand{\tf}[1]{\operatorname{#1}} % text function
\newcommand{\tv}[1]{\mathit{\newmcodes@ #1}} % text variable
\makeatother
\begin{document}
\begin{equation}\label{eq:word}
\begin{split}
\tf{quality}(w_{i})
&= \log(1 + \tf{similarity}(a,b)) + \log(1 + \tf{familiarity}(w_{i})) \\
&\quad + \log(1+\tf{familiarity}(\min{(e,3)})) \\
&\quad + \log(1 + \tf{expectedness}(w_i|w_{i-1})) \\
&\quad - \log(1+\tf{tts-experience}(\tv{subject}))
+ \tf{quality}(w_{i-1}) + \mathcal{A}
\end{split}
\end{equation}
\end{document}
我选择用 来表示函数名称\operatorname
,这样就直立了,变量用斜体(但文本用斜体,而不是数学斜体)。诀窍\newmcodes@
是让变量中的连字符也变成正常的,而不是减号。
我不会将运算符号对齐在等号下。如果您更喜欢它,以下是正确的代码。
\documentclass{article}
\usepackage{amsmath,amssymb}
\makeatletter
\newcommand{\tf}[1]{\operatorname{#1}} % text function
\newcommand{\tv}[1]{\mathit{\newmcodes@ #1}} % text variable
\makeatother
\begin{document}
\begin{equation}\label{eq:word}
\begin{split}
\tf{quality}(w_{i})
={} & \!\log(1 + \tf{similarity}(a,b)) + \log(1 + \tf{familiarity}(w_{i})) \\
{}+{} & \!\log(1+\tf{familiarity}(\min{(e,3)})) \\
{}+{} & \!\log(1 + \tf{expectedness}(w_i|w_{i-1})) \\
{}-{} & \!\log(1+\tf{tts-experience}(\tv{subject}))
+ \tf{quality}(w_{i-1}) + \mathcal{A}
\end{split}
\end{equation}
\end{document}
这些\!
位是必需的,因为在split
之后插入了“空原子” &
,这导致后面的操作符前面有一个细空格,我们需要将其删除。
答案3
缩放方程式会导致字体大小不兼容,通常最好避免。
这里的方程比它需要的更宽,因为数学斜体将字母隔开,使它们成为变量的乘积,而不是一个单词,经过这样的改变它已经适合页面了,但是方程式编号被向下移动了,在这里我添加了一个额外的换行符以便方程式编号可以保持居中。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amssymb}
\usepackage{parskip}
\usepackage[numbers]{natbib}
\bibliographystyle{plainnat}
\usepackage{graphicx}
\begin{document}
\begin{gather}
\label{eq:word}
\begin{split}
\operatorname{quality}(w_{i}) ={}\hspace{-50pt}&\\
&\log(1 + \operatorname{similarity}(a,b)) + \log(1 + \operatorname{familiarity}(w_{i})) \\
& + \log(1+\operatorname{familiarity}(\min{(e,3)})) +
\log(1 + \operatorname{expectedness}(w_i|w_{i-1})) \\
& - \log(1+\operatorname{tts-experience}(\mathrm{subject})) +
\operatorname{quality}(w_{i-1}) + \mathcal{A}
\end{split}
\end{gather}
\end{document}