1. 程式人生 > >LaTeX技巧-排版大括號

LaTeX技巧-排版大括號

如圖:

LaTeX技巧心得255:用laTeX排版大括號的三種方法

演示程式碼:

\documentclass{article}
\setlength\textwidth{245.0pt}
\usepackage{CJK}
\usepackage{indentfirst}
\usepackage{amsmath}

\begin{CJK*}{GBK}{song}
\begin{document}
方法一:

$$ f(x)=\left\{
\begin{aligned}
x & = & \cos(t) \\
y & = & \sin(t) \\
z & = & \frac xy
\end{aligned}
\right.
$$


方法二:

$$ F^{HLLC}=\left\{
\begin{array}{rcl}
F_L       &      & {0      <      S_L}\\
F^*_L     &      & {S_L \leq 0 < S_M}\\
F^*_R     &      & {S_M \leq 0 < S_R}\\
F_R       &      & {S_R \leq 0}
\end{array} \right. $$

方法三:

$$f(x)=
\begin{cases}
0& \text{x=0}\\
1& \text{x!=0}
\end{cases}$$

\end{CJK*}

\end{document}

LaTeX的數學公式有兩種,即行中公式和獨立公式。行中公式放在正文中間,獨立公式單獨成行。

(1)行中公式可以用如下這三種方法表示:
\begin{math}x^n+y^n=z^n\end{math},
或者
\(x^n+y^n=z^n\),
或者
$x^n+y^n=z^n$。

(2)會自動單獨成行的獨立公式可以用如下三種方法表示:
\begin{displaymath}
x^n+y^n=z^n
\end{displaymath}



不自動編號
\[x^n+y^n=z^n\] 

人工編號
$$x^n+y^n=z^n$$
此種格式還可以指定公式的手動編號
$$x^n+y^n=z^n \eqno{(1)}$$

自動編號
\begin{equation}
x^n+y^n=z^n
\end{equation}

引用時候可以直接用$編號$即可。
例如,$$a^2+b^2=c^2 /eqno (**)$$
由公式($**$)即可得到結論。
一般情況下,行間公式 $$…$$也可以用/[…/]表示
但對於這種人工編號的公式,不能用/[../]代替$$…$$.

單個公式換行
單個公式很長的時候需要換行,但僅允許生成一個編號時,可以用split命令
/begin{equation}
/begin{split}

a &= b //
c &= d
/end{split}
/end{equation}
注意:每行只允許出現一個“&”,使用split命令後,編號會 上下居中 顯示。

(3)多行的獨立公式,可以用如下方式撰寫:
begin{eqnarray}
左 & 中 & 右//
左 & 中 & 右//

/end{eqnarray}
比如:
\begin{eqnarray*}
x^n+y^n & = & z^n \\
x+y & = & z
\end{eqnarray*}
該環境對多行公式每行都加自動編號,如果相對某行不加編號,可在換行之前新增命令/nonumber。
其中兩個&號之間的是公式間對齊的位置,用//隔開各行公式。將eqnarray改為eqnarray*輸出的公式是沒有編號。
如果要改變公式的自動編號,可以重設計數器初始值:
/setcounter{equation}{數}
下一個編號自動加1。

(4)多個公式(比如,方程組)每個公式自動編號。
1) gather環境
是下面align環境的一種特殊情形。
/begin{gather}
a &= b //
c &= d //

/end{gather}
>>1.如果其中某幾行使用同一個編號,則需要內嵌一個split環境。
>>2.命令/notag可使當前行不編號。
2) align環境
可使幾組公式並排在一起,即在同一行顯示多個公式,方法是跟以前一樣,使用”&”對齊。
可替代gather環境。
3) /gathered,/aligned。以上幾種方程組環境,無論每個公式多小,都會佔滿一行。使用相應的/gathered,/aligned環境,則只佔據公式的實際寬度,整體作為一個特大的符號與其他符號一同處理。
這個結構還可以新增位置引數,以決定與其他符號的豎直對齊方式(b,t)。而且這種環境不再具有自動編號功能。

例如:
/begin{equation}
/left.
/begin{aligned}[b]
a &= b+c //
d &= b+c
/end{aligned}
/right/}
/Longrightarrow
/qquad a=d
/end{equation}

我原來用的是
  1. \begin{equation}
  2. \begin{cases}
  3. eq1\\
  4. eq2
  5. \end{cases}
  6. \end{equation}
