\begin{...}부터 \end{...}까지로 감싼 하나의 영역을 환경(environment) 이라고 합니다. 문서의 한 범위를 구분하고 그 안의 모든 내용에 어떤 동작이나 서식을 적용하는 장치이며, 목록, 별행 수식, 그림, 표, 인용처럼 LaTeX의 거의 모든 구조가 이 형태를 취합니다. 이 페이지에서는 환경이 무엇인지, 어떻게 중첩하는지, 자주 쓰는 환경과 직접 환경을 정의하는 방법을 살펴봅니다.
환경이란 무엇인가
환경은 \begin{name}으로 시작해 \end{name}으로 끝나는 구분된 블록이며, 그 내용에 어떤 효과를 적용합니다. center 환경은 안의 내용을 가운데 정렬하고, itemize 환경은 내용을 글머리표 목록으로 만듭니다. 핵심 규칙은 시작 이름과 끝 이름이 완전히 같아야 한다는 것입니다. \begin{center}를 열고 \end{flushleft}로 닫을 수는 없습니다.
\begin{center}
この段落は中央に寄ります。
\end{center}또 하나 중요한 점은 환경이 암묵적인 그룹, 즉 지역 범위를 만든다는 것입니다. 환경 안에서 바꾼 글꼴이나 간격 설정은 \end{...}를 지나면 되돌아가며 밖으로 새지 않습니다. 예를 들어 quote 환경 안에서 들여쓰기와 여백이 바뀌어도, 환경을 벗어나면 주변 본문은 정상으로 돌아옵니다. 환경도 중괄호 그룹 { ... }과 같은 범위 제한을 갖는다고 생각하면 됩니다.
문서 전체도 사실 하나의 환경입니다. 바로 \begin{document} … \end{document}입니다. 모든 본문을 document 환경 안에 쓴다는 최소 규칙은 여기서 나옵니다.
환경을 중첩하는 방법
환경은 중첩할 수 있습니다. 다만 연 순서의 반대 순서로 닫아야 합니다. \begin{a} 안에서 \begin{b}를 열었다면 먼저 \end{b}로 안쪽을 닫고, 그다음 \end{a}로 바깥쪽을 닫습니다. 즉 \begin{a}\begin{b}...\end{b}\end{a} 형태입니다.
\begin{quote}
引用の中に箇条書きを置く例:
\begin{itemize}
\item 一つ目
\item 二つ目
\end{itemize}
\end{quote}반대로 \begin{a}\begin{b}...\end{a}\end{b}처럼 범위가 교차(겹침) 하게 쓸 수는 없습니다. 이는 LaTeX에서 가장 흔한 오류 중 하나이며, 열린 환경과 닫힌 환경이 맞지 않는다는 \begin{...} ended by \end{...} 같은 메시지가 나옵니다. 긴 문서에서는 각 환경을 들여쓰기해 대응 관계가 보이게 하면 \end를 빠뜨리거나 잘못 맞추는 일을 줄일 수 있습니다.
자주 쓰는 환경
표준 LaTeX에는 목적별로 많은 환경이 준비되어 있습니다. 아래에는 대표적인 것들을 역할별로 정리합니다. 자세한 사용법은 각각의 전용 페이지에서 다루지만, 모두 \begin / \end로 감싸는 같은 형태라는 점은 공통입니다.
| 분류 | 환경 | 역할 | |
|---|---|---|---|
text | 본문 | center, flushleft, flushright, quote, quotation, verbatim | 가운데/왼쪽/오른쪽 정렬, 인용, 입력 그대로 출력 |
lists | 목록 | itemize, enumerate, description | 글머리표, 번호, 설명형 목록 |
math | 수식 | equation, align | 별행 수식, 여러 줄 정렬 수식 |
floats | 플로트 | figure, table | 그림과 표를 적절한 위치로 떠가게 함 |
tabular | 표 조판 | tabular | 행과 열로 된 표 만들기 |
quote와 quotation은 둘 다 인용문을 들여쓰지만, quotation은 각 단락의 첫 줄도 추가로 들여쓰기하므로 긴 다중 단락 인용에 알맞습니다. verbatim 환경은 내용을 등폭 글꼴로 입력한 그대로 출력하며, \나 { 같은 특수 문자도 명령이 아니라 문자 그대로 취급합니다. 프로그램 소스를 보여 줄 때 유용합니다.
일부 환경은 인수를 받습니다. tabular에는 열 지정이 필요하며, \begin{tabular}{cc}처럼 \begin{tabular} 바로 뒤의 인수에 각 열의 정렬(c 가운데, l 왼쪽, r 오른쪽)을 적습니다. 표 안에서는 열을 &로 나누고 각 행은 \\로 끝냅니다.
\begin{tabular}{cc}
名前 & 役割 \\
TeX & 組版エンジン \\
LaTeX & 文書フォーマット \\
\end{tabular}또 많은 환경에는 이름 끝에 *를 붙이는 별표형(starred form) 이 있습니다. 예를 들어 align 환경은 모든 줄에 식 번호를 붙이지만, \begin{align*} … \end{align*}는 번호를 붙이지 않는 버전입니다. equation*도 마찬가지로 번호 없는 별행 수식을 만듭니다.
직접 환경 정의하기
문서 안에서 같은 서식 조합을 반복한다면 \newenvironment 로 전용 환경을 정의할 수 있습니다. 한 번 정의하면 자신의 이름으로 \begin / \end를 사용할 수 있습니다. 구문은 다음과 같습니다([nargs]와 [default]는 생략 가능).
\newenvironment{名前}[nargs][default]{開始時のコード}{終了時のコード}- name — 새 환경의 이름입니다(백슬래시는 붙이지 않으며
end로 시작할 수 없습니다). - nargs — 받는 인수의 개수(0–9)이며, 본문에서는
#1,#2, … 로 참조합니다. - default — 이를 지정하면 첫 번째 인수가 선택 인수가 되고, 이 값이 기본값이 됩니다.
- begin-code —
\begin{name}에서 실행됩니다.#1같은 인수는 여기서 사용합니다. - end-code —
\end{name}에서 실행됩니다. 여기서는#1같은 인수를 사용할 수 없습니다.
예로, 주의 사항을 테두리 상자로 강조하는 important 환경을 만들어 봅니다. 제목 단어를 선택 인수로 넘길 수 있게 하고 기본값을 “중요”으로 둡니다. default를 지정했으므로 #1이 그 인수를 받습니다.
\newenvironment{important}[1][重要]{%
\begin{quote}\noindent\textbf{#1:}\itshape
}{%
\end{quote}%
}
% 使い方
\begin{important}
締め切りは厳守してください。
\end{important}
\begin{important}[注意]
バックアップを忘れずに。
\end{important}첫 번째 사용 예는 기본값 “重要:”(Important:)을 제목으로 쓰고, 두 번째는 [注意]를 넘겨 “注意:”(Note:)를 제목으로 씁니다. 둘 다 이어지는 본문을 기울임꼴로 조판합니다. begin-code 안에서 \begin{quote}를 열고 end-code 안에서 대응하는 \end{quote}를 닫는 점에 주목하세요. 환경 자체가 그룹이므로 \itshape(기울임꼴)의 효과는 \end{important}에서 자동으로 되돌아가며 바깥 본문에는 영향을 주지 않습니다.
기존 환경을 다시 정의하려면 \renewenvironment 를 사용합니다. 구문은 \newenvironment와 같지만, 이미 정의된 이름에 대해서만 사용합니다(정의되지 않은 이름은 오류). 반대로 \newenvironment는 기존 이름에 사용하면 오류가 납니다. \newenvironment와 \renewenvironment에는 인수 끝의 공백 처리 방식이 다른 * 붙은 파생형도 있습니다.
닫는 줄을 잃어버리지 않는 작성법
긴 문서에서는 환경 오류가 실수한 바로 그 위치가 아니라 몇 페이지 뒤 \end{document} 근처에서 처음 드러날 수 있습니다. 그래서 환경을 열면 곧바로 닫는 줄도 적고, 그 사이에 내용을 채우는 습관을 들입니다. 중첩은 두 칸 또는 네 칸으로 들여쓰기하여 figure 안의 tabular, quote 안의 itemize처럼 무엇이 무엇 안에 있는지가 소스에서 보이게 합니다.
\begin{figure}
\centering
\begin{tabular}{ll}
入力 & 出力 \\
source & PDF \\
\end{tabular}
\caption{処理の対応}
\end{figure}오류가 나면 로그의 \begin{...} ended by \end{...} 줄만 보고 판단하지 말고, 방금 추가한 환경을 최소 예제로 잘라냅니다. 표, 그림, 수식, 목록을 각각 독립적으로 컴파일되는 작은 조각으로 확인한 뒤 주 파일에 돌려놓으면, 닫는 \end 누락과 패키지에서 비롯된 오류를 분리할 수 있습니다.
환경을 의미 있는 부품으로 선택하기
환경은 단순한 시각적 상자가 아니라 원고의 부품 이름입니다. 인용에는 quote, 글머리표 목록에는 itemize, 표의 격자에는 tabular, 나중에 캡션, 번호, 상호 참조, 목록이 필요한 떠다니는 자료에는 figure나 table을 씁니다. 보기 좋게 가운데 맞춤을 하려고 center를 고르거나 여백만 얻으려고 quote를 고르면, 긴 문서에서 그 블록의 역할이 불분명해집니다.
- 본문의 의미가 인용 —
quote/quotation을 사용하고, 출처를 본문이나 각주에 밝힙니다. - 논리적인 항목열 —
itemize/enumerate/description을 사용하고\\로 목록을 흉내 내지 않습니다. - 번호와 참조가 필요한 그림이나 표 —
figure또는table안에\caption과\label을 둡니다. - 자주 반복되는 사용자 블록 — 지역 서식 명령을 복사하지 말고
\newenvironment로 이름을 붙입니다.