줄 바꿈과 줄 바꿈

Line wrap and word wrap

바꿈(word wraping)은 텍스트의 한 부분을 페이지, 창 또는 기타 표시 영역의 사용 가능한 너비에 맞도록 줄로 나누는 것입니다.텍스트 디스플레이에서는 행이 가득 차면 줄바꿈이 새 행으로 계속되므로 각 행이 표시 가능한 창에 맞게 되어 수평 스크롤 없이 위에서 아래로 텍스트를 읽을 수 있습니다.워드랩은 대부분의 텍스트 편집기, 워드프로세서 및 웹 브라우저의 추가 기능으로 가능한 경우 단어 내가 아닌 단어 간에 줄을 끊습니다.워드랩을 사용하면 단락 내에서 줄 바꿈 기호를 하드코드할 필요가 없으며 텍스트 표시가 다양한 크기의 디스플레이에 유연하고 동적으로 적응할 수 있습니다.

소프트 리턴과 하드 리턴

소프트 리턴 또는 소프트 랩은 줄 바꿈 또는 워드랩(자동 또는 수동)에 의한 중단입니다.하드 리턴 또는 하드랩은 의도적인 중단으로 새로운 단락이 생성됩니다.하드 리턴의 경우 단락 구분 형식을 적용할 수 있습니다(입력 또는 수직 공백).소프트 래핑을 사용하면, 유저의 창폭이나 여백 설정의 조정에 의해서 행의 길이를 자동적으로 조정할 수 있습니다.이 기능은, 최신의 모든 텍스트 에디터, 워드 프로세서, 및 전자 메일 클라이언트의 표준 기능입니다.워드랩이 자동으로 수행되면 수동 소프트 브레이크가 필요하지 않으므로 "Enter" 키를 누르면 일반적으로 하드 리턴이 발생합니다.

또는 "소프트 리턴"은 단락 구분이 아닌 의도적으로 저장된 줄 바꿈을 의미할 수 있습니다.예를 들어, 우편 주소를 여러 줄 형식으로 인쇄하는 것이 일반적이지만, 여러 줄은 하나의 단락으로 이해됩니다.주소의 단어를 적절한 길이의 행으로 나누려면 줄 바꿈이 필요합니다.

현재의 그래피컬한 워드프로세서 Microsoft Word 와 OpenOffice.org 에서는, 유저는 캐리지 리턴(carge return)을 입력할 필요가 있습니다.Enter)를 참조해 주세요.첫 번째 줄 들여쓰기 또는 문단 사이의 간격과 같은 형식 설정은 캐리지 리턴이 끊어진 부분을 표시할 때 적용됩니다.소프트 리턴인 비문단 줄 바꿈은 + Enter또는 메뉴를 통해 삽입되며, 텍스트가 새로운 행에서 시작되어야 하지만 새로운 문단을 시작하는 다른 부작용은 원하지 않는 경우에 제공됩니다.

텍스트 지향 마크업 언어에서는 소프트 리턴이 일반적으로 마크업 태그로 제공됩니다.예를 들어 HTML에는 의 워드프로세서의 소프트 리턴과 같은 목적을 가진 <br> 태그가 있습니다.

유니코드

Unicode 줄 바꿈 알고리즘은 새 줄을 시작하는 적절한 위치인 줄 바꿈 기회라고 하는 일련의 위치를 결정합니다.실제 줄 바꿈 위치는 알고리즘 자체가 아닌 알고리즘을 호출하는 상위 레벨 소프트웨어에 의해 구분 기회 중에서 선택됩니다. 텍스트가 표시되는 디스플레이의 폭과 표시된 [1]텍스트를 구성하는 글리프의 폭에 대해 상위 레벨 소프트웨어만 알기 때문입니다.

Unicode 문자 집합은 줄 구분 문자뿐만 아니라 소프트 리턴과 하드 리턴의 의미를 나타내는 단락 구분 문자를 제공합니다.

0x2028 라인 세퍼레이터
*는 이 의미를 명확하게 나타내기 위해 사용될 수 있습니다.
0x2029 단락 구분 기호
*는 이 의미를 명확하게 나타내기 위해 사용될 수 있습니다.

단어 경계, 하이픈 및 하드 스페이스

소프트 리턴은 보통 완전한 단어의 끝 또는 완전한 단어 뒤에 있는 구두점 뒤에 배치됩니다.단, 워드랩은 워드 내 하이픈 뒤에 발생할 수도 있습니다.이것은 바람직하지 않을 수 있습니다.일반 하이픈 대신 비브레이킹하이픈 또는 하드하이픈을 사용하여 차단할 수 있습니다.

