我的代码是
\newcommand\rsx[1]{\left.{#1}\vphantom{\Big|}\right|}
\begin{eqnarray}
&&let \;\; L(\bf{X},\lambda,\mu)= f(\bf{X})+\sum_{i=1}^p \lambda_{i}h_{i}(\bf{X})+\sum_{j=1}^q\mu_{j}g_{j}(\bf{X}) \nonumber\\
&& \;\;\;\;\; \rsx{\frac{\partial L}{\partial \bf{X}}}_{\bf{X}=\bf{X^*}}=0 \nonumber\\
&& \;\;\;\;\; \lambda_{i}\neq0,\;\;\;\mu_{j}\geq0,\;\;\;\nonumber\\
&& \;\;\;\;\; \mu_{j}g_{j}(\bf{X^*})=0,\;\;\; h_{i}(\bf{X}^*)=0 \;\;\; g_{j}(\bf{X^*})\leq0
\label{equ: KKT conditions}
\end{eqnarray}
下面是结果,从该图可以看出,这些方程中的字体类型不同,为什么(在不同的行中看到字母“g”)?
答案1
对齐点可以进行更好的微调,但我只是想纠正代码中的一些问题。以下是我输入公式的方式:
% arara: pdflatex
\documentclass{article}
\usepackage{mathtools}
\newcommand{\pder}[2][]{\frac{\partial#1}{\partial#2}}
\newcommand\numberthis{\addtocounter{equation}{1}\tag{\theequation}}
\begin{document}
\begin{align*}
\MoveEqLeft[7]\text{let } L(\mathbf{X},\lambda,\mu)= f(\mathbf{X})+\sum_{i=1}^p \lambda_{i}h_{i}(\mathbf{X})+\sum_{j=1}^q\mu_{j}g_{j}(\mathbf{X})\\
\pder[L]{\mathbf{X}}\biggr|_{\mathbf{X}=\mathbf{X}^*}&=0\\
\lambda_{i}&\neq 0,\quad\mu_{j}\geq 0,\\
\mu_{j}g_{j}(\mathbf{X}^*)&=0,\quad h_{i}(\mathbf{X}^*)=0,\quad g_{j}(\mathbf{X}^*)\leq 0 \numberthis\label{equ:KKTconditions}
\end{align*}
\end{document}
或者:
\begin{align*}
\MoveEqLeft[2]\text{let } L(\mathbf{X},\lambda,\mu)= f(\mathbf{X})+\sum_{i=1}^p \lambda_{i}h_{i}(\mathbf{X})+\sum_{j=1}^q\mu_{j}g_{j}(\mathbf{X})\\
&\pder[L]{\mathbf{X}}\biggr|_{\mathrlap{\mathbf{X}=\mathbf{X}^*}}=0\\
&\lambda_{i}\neq 0,\quad\mu_{j}\geq 0,\\
&\mu_{j}g_{j}(\mathbf{X}^*)=0,\quad h_{i}(\mathbf{X}^*)=0,\quad g_{j}(\mathbf{X}^*)\leq 0 \numberthis\label{equ:KKTconditions}
\end{align*}
答案2
该命令\bf
是 Plain-TeX 命令。虽然它在 LaTeX 中仍可继续使用,但已被视为已弃用。
您遇到的问题的直接原因是 的使用不正确\bf
:它是一个开关,不接受参数。因此,您应该写{\bf ...}
而不是\bf{...}
。正如您“发现的”, 的范围\bf{...} ...
是不是花括号内的材料;它延伸到当前(数学)组的末尾。
对于 LaTeX 文档,不应\bf
再使用。对于文本材料,请写\textbf{...}
或{\bfseries ...}
。对于数学材料, \mathbf{...}
如果您想要直立粗体字母,请使用,如果您想要\bm{...}
(需要软件包)bm
斜体粗体字。
您的代码片段还有两个问题:
不要使用
eqnarray
环境:它已被严重弃用。请使用诸如这样的环境align
。请参阅帖子eqnarray 与 align彻底检查不使用的原因eqnarray
。您似乎在进行大量的视觉格式化。这使得代码既难以阅读,又不如您希望的那样灵活。下面的代码提出了一些替代措施,并使用 代替
align
。它还展示了和eqnarray
产生的不同效果。\mathbf
\bm
\documentclass{article}
\usepackage{amsmath} % for 'align' environment
\usepackage{bm}
\newcommand\rsx[1]{#1\vphantom{\Big|}\bigg\rvert}
\begin{document}
First with \verb+\bm{...}+:
\begin{align}
\text{Let }&L(\bm{X},\lambda,\mu)= f(\bm{X})
+\sum_{i=1}^p \lambda_{i}h_{i}(\bm{X})
+\sum_{j=1}^q\mu_{j}g_{j}(\bm{X}) \nonumber\\
&\rsx{\frac{\partial L}{\partial\bm{X}}}
_{\bm{X}=\bm{X^*}} =0 \nonumber\\
&\lambda_{i}\neq0,\quad \mu_{j}\geq0,\nonumber\\
&\mu_{j} g_{j}(\bm{X^*})=0,\quad
h_{i}(\bm{X}^*)=0,\quad
g_{j}(\bm{X^*})\leq0
\label{equ:KKT_conditions}
\end{align}
\bigskip
Second with \verb+\mathbf{...}+
\begin{align}
\text{Let }&L(\mathbf{X},\lambda,\mu)= f(\mathbf{X})
+\sum_{i=1}^p \lambda_{i}h_{i}(\mathbf{X})
+\sum_{j=1}^q\mu_{j}g_{j}(\mathbf{X}) \nonumber\\
&\rsx{\frac{\partial L}{\partial\mathbf{X}}}
_{\mathbf{X}=\mathbf{X^*}} =0 \nonumber\\
&\lambda_{i}\neq0,\quad \mu_{j}\geq0,\nonumber\\
&\mu_{j} g_{j}(\mathbf{X^*})=0,\quad
h_{i}(\mathbf{X}^*)=0,\quad
g_{j}(\mathbf{X^*})\leq0
\label{equ:KKT_conditions_alt}
\end{align}
\end{document}