複製程式碼
對於不需對齊的方程組這樣寫比較方便,需要對齊的時候間距太大了。
有時候需要對齊,這時候我用
  1. \begin{equation}
  2. \left\{
  3. \begin{align} % \begin{eqnarray}好像也可以。
  4. x&=eq1\\
  5. y&=eq2
  6. \end{align}
  7. \right.
  8. \end{equation}
複製程式碼
但覺得輸入有點麻煩,而且我覺得Latex應該有內建的命令。請大家指點。

網上的其他解決方案:
1  
  1. \begin{equation}
  2. \left\{
  3. \begin{array}{rl}
  4. x&=eq1\\
  5. y&=eq2
  6. \end{array}
  7. \right.
  8. \end{equation}
複製程式碼%這個方案麻煩不說,x和=的間距還很大,摒棄之 :lol 

2
  1. \[\left\{\begin{minipage}{width=0.6\textwidth}\begin{eqnarray*}
  2. ...
  3. \end{eqnarray}
  4. \end{minipage}
  5. \right.
  6. \\nonumber %如果不想要方程號
  7. \]
複製程式碼
呵呵,這個可以學習minipage了,用在這裡我覺得有點複雜化了。

3 如果每一行都需要行號,可以{By Huangzh73}

  1. \usepackage{cases}
  2. \begin{numcases}{|x|=}
  3. x, & for $x \geq 0$\\
  4. -x, & for $x < 0$
  5. \end{numcases}
複製程式碼

or
  1. \begin{numcases}{}
  2. x+y=z,\\
  3. 1+2=3.
  4. \end{numcases}
複製程式碼
[ 本帖最後由 dlmaple 於 2007-11-8 09:25 編輯 ]
回覆

舉報

2# 發表於 2007-11-8 10:20:14 | 只看該作者
array環境
  1. \begin{equation}
  2. \left\{
  3. \begin{array}{[email protected]{\;=\;}l}
  4. x & eq1\\
  5. y & eq2
  6. \end{array}
  7. \right.
  8. \end{equation}
複製程式碼
回覆

舉報

3#  樓主| 發表於 2007-11-8 16:49:00 | 只看該作者
原帖由 journeyer 於 2007-11-8 10:20 發表
array環境

\begin{equation}
\left\{
\begin{array}{[email protected]{\;=\;}l}
x & eq1\\
y & eq2
\end{array}
\right.
\end{equation}


謝謝:handshake ,不過這樣比align好在哪兒?
回覆

舉報

4# 發表於 2007-11-8 20:10:12 | 只看該作者
(一)大括號下並列的式子, 右邊只有一個縱向居中的編號:

  1. \begin{equation}
  2.   \left\{
  3.    \begin{array}{c}
  4.    x + y = z,  \\
  5.    1 + 2 = 3.  \\
  6.    \end{array}
  7.   \right.
  8.   \end{equation}
複製程式碼


或者比較 cases 環境:

  1. \begin{equation}
  2.   \begin{cases}
  3.     x + y = z,  \\
  4.     1 + 2 = 3.  \\
  5.   \end{cases}
  6.   \end{equation}
複製程式碼

(二)大括號下並列的式子, 每個都加上編號, 需要呼叫 cases 巨集包: {這是一個巨集包! 與 amsmath 巨集包中的 cases 環境相區別.}

  1. \usepackage{cases} 
  2. ......
  3. \begin{numcases}{}
  4.    x+y=z,\\
  5.    1+2=3.
  6.   \end{numcases}
複製程式碼

為什麼 \begin{numcases}{} 有一對空的大括號? 因為它的基本用法是這樣的:

  1. \usepackage{cases}
  2. ......
  3. \begin{numcases}{|x|=}
  4.    x,  & for $x \geq 0$;\\
  5.    -x, & for $x < 0$.
  6.   \end{numcases}
複製程式碼
回覆

舉報

5#  樓主| 發表於 2007-11-9 07:47:25 | 只看該作者
原帖由 huangzh73 於 2007-11-8 20:10 發表
(一)大括號下並列的式子, 右邊只有一個縱向居中的編號:

\begin{equation}
  \left\{
   \begin{array}{c}
   x + y = z,  \\
   1 + 2 = 3.  \\
   \end{array}
  \right.
  \end{equation}


...

哈哈,專家來了,歡迎。
但我我覺得array不如align,大家不妨比較一下。
  1. \begin{equation}
  2.   \left\{
  3.    \begin{array}{c}
  4.    x + y = z,  \\
  5.    c+1 + 2 = 3.  \\
  6.    \end{array}
  7.   \right.
  8.   \end{equation}
複製程式碼

  1. \begin{equation}
  2.   \left\{
  3.    \begin{align}
  4.    x + y &= z,  \\
  5.    c+1 + 2 &= 3.  \\
  6.    \end{align}
  7.   \right.
  8.   \end{equation}
複製程式碼
回覆

舉報

6# 發表於 2007-11-15 23:10:39 | 只看該作者
解決了我的一個問題, 學習了, 呵呵.  

另外, 可能要改一下才能編譯, 把 align 改為 aligned:

  1. \begin{equation}
  2.   \left\{
  3.    \begin{aligned}
  4.    x + y &= z,  \\
  5.    c+1 + 2 &= 3.  \\
  6.    \end{aligned}
  7.   \right.
  8. \end{equation}
複製程式碼