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>처럼 입력하시면 좋습니다.
Verbatim 한글/영문 정렬문제
2021.02.18 10:34
안녕하십니까 luatexko를 사용해서 한글을 잘 사용하고 있는 사용자입니다. 그런데 한가지 verbatim (fancyvrb) 에서 정렬문제를 겪고있습니다. 그림-A 가 소스이고 \usepackage{luatexko}로 compile하면 결과가 그림-B 와 같이 나옵니다. 정렬을 하기 위해서 아래 코드를 추가하고 컴파일하면 그림-C 가 됩니다.
- \usepackage[T1]{fontenc}
- \usepackage{textcomp}
- \let\normalttdefault\ttdefault
- \usepackage{newtxtt}
- \let\ttdefault\normalttdefault % restore normal \ttdefault
- \makeatletter
- \renewcommand{\verbatim@font}{\usefont{T1}{newtxtt}{m}{n}}
- \makeatother
보시다시피 제 질문은 다음과 같습니다.
1) 한글과 영문이 썩인 verbatim에서 정렬이 제대로 되고 verbatim 밖에서도 한글이 되게 하는 것
2) 1)이 어렵다면, 영문 verbatim 정렬은 되면서 한글(verbatim안과 밖에서) 이 되게 하는 것
한 번 봐주시면 감사하겠습니다.
그림-A소스
그림-B-ragged
그림-C-no-hangul
댓글 14
-
yihoze
2021.02.18 10:57
-
DohyunKim
2021.02.18 14:21
monospaced 글꼴에 한글 폰트와 영문 폰트를 섞어쓸 때 두 가지를 고려해야 정렬이 이루어집니다.(xetexko와 luatexko가 동일합니다)
1. 한글과 영문자의 크기 비율
한글 폰트와 영문 폰트를 지정한 후
\begingroup \ttfamily \setbox0\hbox{a} \setbox2\hbox{가} \showthe\wd0 \showthe\wd2 \endgroup
이걸 실행해서 두 값을 확인하고 계산기로
2*\wd0 / \wd2
를 계산한 값을 한글 폰트에 Scale 옵션값으로 줍니다. 혹은 FakeStretch 옵션값으로 주어도 됩니다.2. 일관된 공백 크기
영문자 다음 공백과 한글 다음 공백의 크기가 동일하도록 다음과 같은 명령을 줍니다.
\AddToHook{ttfamily}{\spaceskip=0.5em\relax}
여기서 숫자 값은 위의
\wd0
값을 10으로 나눈 후 pt를 em으로 대체하여 사용합니다.(2021/02/19 추가) luatexko에서는 이처럼 spaceskip을 설정하는 번거로움을 없앴습니다. TeX Live 2021에 들어갈 예정입니다.
-
onionsjk
2021.02.18 17:35
감사합니다. 테스트해보고 결과를 공유하겠습니다.
-
yihoze
2021.02.19 11:22
제가 생각했던 방법도 DohyunKim님이 알려주신 방법도 onionsjk님이 원하는 것에 맞지 않는 것 같습니다. 영어와 한글의 높이보다는 폭을 동일하게 해야, 특히 표 같은 것을 만들 때, 윗 줄과 아랫 줄이 정렬될 테니 \wd0/\wd2를 해야 할 것 같습니다. 이 경우에 한글이 짜부라지는 것은 감수해야 할 듯합니다.
\setmonohangulfont{D2Coding}[FakeStretch=0.525]
-
Progress
2021.02.19 15:53
[따라해보기]
ttfamily 폰트로 영문은 Latin Modern Mono를, 한글은 나눔고딕코딩을 사용해봅니다.
(Latin Modern Mono는 텍라이브에 포함되어 있고, 나눔고딕코딩은 네이버에서 배포합니다)\setmonofont{Latin Modern Mono}
\setmonohangulfont{NanumGothicCoding}1. 이제 DohyunKim 교수님이 알려주신 다음 코드를 넣고 컴파일합니다. 'a'와 '가' 글리프의 가로길이를 보여주는 것 같습니다. 이것은 컴파일 과정에서 그 값을 콘솔에 띄워주며 엔터치면 다음 단계로 넘어갑니다.
\begingroup
\ttfamily
\setbox0\hbox{a}
\setbox2\hbox{가}\showthe\wd0
\showthe\wd2\endgroup
2. \wd0가 'a', \wd1이 '가'를 나타내는 것 같은데 각각 5.25pt, 2.8pt로 표시되네요. 바뀐 것 같기도 하고...
3. 어쨌거나 (2*2.8)/5.25=1.06이 되고 이를 한글 모노 폰트 스케일 값에 넣습니다.
\setmonofont{Latin Modern Mono}
\setmonohangulfont{NanumGothicCoding}[Scale=1.06]===
-
yihoze
2021.02.19 16:18
영문만 있는 경우는 당연히 문제 없고요. 둘째 줄 (comment line 2)처럼 한글이 섞여 있는 경우가 문제가 됩니다. 자세히 보면 수직선 글자의 위치가 다른 줄의 것들과 아주 미~세하게 다릅니다.
-
DohyunKim
2021.02.19 19:00
특이하게도 Latin Modern Mono 는 글꼴 크기에 따라 사용되는 폰트가 다릅니다. 일종의 variable font 라 할 수 있죠.
lmmono8-regular.otf lmmono9-regular.otf lmmono10-regular.otf lmmono12-regular.otf
이렇게 네 개가 있습니다. 따라서 크기 별로 달리 설정해야 합니다.
\setmonohangulfont{NanumGothicCoding} [ SizeFeatures= { {Size={-8.5}, FakeStretch=1.062}, {Size={8.5-11}, FakeStretch=1.05 }, {Size={11-}, FakeStretch=1.03 }, } ]
-
onionsjk
2021.02.20 22:26
좋은 의견 감사합니다.
테스트 해본 결과 김도현 교수님 말씀대로 차이가 있는 것 같습니다.
배율을 Case로 구분한 경우 폰트 사이즈 변경에 대응하는데 반면 고정배율인경우
폰트가 커질수록 눈에 띄게 차이가 난다는 것을 알 수 있었습니다.
muti-case
single-case
-
DohyunKim
2021.02.21 22:38
\documentclass{article} \usepackage{kotex} \usepackage{iftex} \setmonohangulfont{NanumGothicCoding} \begin{document} %\footnotesize % 8pt %\small % 9pt \normalsize % 10pt %\large % 12pt \ttfamily \setbox0\hbox{a} \setbox2\hbox{가} \ifluatex \luatexkomonohangulfont \else \ifxetex \kormonofont \fi \fi \dimen0=\fontdimen2\font \ExplSyntaxOn \fp_new:N \hangul_extend \fp_set:Nn \hangul_extend { 2 * \the\wd0 / \the\wd2 } \fp_new:N \hangul_space \fp_set:Nn \hangul_space { \the\wd0 / (\the\dimen0 * \hangul_extend) } \typeout{ ========= } \typeout{ Scale=\fp_use:N \hangul_extend, } \typeout{ WordSpace={\fp_use:N \hangul_space,0,0}, } \typeout{ ========= } \ExplSyntaxOff \end{document}
expl 코딩이 어설퍼 제대로 했는지 의문이지만 일단 동작은 하네요.
앞에선 spaceskip을 지시하는 방법을 제시했으나 폰트에 WordSpace 옵션을 주는 쪽이 나을 듯합니다. 그래서 만들어봤습니다.
lmmono를 기반으로 한다면 사이즈 네 개를 다 돌려봐야 하고요. 일반적으론 normalsize 하나로 족합니다.
결과치의 소수점 이하 자리수가 많은데 5, 6개 이상은 무의미하니 적당히 끊어서 사용하세요.
-
onionsjk
2021.02.26 21:36
만들어주신 두가지 솔루션을 잘 사용하고 있습니다.
사용해보면서 몇가지 스트레스 테스트 같은 것을 해보았는데 그 결과를 공유할 필요가 있다는
생각이 들었습니다. 결과를 보면
1) column수가 커질수록 방법에 따라서 차이가 발생한다는 것을 확인할 수 있었고
2) 그리고 그래픽 문자를 사용한 경우는 두가지 방법 모두 한글/영문 모두 위치가 맞지않습니다.
첨부 그림을 참조하시기 바랍니다.
[그림1]
[그림2]
-
DohyunKim
2021.02.27 12:35
말씀하신 "두번째 솔루션"이란, 앞서 댓글에 제시된 파일을 컴파일하여 화면에 보이는 결과를 원래 컴파일하고자 하는 파일에 글꼴 옵션으로 주라는 뜻이었습니다. 따라서 두번째 솔루션이 따로 있는게 아니라 첫번째 솔루션을 좀 편하게 사용하기 위한 일반적인 방법의 하나일 뿐입니다.
사용하시는 터미널의 설정에 따라 괘선문자들이 화면에 반각으로 보일 수 있습니다. 하지만 대개의 폰트들에서 괘선문자는 전각으로 들어가 있습니다. 이 때문에 화면에 보이는 것과 라텍 결과물이 달라지는 것입니다. 터미널 또는 에디터 설정을 조정해서 괘선문자들을 전각으로 보이게 하십시오.
-
onionsjk
2021.02.27 17:06
첫번째 것은 결국 wd0 , wd2 로 계산한 값을 글꼴 옵션으로 사용하는 같은 것으로 이해했습니다.
그런데 두번째는 이해가 잘 않되는 부분이 있습니다. 이전 댓글의 첨부한 그림1과 2 는 라텍으로 조판한 결과물을 캡쳐한 것이고 터미널 캡쳐는 아닙니다. 제가 사용하는 터미널에서는 제대로 보이는 것으로 봐서 전각인 것 같습니다. (그림1 참조)
그래서 저는 괘선 문자를 쓸려면 \setbox0\hbox{ 괘선문자} ... 이런 방식으로 wd0, wd2 구해서 옵션값을 조정하는 것이 필요한가 생각해 봅니다.
[그림1-터미널 캡쳐]
-
DohyunKim
2021.03.01 07:07
TeXworks 같은 에디터에서 화면글꼴을 NanumGothicCoding 으로 두면 화면에서도 정렬되지 않았다는 걸 알 수 있습니다. 괘선문자의 폭은 서양 글꼴에선 반각이고 동양 글꼴에서는 전각입니다. 서양 글꼴 중에 괘선문자 글리프를 가지고 있는 폰트는 몇 안 됩니다. 어쨌든 동서양간의 이런 차이때문에 터미널이나 에디터에서는 글자폭이 모호한 경우 전각으로 보여줄지 반각으로 보여줄지를 설정하는 항목을 가지고 있습니다.
제 경우 터미널의 Preferences -> Profiles -> Text 설정 화면에서
ambiguous characters are double width
항목을 체크해주고, 이에 덧붙여 vim 에서도 커맨드 모드에서
set ambiwidth=double
을 지시해야 했습니다.
-
onionsjk
2021.03.02 14:27
괘선문자 처리에 이런 난점이 있는줄 몰랐습니다
좋은 정보 감사합니다.
디폴트 tt 폰트는 한글이 포함되어 있지 않겠지요. 그러면 디폴트 한글 tt 폰트가 사용되는데, 두 폰트의 글자 폭들이 다르니 정렬되지 않는 겁니다. 해법은, D2Coding이나 Noto Sans Mono CJK KR 같은 한글이 포함된 모노스페이스 폰트를 사용하는 겁니다. 루아텍을 사용하신다고 하니 \setmonofont{...}만 설정해도 충분하지 않을까 합니다.
저는 (D2Coding은 폭이 덜 일정한 것 같아서) \setmonofont[Noto Sans Mono CJK KR}[Scale=0.95] 이렇게 사용합니다.
저 폰트의 글꼴이 썩 마음에 드는 것은 아니지만 한글이 포함된 모노스페이스 폰트가 흔하지 않아서 선택의 여지가 별로 없는 것 같습니다.