하이픈이 없는 단어는 소프트하이픈을 사용하여 래핑할 수 있습니다.단어가 줄바꿈되지 않은 경우(즉, 줄바꿈되지 않은 경우) 소프트 하이픈은 표시되지 않습니다.단, 워드가 여러 줄에 걸쳐 있는 경우에는 소프트 하이픈으로 처리되며, 이 시점에서 워드가 끊긴 맨 위 행에 표시되는 하이픈으로 표시됩니다(, 하이픈을 표시하지 않고 행간을 구분하여 래핑할 수 있도록 되어 있는 드문 경우입니다).허용되는 중단점에 제로 폭의 공간이 배치됩니다.(s) 말로 표현합니다.)

인접한 단어 사이에 워드랩이 바람직하지 않을 수 있습니다.이러한 경우 보통 워드랩은 일반 공백 대신 하드스페이스 또는 중단 없는 공백으로 차단할 수 있습니다.

중국어, 일본어, 한국어를 포함하는 텍스트로 된 단어 줄 바꿈

중국어, 일본어, 한국어에서는 보통 한자의 앞뒤로 단어를 줄바꿈할 수 있지만, 특정 구두점 문자는 [2]새 줄을 시작할 수 없습니다.일본어 가나(일본어 알파벳 문자)는 한자(한자)와 마찬가지로 단어에 따라 구분되며 하이픈이나 다른 표시 없이 깨지는 경향이 있다.

단, 경우에 따라서는 워드랩핑이 바람직하지 않습니다.예를 들어.

  • 단어 줄바꿈은 개인 이름에서 바람직하지 않을 수 있습니다.
  • 단어 줄바꿈은 복합어 내에서 바람직하지 않을 수 있습니다(텍스트가 플러시 왼쪽이지만 일부 스타일에서만 해당).

대부분의 기존 워드프로세서 및 조판 소프트웨어는 위의 시나리오 중 하나를 처리할 수 없습니다.

CJK 구두점은 상기 특수 상황과 유사한 규칙을 따를 수도 있고 따르지 않을 수도 있습니다.그것은 CJK의 규칙을 어기는 것에 달려있다.

단, CJK의 줄바꿈 규칙은 항상 적용됩니다.줄바꿈은 CJK 대시와 줄임표 안에서 발생하지 않아야 합니다.기존의 모든 문자 인코딩의 제한으로 인해 이들 구두점은 각각2글자로 표시되어야 하지만 기본적으로는 1Em 폭의 구두점이 아닌 2EMS 폭의 단일 구두점입니다.

알고리즘.

단어 줄바꿈은 최적화의 문제입니다.최적화할 필요가 있는 항목에 따라 다른 알고리즘이 사용됩니다.

최소 회선 수

단어 래핑을 하는 간단한 방법은 가능한 한 많은 단어를 한 줄에 배치하는 탐욕 알고리즘을 사용한 후 다음 줄로 이동하여 더 이상 배치할 단어가 없을 때까지 동일한 작업을 수행하는 것입니다.이 방법은 OpenOffice.org Writer 및 Microsoft [citation needed]Word와 같은 많은 최신 워드프로세서에서 사용됩니다.이 알고리즘은 항상 가능한 최소 라인 수를 사용하지만 길이가 크게 다를 수 있습니다.다음의 의사 코드에 의해서, 이 알고리즘이 실장됩니다.

SpaceLeft : (Word) + SpaceWidth)인 경우 텍스트 내 각 워드의 LineWidth > SpaceLeft : = LineWidth - Word (Word)그렇지 않으면 SpaceLeft : = SpaceLeft - (Word) + SpaceWidth)

어디에LineWidth선의 폭입니다.SpaceLeft채울 줄의 남은 공간 폭입니다.SpaceWidth단일 공백 문자의 너비입니다.Text를 반복하는 입력 텍스트입니다.Word이 텍스트의 단어입니다.

최소 울퉁불퉁함

TeX에서 사용되는 다른 알고리즘은 선의 끝에 있는 공간의 길이의 제곱합을 최소화하여 보다 미적으로 만족스러운 결과를 도출합니다.다음 예제에서는 이 방법을 Gready 알고리즘과 비교합니다.Gready 알고리즘은 항상 제곱 공간을 최소화하는 것은 아닙니다.

입력 텍스트의 경우

AAA BB CC DDDD

선폭 6의 경우, 탐욕 알고리즘은 다음을 생성합니다.

----- 회선폭: 6 AAA BB 잔존공간: 0CC 잔존공간: 4 DDDDD 잔존공간: 1

