2011-12-17 4 views
1

텍스트가 있습니다 (아마도 상당히 길 수도 있습니다). 그리고 높이와 너비의 컨테이너가 있습니다. 텍스트 (모든 것)를 컨테이너에 맞게하려면 어떻게해야합니까? 문자 간 간격 (커닝) 및 단어 간 간격 조정 만 가능합니다. 텍스트가 너무 많이 포장 될지는별로 신경 쓰지 않습니다. 단지 그 안에 모두 들어가야합니다.텍스트를 컨테이너에 맞추기

질문을 다시 말하면, 비용이 줄의 "포장"인 곳에서 줄 바꿈을위한 효율적인 알고리즘이 필요합니다.

TeX에서 사용되는 Knuth-Plass 알고리즘에 대해 알고 있지만 구현하기가 다소 어려우며이 시나리오에서 사용할 수 있는지 확실하지 않습니다. 나는 또한 유전 알고리즘을 사용할 수는 있지만 과잉이라고 할 수있다.

+1

Knuth-Plass는 설명 된 시나리오에 맞게 개발되었으므로 사용할 수 있어야합니다. 단순함의면에서 항상 문제를 완전히 이해할 때까지 기존 알고리즘을 가능한 가장 단순하다고 가정하십시오. 컴퓨터 프로그램의 복잡성은 이유가 있기 때문에 도입되었습니다. – thiton

+0

TeX 또는 다른 언어로이 작업을 수행 하시겠습니까? – Werner

+0

다른 언어 - 적어도 어느 정도 공통점이있는 한 실제로 어떤 언어인지는 신경 쓰지 않습니다. –

답변

0

아이디어가 있습니다.

우선 텍스트를 원하는 줄 수를 계산하고 그 수를 n으로합시다. 그런 다음 텍스트의 문자 수가 c이라면 텍스트를 줄 바꿈하여 줄 바꿈을하지 말고 floor(c/n) 자 이상이어야합니다 (그럴 수는 있습니다). cPerLine으로 전화를 겁니다. (동적 프로그래밍을 사용하여 적은 "raggedness"(즉, 길이의 차이)에 대해서는 http://en.wikipedia.org/wiki/Word_wrap을 참조하십시오.

각 문자의 평균 너비가 사용중인 크기가 같고 Courier New과 같은 고정 폭 글꼴을 사용하려는 경우 w 픽셀입니다. 컨테이너의 너비가 x이면 문자 간격을 쉽게 계산할 수 있습니다 : floor(x/cPerline) - w. 줄 간격이이므로 각 문자의 평균 높이가 h이고 컨테이너 높이가 y 인 경우 마찬가지로 줄 간격은 floor(y/n) - h이어야합니다.

희망이 어떤 식 으로든 도움이되었습니다.

관련 문제