맨위로가기

자동 줄 바꿈

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

자동 줄 바꿈은 텍스트를 지정된 너비 내에서 여러 줄로 나누는 것을 의미하며, 소프트 리턴과 하드 리턴으로 구분된다. 소프트 리턴은 자동 또는 수동으로 이루어지는 줄 바꿈을, 하드 리턴은 단락을 나누기 위한 의도적인 줄 바꿈을 의미한다. 워드 프로세서와 같은 텍스트 편집기에서는 사용자의 창 너비나 여백 설정에 따라 줄 길이가 자동으로 조정되는 소프트 랩핑이 일반적이다. 유니코드는 줄 바꿈 알고리즘과 줄 분리자 및 단락 분리자를 제공하여 소프트 및 하드 리턴의 의미를 나타낸다. 단어 경계, 하이픈, 하드 스페이스는 줄 바꿈에 영향을 미치며, 다양한 알고리즘을 통해 최적의 줄 바꿈을 구현한다. 최소 길이 알고리즘은 각 줄에 최대한 많은 단어를 배치하는 탐욕 알고리즘이며, TeX에서 사용되는 랙 최소화 알고리즘은 줄 끝의 공간 길이 제곱의 합을 최소화한다. CJK 텍스트에서는 한자, 가나 등의 특성으로 인해 줄 바꿈 규칙이 다르며, 한국어의 경우 특정 규칙이 적용된다.

더 읽어볼만한 페이지

  • 동적 계획법 - 배낭 문제
    배낭 문제는 주어진 배낭 용량 내에서 물건들의 가치 합을 최대화하는 조합 최적화 문제로, 물건을 쪼갤 수 있는지, 개수 제한이 있는지에 따라 다양한 변형이 있으며, 동적 계획법, 탐욕 알고리즘 등으로 해결하고, NP-완전 문제에 속하며 자원 할당 문제 등에 응용된다.
  • 동적 계획법 - 차원의 저주
    차원의 저주는 고차원 공간에서 데이터 분석 및 모델링의 어려움을 나타내는 현상으로, 계산 시간 증가, 수치 오차 발생, 조합 폭발 등의 문제점을 야기한다.
  • 문서 편집기 기능 - 전문 검색
    전문 검색은 문서 내 특정 단어나 구절을 찾는 정보 검색의 핵심 기술로, 인덱싱, 페이지랭크 알고리즘, 문자열 추출 방법, 문서 필터 기술, 질의 도구 개선 등을 통해 발전해왔으며, 웹 검색, 기업용 검색, 데스크톱 검색 등 다양한 분야에서 활용된다.
  • 문서 편집기 기능 - 맞춤법 검사기
    맞춤법 검사기는 텍스트의 오타와 문법 오류를 검사하여 수정 제안을 제공하는 소프트웨어 도구이며, 1970년대에 처음 등장하여 기술 발전을 거쳐 현재 다양한 플랫폼에서 여러 언어를 지원한다.
자동 줄 바꿈
자동 줄 바꿈 및 단어 줄 바꿈
자동 줄 바꿈 정보
설명줄이 꽉 찼을 때 새 줄에서 계속되는 기능
단어 줄 바꿈 정보
설명긴 단어나 URL이 지정된 경계를 넘어 확장되는 것을 방지하는 기능
사용 예시HTML: `word-wrap` 속성 또는 `overflow-wrap` 속성
CSS: `word-wrap: break-word;` 또는 `overflow-wrap: break-word;`

2. Soft and hard returns

소프트 리턴(soft return) 또는 소프트 랩(soft wrap)은 텍스트 편집기나 워드 프로세서가 자동으로 줄을 바꾸는 것을 의미한다. 이는 사용자가 설정한 창의 너비나 여백에 맞춰 줄 길이가 자동으로 조절되는 기능으로, 대부분의 최신 텍스트 편집기, 워드 프로세서, 이메일 클라이언트에서 기본적으로 지원한다. 자동 줄 바꿈이 이루어지므로 사용자가 직접 줄을 바꿀 필요가 줄어든다.

반면, 하드 리턴(hard return) 또는 하드 랩(hard wrap)은 사용자가 의도적으로 줄을 바꾸는 것을 말하며, 주로 새로운 단락을 시작할 때 사용된다. 일반적으로 키보드의 Enter 키를 누르면 하드 리턴이 입력된다. 하드 리턴을 사용하면 첫 줄 들여쓰기나 단락 간 간격 설정과 같은 단락 서식을 적용할 수 있다.

