LaTeX 分段函數怎麼寫?cases、條件對齊與公式編號
LaTeX 分段函數可用 amsmath 套件的 cases 環境編寫:每行先寫函數值,以 & 分隔條件,再用 \\ 開始下一分支。將整個定義放進 equation,即可為它加上一個公式編號。
先複製這份完整範例
儲存為 main.tex,以 pdfLaTeX 編譯。這份 article 文件只需要 amsmath;一般分段函數不必再載入同名的 cases 套件。
\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,包括零點:
\[s(x)=\begin{cases} 1, & \text{if } x > 0, \\ 0, & \text{otherwise}.\end{cases}\]條件中的數學符號仍須放在數學模式中。把 if 當作數學字母會得到斜體並失去正常間距;將整條數學條件當作一般文字也會失去數學排版。後面的 dcases* 使用不同的右欄規則。
論文範例:Huber 損失與條件邊界
設 r 為實數殘差,門檻 δ > 0。Huber 損失在殘差較小時採用二次項,較大時採用關於絕對殘差的線性項:
\[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 的文件內文,即可比較同一函數的兩種排法:
\[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* 將右欄設為一般文字,數學條件須放在 $...$ 中:
\[g(x)=\begin{dcases*} \frac{1}{1+x^2}, & if $x \ge 0$, \\ 0, & otherwise.\end{dcases*}\]兩者都由 mathtools 提供。更換環境名稱時,也要修改右欄語法。
整體編號與各分支編號
| 需求 | 寫法 | 依賴與注意事項 |
|---|---|---|
| 不顯示編號 | \[...\] 內放 cases | amsmath |
| 整個定義一個編號 | equation 內放 cases | 使用 \label 與 \eqref |
| 各分支分別編號 | numcases | 另載入 cases 套件;本身已是獨立公式環境 |
| 同組字母後綴編號 | subnumcases | cases 套件,例如 (1a)、(1b) |
一般函數定義用一個編號即可。若內文需要分別引用各分支,在前置區載入 \usepackage{amsmath} 和 \usepackage{cases},再加入:
\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 所在目錄執行:
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。
延伸閱讀:上下標、分數、括號與矩陣、公式換行教學及編譯錯誤排查。
參考資料
- amsmath 使用指南:數學環境、
cases、\text與文字樣式。 - mathtools 官方文件:
dcases與星號變體。 - cases 套件文件:
numcases、subnumcases與條件欄語法。