이 방법으로 남은 공간의 제곱합은 2 + 2 + 2 {{ 0}=입니다.그러나 최적 해는 더 작은 합 + 2 + 2 3을 달성한다.

----- 회선폭: 6 AAA 남은 공간: 3 BB CC 남은 공간: 1 DDDD 남은 공간: 1

여기서의 차이는 첫 번째 줄이 먼저 끊어진다는 것입니다.BB그 후가 아니라, 오른쪽 마진도 더 좋고, 비용도 더 낮습니다.

동적 프로그래밍 알고리즘을 사용하여 선을 끊을 위치를 선택함으로써 시간 2n\ O에서 최소의 래깅스를 가진 솔루션을 찾을 수 있습니다.서 nn은 입력 텍스트 내의 단어 수입니다.일반적으로 이 기법의 비용 함수는 문단의 마지막 줄에 남아 있는 공간을 세지 않도록 수정해야 합니다.이 수정으로 문단을 패널티 없이 줄 중간에서 끝낼 수 있습니다.또한 동일한 동적 프로그래밍 기술을 적용하여 줄 수나 긴 [3]단어의 하이픈 처리 비용 등 다른 요소를 결합하는 보다 복잡한 비용 함수를 최소화할 수도 있습니다.SMAWK 알고리즘에 기초한 보다 빠르고 복잡한 선형 시간 알고리즘은 최소 래그니스 문제 및 유사한 [4][5]속성을 가진 기타 비용 함수에도 알려져 있습니다.

역사

1955년 웨스턴 유니온에 의해 개발된 "페이지 프린터 제어 장치"에서 원시적인 줄 바꿈 기능이 사용되었습니다.이 시스템은 프로그램 가능한 디지털 컴퓨터가 아닌 릴레이를 사용했기 때문에 데이터 버퍼 없이 구현할 수 있는 단순한 알고리즘이 필요했습니다.Western Union 시스템에서는 58번째 문자 뒤에 나타나는 첫 번째 공백 문자 또는 공백 문자를 찾을 [6]수 없는 경우 70번째 문자에서 각 행이 구분되었습니다.

줄 바꿈을 위한 탐욕 알고리즘은 Donald Knuth가 자신의 TeX 조판 시스템을[7] 기술한 1977년 미공개 메모에서 개략적으로 설명한 동적 프로그래밍 방법보다 앞서 있으며 나중에 Knuth & Plass(1981)의해 더 자세히 출판되었다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Heninger, Andy, ed. (2013-01-25). "Unicode Line Breaking Algorithm" (PDF). Technical Reports. Annex #14 (Proposed Update Unicode Standard): 2. Retrieved 10 March 2015. WORD JOINER should be used if the intent is to merely prevent a line break
  2. ^ 를 클릭합니다Lunde, Ken (1999), CJKV Information Processing: Chinese, Japanese, Korean & Vietnamese Computing, O'Reilly Media, Inc., p. 352, ISBN 9781565922242.
  3. ^ 를 클릭합니다Knuth, Donald E.; Plass, Michael F. (1981), "Breaking paragraphs into lines", Software: Practice and Experience, 11 (11): 1119–1184, doi:10.1002/spe.4380111102, S2CID 206508107.
  4. ^ 를 클릭합니다Wilber, Robert (1988), "The concave least-weight subsequence problem revisited", Journal of Algorithms, 9 (3): 418–425, doi:10.1016/0196-6774(88)90032-6, MR 0955150.
  5. ^ 를 클릭합니다Galil, Zvi; Park, Kunsoo (1990), "A linear-time algorithm for concave one-dimensional dynamic programming", Information Processing Letters, 33 (6): 309–311, doi:10.1016/0020-0190(90)90215-J, MR 1045521.
  6. ^ 를 클릭합니다Harris, Robert W. (January 1956), "Keyboard standardization", Western Union Technical Review, 10 (1): 37–42.
  7. ^ .에 재인쇄되었습니다Knuth, Donald (1977), TEXDR.AFT, retrieved 2013-04-07.

외부 링크

크누스의 알고리즘

기타 워드랩 링크

  • 반대의 문제 - 텍스트에 딱 맞는(랩핑된) (아카이브 버전)을 선택합니다.
  • Simon Pepping 2006의 "Knuth linebreaking elements for Formating Objects" (객체 포맷을 위한 줄 바꿈 요소).Knuth 모델을 확장하여 몇 가지 향상된 기능을 처리합니다.
  • "Knuth-Plass와 같은바꿈 알고리즘...*really* 흥미로운 점은 Adobe의 알고리즘이 Knuth-Plass 알고리즘과 어떻게 다른가 하는 것입니다.Adobe가 자사의 알고리즘(6,510,441)을 특허로 취득했기 때문에, 반드시 다릅니다.[1]
  • "줄 바꿈"은 다양한 시간 복잡성의 알고리즘을 비교합니다.