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>처럼 입력하시면 좋습니다.
자모에 색을 입힐 때
2019.02.12 16:38
회장님께서 두어 해 전에 만드신 colorjamo 패키지에 최근에 알게 된 랜덤 함수를 이용하여 이렇게 재미삼아 만들어봤습니다.
그런데 글자를 하나씩 떼어내는 게 생각보다 어렵습니다.
\tl_map_inline:nn을 이용하면 스페이스가 모두 무시되고요. \str_map_inline:nn을 이용하면 \par가 당연히 그대로 식자됩니다.
\seq_set_split:Nnn를 이용하여 빈 줄까지는 처리되도록 겨우 만들었는데 \\를 추가하면 오류가 발생합니다. 다른 매크로는 모두 허용하지 않는 걸로 하고요. 빈 줄(\par)과 \\(\newline)만 쓸 수 있으면 좋겠습니다.
댓글 4
-
yihoze
2019.02.12 16:46
-
Progress
2019.02.12 19:38
와우!
-
noname
2019.02.12 21:14
이런 경우, 그러니까 space, \\, \par, \newline을 명령의 인자로 처리해야 하는 경우가 아주 쉽지는 않더라고요. 상식적인 선에서 얘기하자면 이런 것들은 해당 명령의 밖에 있어도 불편하지 않을 것이라는 생각입니다만... 굳이 하나의 명령으로 처리해야 하는 상황이라면...
정통적인 방법은 당연히 한 토큰씩 읽어서 recursion 처리하는 것이겠고요, 그런데 그건 코딩하고 테스트하는 데 시간도 걸릴 것 같고 그래서... 쉽게 어떻게 해볼 수 없을까 생각을 해봤습니다.
대략 아이디어는 이렇습니다. 일단 #1로 들어온 long 인자를 \par를 기준으로 seq에 잘라 넣습니다. 이걸 tmpa(seq)라고 한다면, 이제 tmpa(seq)에는 몇 개의 문단이 들어가 있겠죠.
각 item에 대해서 mapping합니다. 첫 번째 아이템이 들어왔을 때,
* 이 아이템을 \\를 기준으로 잘라서 tmpb(seq)에 집어넣습니다. 그러면 tmpb(seq)에는 \\로 나뉜 각 아이템이 들어 있겠죠.
* 여기서 tmpb(seq)를 mapping합니다.
* 첫 번째 아이템이 들어오면 space를 기준으로 잘라서 tmpc(seq)에 각각 집어넣습니다.
* 여기서 tmpc(seq)의 아이템을 mapping하는데
* 이번에는 들어오는 아이템을 tl에 넣고 이 tl에 대하여
* 원하시는 글자 하나를 색칠하는 명령을 줍니다.(첨부 예제에서는 그냥 \fbox했습니다만 어려운 일은 아닐 거라고 봅니다.)
* tl 매핑이 끝나면 그 자리에 space를 넣습니다.(첨부 예제에서는 rule을 하나 그렸습니다.)
* tmpb(seq)의 모든 아이템에 대한 실행이 끝나고 난 뒤에는 \newline을 하나 넣습니다.
* tmpa(seq)의 아이템에 대한 실행이 끝난 위치에 \par를 하나 넣습니다.대략 이렇게 하면 되리라고 생각합니다. 설명이 복잡해서 그렇지 의외로 되게 간단합니다.
-
yihoze
2019.02.13 10:21
고맙습니다. 최종 코드를 KTUG 마당에 올리겠습니다.
페이지 색을 어둡게 하니까 보기에 좀 더 나은 것 같습니다.