这是我在数学堆栈交换(网站)中编写的代码。一开始,我认为数学交换中的代码和 MikTeX(我使用 WinEdt 作为前端)是相同的。但是,它们的结果有点不同。
第一个图是数学交流的结果,这正是我想要的。然而,第二个图是 LaTeX 的结果。
有人知道如何修改代码以使 LaTeX 结果正确吗?
\documentclass{article}
\begin{document}
$$\begin{cases}
\eta \alpha_0 p_0g_{r,k} \\[2ex]
\eta \alpha_0 p_0g_{r,k}+
\end{cases}$$
\end{document}
(数学堆栈交换)
(乳胶)
答案1
$$
tex 中使用了数学环境分隔符,因为 lateh 被定义为\[
……\]
。- 环境
cases
是在amsmath
包中定义的。它在你的mwe中缺失(最小工作示例 - 通常
cases
有两列,用 & 符号分隔 从我的“WinEdt”编辑器复制的代码是
\documentclass{article} \usepackage{amsmath} \begin{document} \[ \begin{cases} \eta \alpha_0 p_0g_{r,k} & \\[2ex] \eta \alpha_0 p_0g_{r,k}+ & \end{cases} \] \end{document}
编译后结果为:
答案2
在 math.stackexchange.com 上,运行的其实不是 LaTeX,而是 mathjax。输入语法非常相似,但这并不意味着底层程序是相同的。
一个鲜为人知的事实是,LaTeX 内核提供了一个命令(不是环境) 调用\cases
。如果amsmath
是不是已加载——就像您的示例代码中的情况一样——它是您提供代码\cases
时执行的命令。(本质上,变为,并且被忽略并且不会引发错误。)\begin{cases} ... \end{cases}
\begin{cases}
\cases
\end{cases}
你真正应该在 LaTeX 代码中做的是添加指令
\usepackage{amsmath}
\usepackage{mathtools}
也可以。这是因为会自动mathtools
加载amsmath
包。(该mathtools
包还提供了密切相关的环境cases*
、dcases
和dcases*
。)
我相信,即使是大多数 LaTeX 专家也完全不知道这个\cases
宏的存在,更不用说它的作用了。说实话,即使在最好的情况下,这个宏也不是很有用。我想这就是为什么在引入包及其环境\cases
时它基本上被覆盖(推倒?!)的原因。amsmath
cases
最后,值得注意的是,mathjax 会自动模拟该amsmath
包最重要的功能。这就是为什么即使不需要amsmath
明确加载该包,您也能在 mathjax 上获得预期结果的原因。
\eta
一个 MWE(最小工作示例)。请注意版本中后面的小间隙cases
。这是因为\begin{cases}
被翻译成\cases
,并且\cases
接受一个参数。还请注意,后面的剩余材料\eta
相对于略微向下移动\eta
。
\documentclass{article}
\makeatletter
% renamed version of LaTeX-kernel 'cases' macro:
\def\xcases#1{\left\{\,\vcenter{\normalbaselines\m@th
\ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.}
\makeatother
%\usepackage{amsmath} % big effect if this instruction is commented out!
\begin{document}
\[
\begin{cases}
\eta \alpha_0 p_0g_{r,k} \\
\eta \alpha_0 p_0g_{r,k}
\end{cases}
\]
\[
\xcases{\eta \alpha_0 p_0g_{r,k}\\
\eta \alpha_0 p_0g_{r,k}}
\]
\[ % trying to make [x]cases useful:
\xcases{\begin{array}{l}
\eta \alpha_0 p_0g_{r,k}\\
\eta \alpha_0 p_0g_{r,k}
\end{array}}
\]
\end{document}