"소프트 리턴"이라는 용어는 때때로 단락을 나누지 않으면서 의도적으로 줄을 바꾸는 것을 의미하기도 한다. 예를 들어, 우편 주소를 여러 줄에 걸쳐 작성하지만 전체 주소는 하나의 단락으로 취급해야 할 때 소프트 리턴을 사용하여 줄을 나눌 수 있다.

현대의 그래픽 기반 워드 프로세서인 마이크로소프트 워드나 LibreOffice Writer에서는 사용자가 Enter 키를 누르면 하드 리턴, 즉 새로운 단락이 시작된다. 단락을 나누지 않고 줄만 바꾸고 싶을 때는 Shift 키와 Enter 키를 함께 누르거나 메뉴를 통해 소프트 리턴을 삽입할 수 있다.

HTML과 같은 텍스트 기반 마크업 언어에서는 소프트 리턴을 위해 별도의 태그를 사용한다. 예를 들어, HTML의 `
` 태그는 워드 프로세서의 소프트 리턴과 동일한 기능을 수행하여 단락을 나누지 않고 줄 바꿈을 한다.

2. 1. Unicode

유니코드 줄 바꿈 알고리즘은 새로운 줄을 시작하기에 적합한 위치의 집합, 즉 '줄 바꿈 기회'를 결정한다. 실제 줄 바꿈 위치는 이 알고리즘 자체가 아니라, 알고리즘을 호출하는 상위 수준 소프트웨어에서 줄 바꿈 기회 중에서 선택한다. 이는 텍스트가 표시되는 디스플레이의 너비와 표시된 텍스트를 구성하는 글리프의 너비를 상위 수준 소프트웨어만이 알고 있기 때문이다.[1]

유니코드 문자 세트는 소프트 리턴과 하드 리턴의 의미를 명확히 나타내기 위해 다음과 같은 특수 문자를 제공한다.

  • '''U+2028 줄 분리자''': 소프트 리턴(줄 바꿈)의 의미를 명확히 나타내는 데 사용될 수 있다.
  • '''U+2029 단락 분리자''': 하드 리턴(단락 나눔)의 의미를 명확히 나타내는 데 사용될 수 있다.

3. Word boundaries, hyphenation, and hard spaces

일반적으로 줄 바꿈은 단어의 끝이나 단어 뒤에 오는 구두점 다음에 이루어진다. 하지만 하이픈이 포함된 단어는 하이픈 뒤에서도 줄이 바뀔 수 있다. 때로는 이러한 줄 바꿈을 원하지 않을 수 있는데, 이때는 일반 하이픈 대신 붙임 하이픈(non-breaking hyphen 또는 hard hyphen)을 사용하여 줄 바꿈을 방지할 수 있다.

하이픈이 없는 단어라도 소프트 하이픈(soft hyphen)을 단어 내부에 넣으면 특정 지점에서 줄 바꿈이 가능해진다. 소프트 하이픈은 단어가 줄 바꿈되지 않을 때는 보이지 않지만, 줄 바꿈이 발생하면 해당 위치에서 단어가 나뉘고 그 줄 끝에 하이픈으로 표시된다. 드물게, 단어 내에서 줄 바꿈은 허용하되 하이픈 표시 없이 나누고 싶을 때는 너비 없는 공백(zero-width space)을 사용하기도 한다.

또한, 서로 붙어 있는 단어들이 줄 바꿈으로 인해 분리되는 것을 원하지 않을 때도 있다. 이런 경우에는 일반 공백(띄어쓰기) 대신 ''하드 스페이스''(hard space) 또는 줄 바꿈 금지 공백(non-breaking space)을 사용하여 두 단어가 항상 같은 줄에 있도록 할 수 있다.

4. 알고리즘

단어 줄 바꿈은 주어진 텍스트를 최적의 형태로 나누는 최적화 문제이다. 어떤 기준으로 최적화할지에 따라 여러 가지 다른 알고리즘이 사용된다.

4. 1. 최소 길이 알고리즘

최소 길이(Minimum length) 알고리즘은 자동 줄 바꿈을 구현하는 가장 간단한 방법 중 하나이다. 이 방식은 각 줄에 가능한 한 많은 단어를 배치한 다음, 더 이상 배치할 단어가 없을 때까지 다음 줄로 이동하여 동일한 작업을 수행하는 탐욕 알고리즘을 사용한다. 구현이 간단하고 속도가 빨라서 마이크로소프트 워드, 오픈 오피스, 리브레오피스 라이터와 같은 많은 현대 위지윅 워드프로세서에서 사용된다.

