자동 줄 바꿈
"오늘의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