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의 열을 맞출 수는 없습니다.\\는 다음 분기를 시작합니다. 보통 마지막 행에서는 생략합니다. 소스에서 Enter만 눌러서는 수식 행이 바뀌지 않습니다.\text{if }는 영어 단어를 일반 텍스트로 조판합니다. 뒤의 수학 조건과 간격을 두도록 중괄호 안의 공백을 유지하세요. 나머지 조건은\text{otherwise}로 씁니다.cases가 왼쪽 중괄호를 제공하므로\left\{를 더할 필요가 없습니다.\[...\]나equation같은 수학 환경 안에 넣어야 합니다. 여러 행의 정의는 독립 수식으로 배치하는 편이 읽기 좋습니다.
다음 계단 함수에서 실수 정의역의 otherwise는 0을 포함한 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입니다.
예제를 바꿀 때는 정의역과 모든 경계를 확인하세요. 양쪽 조건을 모두 등호 없는 부등식으로 쓰면 경계가 빠질 수 있고, 모두 등호를 포함하면 겹칠 수 있습니다. 컴파일 성공만으로 수학 조건의 정확성을 확인할 수는 없습니다.
분수가 작다면 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.texmain.log의 오류, 미해결 참조, Overfull \hbox를 확인하세요. 새로 생성된 main.pdf를 열어 중괄호, 조건 열, 분수 크기, 번호를 살펴봅니다. Huber 예제에 δ = 1의 세 잔차를 대입하면 계수를 잘못 옮겼는지도 확인할 수 있습니다.
EasyLaTeX에서는 예제를 프로젝트의 메인 파일에 넣고 올바른 메인 파일이 선택되었는지 확인합니다. 이 영어 article 예제에는 pdfLaTeX을 선택하세요. 컴파일이 끝난 뒤 문제가 있으면 Bug 패널과 Original Log를 확인합니다. Agent에 관련 소스와 로그를 제공해 원인 파악을 요청할 수도 있습니다. 수정 사항을 검토하고 다시 컴파일하세요. 기존 한국어 문서나 학술지 템플릿에서는 적절한 컴파일러와 설정을 유지합니다.
전체 최소 문서와 나머지 다섯 코드 예제는 TeXLive.net의 pdfLaTeX으로 컴파일하고 로그와 PDF를 확인했습니다. 제품 컴파일러나 특정 학술지 템플릿에서 테스트한 결과는 아닙니다. 원고에 합친 뒤에도 패키지 호환성과 최신 PDF를 확인하세요.
관련 문서: 첨자, 분수, 괄호와 행렬, 수식 줄바꿈, 컴파일 오류 해결.
참고 자료
- amsmath 사용자 안내서: 수학 환경,
cases,\text, 텍스트 스타일. - mathtools 공식 문서:
dcases와 별표 변형. - cases 패키지 문서:
numcases,subnumcases, 조건 열 문법.