LaTeX 分段函數怎麼寫?cases、條件對齊與公式編號

部落格EasyLaTeX發布日期

LaTeX 分段函數可用 amsmath 套件的 cases 環境編寫:每行先寫函數值,以 & 分隔條件,再用 \\ 開始下一分支。將整個定義放進 equation,即可為它加上一個公式編號。

先複製這份完整範例

儲存為 main.tex,以 pdfLaTeX 編譯。這份 article 文件只需要 amsmath;一般分段函數不必再載入同名的 cases 套件。

LaTeX
\documentclass[a4paper,11pt]{article}\usepackage{amsmath}​\begin{document}\begin{equation}\label{eq:absolute}  |x| =  \begin{cases}    x,  & \text{if } x \ge 0, \\    -x, & \text{if } x < 0.  \end{cases}\end{equation}See equation~\eqref{eq:absolute}.\end{document}

PDF 應顯示一個左大括號、兩行函數值與條件,以及整個定義共用的一個編號。交叉引用解析後,內文的編號應與公式相同。x = 0 屬於第一分支,負數屬於第二分支,實數範圍內沒有遺漏或重疊。

分段函數結構示意:左欄是函數值,右欄是適用條件。邊界點 0 歸入第一行。

&、\\ 與條件文字怎麼寫?

  • & 將每行分成兩個靠左對齊的欄位。原始碼中縮排的空格不會形成 PDF 的欄位對齊。
  • \\ 表示下一分支,最後一行通常省略。原始碼中的一般換行不會讓公式換行。
  • \text{if } 將英文說明排成一般文字,括號內保留空格以隔開後面的數學條件。\text{otherwise} 表示「其他情況」。
  • cases 已提供左大括號,不必再加 \left\{。它必須位於數學模式內,例如 \[...\] 或 equation。多行分段定義通常適合獨立展示。

以下階躍函數在實數定義域中,以 otherwise 涵蓋 x <= 0,包括零點:

LaTeX
\[s(x)=\begin{cases}  1, & \text{if } x > 0, \\  0, & \text{otherwise}.\end{cases}\]

條件中的數學符號仍須放在數學模式中。把 if 當作數學字母會得到斜體並失去正常間距;將整條數學條件當作一般文字也會失去數學排版。後面的 dcases* 使用不同的右欄規則。

論文範例:Huber 損失與條件邊界

設 r 為實數殘差,門檻 δ > 0。Huber 損失在殘差較小時採用二次項,較大時採用關於絕對殘差的線性項:

LaTeX
\[L_{\delta}(r) =\begin{cases}  \frac{1}{2}r^2, & \text{if } |r| \le \delta, \\  \delta\left(|r|-\frac{1}{2}\delta\right),    & \text{if } |r| > \delta.\end{cases}\]

第一分支包含 |r| = δ,第二分支僅處理 |r| > δ。邊界處兩條表達式都等於 δ²/2,條件仍只把該點分配給第一分支。當 δ = 1,r = 0、1、2 的損失依序為 0、0.5、1.5。

修改範例時,先列出定義域,再檢查每個邊界。兩行都用嚴格不等式可能遺漏邊界;兩行都包含等號則可能重疊。編譯成功無法驗證這些數學條件。

分數太小:cases 與 dcases 的選擇

一般 cases 使用文字樣式 \textstyle,即使外層是獨立公式,內部 \frac 仍較小。需要更大的分數、求和或積分時,可將前置區的 \usepackage{amsmath} 換成 \usepackage{mathtools},再使用 dcases。mathtools 會自動載入 amsmath。

將以下片段放入已載入 mathtools 的文件內文,即可比較同一函數的兩種排法:

LaTeX
\[g(x)=\begin{cases}  \frac{1}{1+x^2}, & x \ge 0, \\  0, & x < 0.\end{cases}\qquadg(x)=\begin{dcases}  \frac{1}{1+x^2}, & x \ge 0, \\  0, & x < 0.\end{dcases}\]

排版樣式對照示意:函數定義與條件相同,dcases 採用展示樣式,分數較大,行距也較寬。實際效果以範本編譯結果為準。

若只有一個分數需要放大,可在 cases 中將 \frac 改為 \dfrac。它只改變該分數;dcases 則讓分支表達式使用展示樣式。請一併檢查行距與欄寬,尤其是窄欄版面。

dcases* 的右欄是一般文字

dcases 的條件欄仍是數學模式,英文需要 \text{...}。dcases* 將右欄設為一般文字,數學條件須放在 $...$ 中:

LaTeX
\[g(x)=\begin{dcases*}  \frac{1}{1+x^2}, & if $x \ge 0$, \\  0, & otherwise.\end{dcases*}\]

兩者都由 mathtools 提供。更換環境名稱時,也要修改右欄語法。

整體編號與各分支編號

需求寫法依賴與注意事項
不顯示編號\[...\] 內放 casesamsmath
整個定義一個編號equation 內放 cases使用 \label 與 \eqref
各分支分別編號numcases另載入 cases 套件;本身已是獨立公式環境
同組字母後綴編號subnumcasescases 套件,例如 (1a)、(1b)

一般函數定義用一個編號即可。若內文需要分別引用各分支,在前置區載入 \usepackage{amsmath} 和 \usepackage{cases},再加入:

LaTeX
\begin{numcases}{h(x)=}  x,  & if $x \ge 0$ \label{eq:positive} \\  -x, & if $x < 0$ \label{eq:negative}\end{numcases}See equations~\eqref{eq:positive} and~\eqref{eq:negative}.

參數 {h(x)=} 是大括號左邊的內容。右欄預設為文字,數學條件需要 $...$。不要將 numcases 再包進 equation 或 \[...\]。每行的 \label 對應各自編號;需要字母後綴時,可改成 subnumcases 並重新檢查引用。

更多規則見公式編號與交叉引用。

常見問題與修改位置

症狀檢查項目修改方法
數學模式或對齊錯誤外層數學環境與 amsmath恢復完整範例的外層環境與套件
Environment dcases undefined是否只載入 amsmath載入 mathtools
條件與函數值擠在一起是否缺少 &每行用一個 & 分隔
分支出現在同一行是否缺少 \\在分支之間加雙反斜線
Extra alignment tab 等錯誤是否有多餘的 &一般 cases 保持兩欄
英文斜體、空格消失是否把英文當作數學字母一般 cases 使用 \text{...}
出現兩個左大括號是否額外加了 \left\{保留 cases 提供的大括號
引用顯示 ??標籤拼字、編號環境與編譯次數檢查 \label 並重新編譯、查看日誌

同一症狀可能有其他原因。先看日誌中的第一個錯誤與附近原始碼,避免只根據最後一條訊息修改。

在本機或 EasyLaTeX 中驗證

本機 TeX Live / MiKTeX 使用者可在 main.tex 所在目錄執行:

Shell
pdflatex -interaction=nonstopmode -halt-on-error main.texpdflatex -interaction=nonstopmode -halt-on-error main.tex

查看 main.log 是否有錯誤、未解析引用或 Overfull \hbox,並開啟新產生的 main.pdf,檢查大括號、條件欄、分數大小及編號。將 δ = 1 的三個殘差代入 Huber 範例,也能檢查係數是否抄錯。

在 EasyLaTeX 中,將範例放進專案主檔,確認主檔選擇正確,並為這份英文 article 範例選用 pdfLaTeX。等待編譯完成;遇到問題時,在 Bug 面板查看提示及 Original Log。需要協助定位時,可向 Agent 提供相關原始碼和日誌,審閱修改後重新編譯。既有中文或期刊範本應保留適用的編譯器與設定。

完整最小文件與其餘五組程式碼片段已透過 TeXLive.net 的 pdfLaTeX 編譯,並核對日誌和 PDF;未在產品編譯器或特定期刊範本中實測。合併進論文後,仍須檢查套件相容性與目前的 PDF。

延伸閱讀:上下標、分數、括號與矩陣、公式換行教學及編譯錯誤排查。

參考資料