Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
한글 TeX에서의 line breaking algorithm에 관한 질문
2018.11.11 15:16
안녕하세요, 박승원입니다.
요즘 들어 TeX 안에서 작동하는 알고리즘에 대한 관심이 생겨 공부를 해보고 있습니다.
그 중 문서의 가독성을 높이기 위해 적절한 개행(줄나눔)의 위치를 계산해주는 알고리즘에 대해 관심을 가지게 되었습니다.
제가 이해한 바로는, Knuth 박사님의 1981년 논문(*)에서 제시된 이 줄나눔 알고리즘은
문단 내 단어 사이의 공백의 너비를 조절하거나, 적절한 떄에 hyphenation을 하여 문단의 가독성을 향상시킵니다.
(TeX을 다루다 보면 glue, penalty같은 이야기를 종종 들을 수 있었는데, 그것들이 바로 이 알고리즘과 관련된 것 같았습니다.)
여기에서, 한글에 대해서는 이 알고리즘이 어떻게 적용되었는지에 대해 의문점을 갖게 되었습니다.
아시다시피 한글에서는 영어와 달리, 단어가 길어진다고 해서 줄을 나눌 때 hyphen을 넣지는 않지 않습니까?
한글 텍에서는 이 문제점을 어떻게 해결하거나 타협해왔는지 여쭤보고 싶습니다.
혹은, 관련하여 참고할만한 자료가 있다면 간단히 링크만 알려주셔도 감사하겠습니다.
이미 KTUG 위키 문서 색인에서 자료를 찾아보긴 했습니다만 관련 내용을 찾기 어려웠습니다.
(*) 논문: "Breaking paragraphs into Lines" (1981) - http://www.eprg.org/G53DOC/pdfs/knuth-plass-breaking.pdf
댓글 7
-
yihoze
2018.11.12 09:23
-
베이드프즈
2018.11.12 13:26
답변 감사합니다. 하이픈 사전이 따로 있다는 사실은 모르고 있었네요.
찾아보니 웹페이지에서도 텍과 비슷하게 자동 hyphenation을 해주는 기능이 있는 것 같군요.
https://developer.mozilla. org/en-US/docs/Web/CSS/hyphens -
DohyunKim
2018.11.12 09:35
거창하게 새로운 문서를 작성할 정도의 내용이 없습니다.
한글과 한글이 잇달아 오면 그 사이에
\penalty50 \hskip 0pt plus 0.04em minus 0.02em
을 삽입하는 게 전부입니다.
페널티에서 줄바꿈이 일어나면 그 뒤의 글루는 사라져버립니다.
페널티에서 줄바꿈이 일어나지 않는다면 글루가 작동하여 미세하게 간격이 늘어나거나 줄어들 수 있습니다.
-
DohyunKim
2018.11.12 09:44
페널티가 없어도 글루에서 줄바꿈이 일어날 수 있는데 왜 페널티를 선행시키느냐? 하는 의문이 생길 수 있는데요.
단어간 공백이 글루인데, 글루는 페널티 zero라고 생각하시면 됩니다.
그러므로 글자 사이에 penalty 50을 앞세우면, 단어간 공백보다 글자간 공백에서 줄바꿈을 약간 억제하게 됩니다.
참고로, 하이프네이션의 페널티가 50에 해당합니다.
-
베이드프즈
2018.11.12 13:38
자세히 답해 주셔서 감사합니다, 회장님.
아직 패널티/글루에 대한 공부가 부족하여 hskip이 들어갈 것이라고는 생각하지 못했는데, hskip에 대해서도 공부해보겠습니다.한 가지 더 여쭤보고 싶은 내용이 있습니다.
\penalty50 \hskip 0pt plus 0.04em minus 0.02em
에서, 0.04em 과 0.02em같은 수치는 수작업으로 적당한 값을 찾아내어 사용하는 것인가요?
아니면, 이 값으로 정하게 된 것에는 어떤 계기가 있는 것인가요? -
DohyunKim
2018.11.12 15:02
제 임의로 지정한 값입니다. 단어간 공백도 있게 해서 저 정도만 줘도 overfull 이나 underfull을 대부분 방지할 수 있더군요.
xetexko의 경우
\def\XKskipstretchshrink{plus .04em minus .02em}
이렇게 정의되어 있으므로 사용자가 이 명령을 재정의하면 늘어나고 줄어드는 정도를 조절할 수 있습니다.
-
베이드프즈
2018.11.12 16:01
답변 감사합니다!
한글을 위한 알고리듬이 따로 있을 것 같지는 않은데요. 어떤 언어이든 그걸 처리하는 건 텍 자체겠지요. 코텍에 정의되어 있는 건 (xetexko-space.sty를 방금 처음으로 열어봤는데요, 뭔지 모르겠습니다만) 아마도 자간과 단어간에 대한 상세한 규칙들이 아닐까 싶습니다. 이를테면 여는 따옴표 앞뒤 간격은 이렇게, 닫는 괄호 앞뒤 간격은 저렇게 등등. 그리고 그런 규칙들에 개행을 허용하거나 허용하지 않는 것도 포함되어 있겠죠. 하이픈은 무턱대고 하는 게 아니라 하이픈 사전이 있어야 합니다. 영국식 하이픈네이션을 확인하려면
\usepackage{polyglossia}
\setmainlanguage[variant=british]{english}