이 알고리즘은 항상 가능한 최소한의 줄 수를 사용한다는 장점이 있지만, 각 줄의 길이가 매우 다양해질 수 있다는 단점도 있다.

다음은 최소 길이 알고리즘을 설명하는 pseudo code|의사 코드eng이다.



SpaceLeft := LineWidth

FOR EACH Word IN Text

IF (Width(Word) + SpaceWidth) > SpaceLeft THEN

INSERT line break BEFORE Word IN Text

SpaceLeft := LineWidth - Width(Word)

ELSE

SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)

END IF

END FOR



여기서 각 변수는 다음을 의미한다.

  • LineWidth: 한 줄의 전체 너비
  • SpaceLeft: 현재 줄에서 단어를 채울 수 있는 남은 공간의 너비
  • SpaceWidth: 공백 문자 하나의 너비
  • Text: 입력된 전체 텍스트
  • Word: 텍스트 내의 개별 단어

4. 2. 랙 최소화 알고리즘

랙 최소화(Minimum raggedness) 알고리즘은 줄 끝의 공백 길이 제곱의 합을 최소화하는 방식으로 작동한다. 이 방식은 단순히 공간을 최소화하는 탐욕 알고리즘보다 더 미적으로 보기 좋은 결과를 만들어낸다. 이 알고리즘은 TeX 조판 시스템에서 사용된다.

4. 2. 1. 역사

1955년 웨스턴 유니온에서 개발한 "페이지 프린터 제어 장치"에서 초기적인 자동 줄 바꿈 기능이 사용되었다. 이 시스템은 프로그래밍 가능한 디지털 컴퓨터가 아닌 릴레이를 사용했기 때문에 데이터 버퍼 없이 구현할 수 있는 간단한 알고리즘이 필요했다. 웨스턴 유니온 시스템에서는 각 줄이 58번째 문자 이후 처음 나타나는 공백 문자에서 잘리거나, 공백 문자가 없으면 70번째 문자에서 잘렸다.[3]

줄 바꿈을 위한 탐욕 알고리즘은 도널드 커누스가 1977년 공개되지 않은 메모에서 자신의 TeX 조판 시스템을 설명하면서 제시한 동적 프로그래밍 방법보다 먼저 사용되었다.[4] 커누스가 제시한 방법은 이후 Knuth & Plass (1981)에 의해 더 자세히 출판되었다.[5]

5. CJK 텍스트에서의 단어 줄 바꿈

중국어, 일본어, 한국어에서는 일반적으로 모든 한자 앞뒤에서 줄 바꿈이 가능하다. 하지만 특정 구두점 문자는 새 줄의 시작 부분에 올 수 없다.[2] 일본어 가나 역시 한자와 동일하게 취급되어, 단어가 다음 줄로 넘어갈 때 특별한 표시 없이 나뉠 수 있다.

그러나 어떤 상황에서는 줄 바꿈을 원하지 않을 수도 있다. 예를 들어 다음과 같은 경우이다.


  • 개인 이름 안에서는 줄 바꿈을 피하는 것이 좋다.
  • 복합어 안에서도 줄 바꿈을 원하지 않을 수 있다 (텍스트가 왼쪽 정렬된 경우).


대부분의 기존 워드 프로세서나 조판 소프트웨어는 이러한 예외적인 상황들을 제대로 처리하지 못하는 경우가 많다.

CJK 문자의 구두점 줄 바꿈 규칙은 위에서 언급된 특수한 상황처럼 동아시아 언어의 줄 바꿈 규칙에 따라 다르게 적용될 수 있다.

참조

[1] 간행물 Unicode Line Breaking Algorithm https://www.unicode.[...] 2015-03-10
[2] 서적 CJKV Information Processing: Chinese, Japanese, Korean & Vietnamese Computing https://books.google[...] O'Reilly Media, Inc.
[3] 간행물 Keyboard standardization http://massis.lcs.mi[...] 2013-04-07
[4] 간행물 TEXDR.AFT https://www.saildart[...] 2013-04-07
[5] 간행물 Breaking Paragraphs into Lines 1981
[6] 문서 마이크로소프트 용어집 번역 참조
[7] 웹사이트 오른쪽이나 왼쪽 여백에 울퉁불퉁하게 튀어나온 부분 http://enc.daum.net/[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com