양쪽 맞춤 단락 내에서 LaTeX은 자동으로 줄 바꿈 위치를 최적화합니다. 보통은 그것으로 충분합니다. 하지만 때로는 "여기서 중단하세요" 또는 "여기서 중단하지 마세요"라고 말하고 싶을 때가 있습니다. 이 페이지는 단락 분리에 관한 것이 아닙니다(“줄 & 단락 나누기” 참조). 문단 내에서* 줄이 끊어지는 부분을 미세 조정하기 위한 툴킷입니다. 강제로 끊기, 방지하기, 하이픈 넣기 제어하기, Overfull/Underfull 경고와 함께 생활하기 등이 있습니다.
기본 규칙 우선: 문단(빈 줄 포함)을 분리하는 것은 여기서 다루는 줄바꿈 조정과 다른 문제입니다. 빈 줄은 들여쓰기 및 단락 간 간격을 사용하여 새 단락을 시작합니다. 대신에 다음 내용은 줄 *끝*이 단일 단락 내에 속하는 위치를 조금씩 움직입니다. 구분이 모호하게 느껴지면 먼저 "줄 및 단락 나누기"를 읽어보세요.
강제로 줄 바꿈
단락 중간을 강제로 나누기 위해 두 가지 명령 계열이 있습니다. 첫 번째는 \\ 및 \newline입니다. 둘 다 단락 모드를 종료하지 않고 단순히 "여기서 줄을 종료"합니다. 결정적으로 텍스트를 늘리지 않고 텍스트의 자연스러운 길이를 끊습니다 — 따라서 줄이 오른쪽 여백에 미치지 못하고 짧게 유지됩니다. 이는 각 줄이 의도한 위치에서 정확하게 끝나야 하는 주소나 절에 적합합니다.
두 번째는 \linebreak입니다. *그리고* 단어 사이의 공백을 늘려서 줄이 오른쪽 여백에 맞게 정렬됩니다. 따라서 \\과 달리 줄이 짧게 남지 않습니다. 대신 단어 간격이 벌어질 수 있습니다. 강도는 \linebreak[n](n 정수 0-4)에 의해 설정됩니다. 4는 "강제 중단"(인수 없는 기본값)을 의미하고, 1은 "다른 지점이 더 나을 수 있지만 여기서는 허용됩니다."를 의미합니다. 간단히 말해서, \linebreak은 어디를 끊어야 할지에 대한 *제안*이며, 줄의 최종 스트레칭은 LaTeX의 정당화에 맡깁니다.
일단 컴파일하면 대조가 분명해집니다. \\을 문장 중간에 넣으면 줄이 끊어지고 오른쪽에 공백이 남게 됩니다. \linebreak을 같은 위치에 넣으면 줄이 오른쪽 가장자리까지 늘어져 단어 사이에 어색한 간격이 생깁니다. 니모닉: \\ 짧게 끊기, \linebreak 여백에 맞춰 정렬. \\에는 확장자가 있습니다. \\[2ex]에서와 같이 대괄호 안의 길이는 해당 줄 뒤에 수직 공백을 추가하고 \\*은 해당 지점에서 페이지 나누기를 금지합니다(“줄 및 단락 나누기” 참조).
% \\ は短く折る/\linebreak は右端まで引き伸ばす
第一の道は険しく\\
第二の道はなだらかだ。
非常に長い一文をここで\linebreak 区切ると、左側の語間が広がります。단락 모드에서 \newline은 \\과 같지만 테이블(tabular) 내에서는 역할이 다음과 같이 나뉩니다. p{...} 열과 같은 단락 만들기 셀에서 \newline은 셀 내에서만 나뉘고 \\는 전체 행을 나눕니다. 행을 끝내지 않고 한 셀 내부의 두 줄에 주소를 지정하려면 \newline을 사용하세요. 그리고 끝낼 줄이 없는 곳(예: 단락 시작 부분)에서 \\을 사용하면 There's no line here to end 오류가 발생합니다.
줄 바꿈 방지
반대 요구 사항("여기서 중단하지 마십시오")에 적합한 도구 세트가 있습니다. 가장 편리한 것은 물결표 ~(“연결”)입니다. Fig.~3, Dr.~Smith, Chapter~12 또는 equation~\ref{eq:1}에서와 같이 같은 줄의 양쪽에 있는 내용을 유지하는 데 사용되는 단절 없는 단어 사이 공백입니다. ~은 일반적인 단어 간 공간의 너비입니다. 유일한 차이점은 줄바꿈이 발생하지 않는다는 것입니다. 여전히 인접 단어에 하이픈 넣기를 허용하므로 전체 단어를 \mbox으로 붙이는 것보다 더 온화하며 일반적으로 첫 번째 선택입니다.
중단에 대한 저항 강도를 설정하려면 \nolinebreak[n]을 사용하세요. \linebreak의 미러는 n이 0부터 4까지입니다. 4(기본값)는 중단을 완전히 금지합니다. 반면 1은 "여기에서 중단하지 마십시오."를 나타냅니다. 전체 구문을 분할해서는 안 되는 경우 \mbox{...}가 편리합니다. 해당 내용을 단일 상자로 처리하고 행을 가로질러 나누거나 하이픈을 넣지 않습니다(T-34이 T- 및 34으로 분할되지 않도록 하는 것을 고려하세요). \mbox은 LaTeX의 일반 TeX의 \hbox과 동일하며, \hbox{...}을 직접 쓰는 것도 동일하게 작동합니다. 하위 수준 \nobreak은 해당 지점에 무한한 "여기에서 중단하지 마십시오" 페널티를 적용하고 ~과 같은 명령의 기초가 됩니다.
주의 사항: \mbox으로 묶인 단어는 결코 깨지지 않으므로, 맞지 않으면 오른쪽 여백을 넘어 돌출되어 Overfull 상자가 됩니다. \mbox 내부에서 실제로 깨지기 쉬운 항목(긴 URL, 화학 이름)을 동결하면 역효과가 발생합니다. 보호하고 싶은 공간이 하나일 경우에는 ~로, 분할하지 말아야 할 짧은 문구의 경우에는 \mbox으로 접근하세요.
하이픈 넣기 제어
서양 텍스트에서 LaTeX은 자동으로 하이픈 넣기를 수행하여 여러 줄에 걸쳐 단어를 나누기 위해 하이픈을 삽입합니다. 일반적으로 합리적이지만 사전에 없는 고유 명사나 전문 용어에 대해서는 잘못 실행될 수 있습니다. 일회성 수정의 경우 \-(백슬래시-하이픈, 임의 또는 선택적 하이픈)을 사용합니다. 단어 안에 권한이 포함되어 있습니다(“필요한 경우 여기에서 분리할 수 있습니다”). 따라서 예를 들어 man\-u\-script을 쓰면 해당 단어가 표시된 지점에서만 분리됩니다.
여기에는 미묘함이 숨어있습니다. 단어에 \- 하나만 삽입하면 @CODE3@@은 표시한 지점에만 *만* 하이픈을 추가하고 다른 지점에는 하이픈을 추가하지 않습니다. 따라서 \-은 "여기서도 중단할 수 있습니다"가 아니라 "여기서만 중단할 수 있습니다"를 의미합니다. 따라서 원하는 중단점을 모두 입력해야 합니다. \-은 중단을 *강제*하지 않는다는 점에 유의하세요. 단지 "중단한다면 이 지점 중 하나여야 합니다."라고만 말합니다.
문서 전체에 걸쳐 동일한 단어가 반복되는 경우 본문을 복잡하게 하지 말고 서문에 예외를 한 번만 등록하세요. \hyphenation{...}에서 하이픈으로 표시된 중단점과 함께 단어를 나열합니다. 이는 전체 문서에 적용되는 전역 설정이며 여러 선언이 누적됩니다. 두 가지 주의 사항: 소문자를 사용하고 TeX은 정확히 일치합니다. 변화형(복수형 등)은 별도로 처리됩니다. \-이 "지금 바로 여기"인 경우 \hyphenation을 "전체 문서에 대한 사전 항목"으로 생각하세요.
% プリアンブルで分割例外を一括登録(小文字・分割点をハイフンで)
\hyphenation{man-u-script analy-sis FORTRAN}
% 本文では、その場かぎりの任意ハイフン
super\-cali\-fragi\-listic반대로 특정 단어에 하이픈을 넣지 않으려면 \mbox{...}로 묶습니다. 상자의 내용이 깨지지 않으므로 하이픈이 삽입되지 않습니다. 위에서 언급한 것처럼 깨지지 않는 단어는 줄을 초과하여 Overfull 상자를 유발할 수 있습니다. 일본어 텍스트에는 이러한 의미에서 하이픈이 없으므로 \- 및 \hyphenation은 기본적으로 서양 언어 부분을 위한 도구입니다.
초과/미달 \hbox 경고
컴파일 시 Overfull \hbox 또는 Underfull \hbox 경고를 본 적이 있을 것입니다. \hbox(가로 상자)는 단일 조판 라인입니다. Overfull은 "줄이 맞지 않아 오른쪽 여백을 넘어 멈췄습니다"를 의미하고, Underfull은 "줄이 너무 느슨하고 단어 간 간격이 늘어납니다"를 의미합니다. Knuth는 표준 이하의 조판 설정을 자동으로 받아들이는 대신 경고하기로 선택하여 수정 사항을 사용자에게 맡겼습니다. draft 클래스 옵션은 각 줄을 가득 채운 줄 옆에 검은색 줄을 인쇄하여 쉽게 찾을 수 있도록 합니다.
LaTeX이 여백을 지나 선을 긋는 이유는 무엇입니까? TeX이 스트레치 내에서 "표현 가능한" 중단 세트를 찾을 수 없는 경우 허용되기 때문에 줄을 기괴하게 간격을 두는 대신 오버플로를 경고로 표시합니다. 일반적인 원인은 중단되지 않는 긴 단어, URL 또는 고유 명사입니다. 가장 먼저 시도해 볼 작업은 위 섹션의 로컬 수정 사항입니다. \-으로 단어 중단점을 지정하거나, 근처에 \linebreak을 삭제하거나, ~으로 공백을 풀어보세요. 그걸로 해결되는 경우가 많습니다.
로컬 수정이 지루하고 경고를 줄이기 위해 약간의 느슨함을 허용하는 경우 무딘 도구로 전환하세요. \sloppy 선언은 중단 허용 오차를 크게 완화하고(내부적으로 \tolerance을 9999로 설정) 상자가 너무 꽉 차는 것을 방지하는 대가로 느슨한 단어 간 간격을 허용합니다. 기본값은 \fussy입니다. 가끔 가득 찬 상자의 비용. \sloppy을 발행한 후 영향을 미치고 싶은 스트레칭이 끝나면 \fussy으로 돌아갑니다.
하지만 이러한 선언에는 특이한 점이 있습니다. 줄 바꿈은 문단이 끝날 때 적용되는 선언을 따르므로 \sloppy이 주어진 단락에 영향을 미치도록 하려면 \sloppy 범위 내에서 끝나는 빈 줄이나 \par을 포함해야 합니다. 효과를 단일 단락으로 제한하려면 sloppypar 환경이 더 안전합니다. \begin{sloppypar}과 \end{sloppypar} 사이의 텍스트만 \sloppy 아래에 있는 것처럼 설정되고 종료 시 정상적인 동작이 다시 시작됩니다.
보다 세련된 접근 방식은 \emergencystretch입니다. \setlength{\emergencystretch}{3em} — 최후의 수단으로만 추가 확장을 허용하며 \sloppy처럼 간격을 퉁명스럽게 방해하지 않고 초과된 상자를 자릅니다. 여백에 맞게 글리프를 미묘하게 확장하거나 축소하는 microtype 패키지도 도움이 됩니다. 아래 표에는 각 명령의 역할이 요약되어 있습니다.
| 명령 | 역할 | 줄을 늘려? |
|---|---|---|
\\ , \newline | 강제로 줄바꿈(단락바꿈 아님) | 아니요 — 왼쪽이 짧음 |
\linebreak[n] | 휴식 제안(n=4 강제) | 예 — 여백을 정당화합니다. |
\nolinebreak[n] | 중단을 금지합니다(n=4 완전). | — |
~ | 줄바꿈 없는 공백(동점); 여전히 하이픈 허용 | — |
\mbox{...} | 내용물을 하나의 상자에 포장합니다. 줄 바꿈 없음, 하이픈 없음 | — |
\- | 임의 하이픈; 여기서만 단어를 어기세요 | — |
\hyphenation{...} | 서문의 전역 중단 예외(소문자, 정확함) | — |
\sloppy / \fussy | 허용 오차 완화/기본값; sloppypar를 통해 현지화 | \sloppy 간격이 느슨해지는 경향이 있습니다. |
줄 바꿈 경고 수정 명령
표시되는 줄에 \\을 삭제하여 Overfull 또는 Underfull \hbox 경고를 무음으로 설정하면 나중에 다른 줄이 끊어지는 경우가 많습니다. 순서는 다음과 같습니다. 먼저 문구를 수정한 다음 하이픈 넣기 기회를 추가하고 로컬 구분 없음 또는 구분 힌트를 사용하고 마지막으로 단락 허용 오차를 완화합니다. TeX은 전체 단락에서 줄바꿈을 최적화하므로 한 줄씩 강제 적용하는 것이 마지막 단계여야 합니다.
- 긴 단어, URL, 수식: 먼저 식별하고 전용 명령으로 자연스럽게 단축될 수 있는지, 아니면 끊어질 수 있는지 확인하세요.
- 기술 용어:
\hyphenation{...}또는\-을 추가하면 동일한 단어를 반복적으로 수동으로 수정할 필요가 없습니다. - 이름, 숫자, 단위:
~또는\nolinebreak과 함께 읽을 수 없는 분할만 유지합니다. - 최후의 수단:
sloppypar또는\emergencystretch현지화; 전체 문서의 단어 간격을 느슨하게 하지 마십시오.