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>처럼 입력하시면 좋습니다.
Scrivener를 통한 LaTeX 자동 생성시 용지를 넘는 표의 자동 변환에 대해 문의드립니다.
2014.10.30 19:57
이 글이 게시판 성격에 맞는지 좀 걱정이 됩니다.
올초에 LaTeX를 처음 접하고는 멋진 문서를 만들 수 있다는 생각에 사용해보다가 프로그래밍(?)의 벽에 부딪혀 손을 놓고 있었습니다.
요 근래에 검색을 통해 Karnes님의 스크리브너와 라텍을 보고 ‘이렇게 간단한 방법이 있다니…’ 하여 다시 LaTeX를 손에 들게 되었습니다. 덕분에 MultiMarkdown도 배우게 되었고요.
제가 주력하는 방향은 한문 원문을 타블렛 매체에서 보려는 것입니다. 글을 쓰기보단, 글을 읽고 싶은 쪽이지요. (문서상에 폰트가 가지고 있지않는 한자 글자를……에 좀 길게 써놨습니다.)
스크리브너의 장점은 Karnes님의 Scrivener로 한글 LaTeX 문서를 만들어보았다를 보시면 나와있습니다. 초보자도 LaTeX 문서를 별 고민없이 만들 수 있다는 것이지요. 특히나 여기서 활용하는 Markdown이라는 문법은 아주 쉽습니다. 놀부의 마크다운 사용법 - 무료 툴을 중심으로 한 워크플로우, 이 글을 보시면 몇 분만에 익힐 수 있습니다.
제가 활용하는 방법은 이렇습니다.
한자가 많이 들어가 있는 원문과 정리본 hwp 파일을 열어서 그걸 스크리브너에 옮깁니다.
화면을 보면서 Markdown 형식으로 수정합니다.
컴파일하여 .tex 파일을 얻어서 xelatex으로 PDF를 생성합니다. 중간에 필요한 변환용 파일은 위의 스크리브너와 라텍 글의 링크에서 받아서 설치하였습니다. (왜, 무엇을 위해, 이런 파일이 필요한지도 잘 모르는 초보입니다.)
일반 문서들은 잘 변환해서 사용하고 있었지만, 몇 가지 불편한 점이 생겨서 제 스스로 해결하기 힘들어 다시 질문 글을 올리네요. 혹시나 저처럼 TeX 초보자가 Scrivener를 통한 접근을 할때도 동일한 궁금증이 생기지 않을까요.
부디 조언 부탁드립니다. 오늘의 질문은 이것입니다.
스크리브너가 만들어내는 TeX파일의 형식이 일정해서, 뭔가 변환에 필요한 환경을 정의해주면 가능할것 같은데 제 지식으로는 부족하네요.
스크리브너에 마크다운 형식의 표를 넣으면 아래와 같은 형식으로 변환됩니다.
\begin{table}[htbp]
\begin{minipage}{\linewidth}
\setlength{\tymax}{0.5\linewidth}
\centering
\small
\begin{tabulary}{\textwidth}{@{}LLL@{}} \toprule
우편번호&일련번호&주 소\\
\midrule
210821&001&강원도 강릉시 강동면 모전리\\
210822&001&강원도 강릉시 강동면 산성우리\\
210821&021&강원도 강릉시 강동면 상시동리\\
.
.
.
\bottomrule
\end{tabulary}
\end{minipage}
\end{table}
일일히 \tabu, \longtabu 환경으로 사용하면 될것같긴 하지만, 일괄 변환 할 방법은 없을까요? 예를 들자면 별도의 \renewenvironment 같은 방법을 미리 선언해놓고 그냥 스크리브너에서 변환된 것이 자동으로 바뀔 방법이 있으면 정말 편리하겠습니다.
\renewenvironment{tabulary}
{\begin{longtabu}}
{\end{longtabu}}
이런 식으로는 안되더군요. (정말 아쉬웠습니다. 아는 것도 얼마 없는데…)
자동화 할 수 있는 설정을 알려주시면 정말, 감사하겠습니다. 아래는 생성된 dummy 파일 전문입니다.
OS : Mac OS 10.9.5
컴파일 : TeX Live 2014 xelatex
\documentclass[hcr]{oblivoir}
\usepackage{fapapersize}
\usefastocksize{210mm,297mm}
\usefapapersize{90mm,122mm,2mm,2mm,7mm,10mm} % 크레마 샤인 판형
% 아래 설정은 김강수님의 블로그 자료에서 가져왔습니다. 왜 필요한지는 자세히 모릅니다.
\ifx\tymax\undefined\newlength{\tymax}\fi
\usepackage{tabulary}
\begin{document}
\section{Multimarkdown to LaTeX 변환}
Scrivener에서 표가 어떻게 변하는지 시험하는 문서입니다.
문서의 크기는 표가 잘릴 수 있도록 작은 종이로 설정했습니다.
\begin{table}[htbp]
\begin{minipage}{\linewidth}
\setlength{\tymax}{0.5\linewidth}
\centering
\small
\begin{tabulary}{\textwidth}{@{}LLL@{}} \toprule
우편번호&일련번호&주 소\\
\midrule
210821&001&강원도 강릉시 강동면 모전리\\
210822&001&강원도 강릉시 강동면 산성우리\\
210821&021&강원도 강릉시 강동면 상시동리\\
210822&021&강원도 강릉시 강동면 심곡리\\
210824&031&강원도 강릉시 강동면 안인리\\
210824&041&강원도 강릉시 강동면 안인진리\\
210821&031&강원도 강릉시 강동면 언별리\\
210824&001&강원도 강릉시 강동면 임곡리\\
210824&011&강원도 강릉시 강동면 정동진1리\\
210822&031&강원도 강릉시 강동면 정동진2리\\
210822&041&강원도 강릉시 강동면 정동진3리\\
210824&021&강원도 강릉시 강동면 정동진리\\
210823&021&강원도 강릉시 강동면 하시동리\\
210820&001&강원도 강릉시 강동면\\
210130&001&강원도 강릉시 강문동\\
210150&001&강원도 강릉시 견소동\\
210795&002&강원도 강릉시 견소동 신도브래뉴아파트\\
210791&002&강원도 강릉시 견소동 송정한신아파트 (101--105동)\\
210759&012&강원도 강릉시 교1동 교동부영2단지아파트 (201--204동)\\
210756&012&강원도 강릉시 교1동 현대2차아파트\\
210923&031&강원도 강릉시 교1동 815--906\\
210101&001&강원도 강릉시 교1동\\
\bottomrule
\end{tabulary}
\end{minipage}
\end{table}
\end{document}
댓글 8
-
Progress
2014.10.31 10:52
-
nanim
2014.10.31 13:12
저라면 그냥 주석문을 쓰는 방법으로 해보겠습니다.
변환 전 원문이 HWP라셨는데... 이 표로부터 tab으로 분리된 csv 형식으로 메모리로 copy할 수 있다면
csv2latex을 터미널에서 한 번 실행하고 붙여넣기할 수 있습니다. (csv2latex은 맥에서(만) 동작합니다.)
csv2latex을 실행할 때 longtable 옵션을 주면 longtable 표가 paste될 텐데요, 그냥 쓰셔도 되고 위의 progress님이 자세하게 소개하신 longtabu로 바꾸는 것도 어렵지 않습니다.
이렇게 붙여넣은 표 전체를 mmd 주석문 <!-- --> 안에 넣어줍니다.
HWP에서 바로 안 되면 엑셀로 변환해서 하면 그만이니까 (제가 HWP를 써보지를 않아서 되는지 안 되는지 모릅니다) 역시 복사하기/붙여넣기 방식으로 작업할 수 있습니다.
-
안개나무
2014.10.31 14:44
두분 말씀 감사합니다.1. Progress,님, longtabu 수작업으로 수정하는 방법은 해봤습니다. (본문중에 써놨습니다. ^^)제가 원하던건 많은 문서의 hwp->MMD->LaTeX 자동 변환이어서 중간에 문서의 부분 부분을 수정하는 방법은 알고 있지만, 에디터에서 TeX 파일을 열어 하나씩 수정하지 않고 자동으로 변환될 방법이 있을까 해서 글 올렸습니다. 상세한 조언 감사합니다.2. nanim님 제가 LaTeX형식으로 표를 입력하지 않은 이유는 마크다운 문서의 장점도 가지고 있으려했기 때문입니다.원본을 TeX 파일로 저장해놓으면 그걸 보기엔 쉽지 않지만, MMD문서로 저장해놓으면 주석달기나 상호참조등의 기능을 그대로 가지면서 텍스트에디터로 편집이 가능해서 원본은 MMD문서로 저장, 필요시 PDF 생성이란 생각을 하고 있었습니다. 또, MMD의 표는 용지크기에 구애받지 않아서 필요시 타블렛에서 편집 및 뷰잉이 가능하더군요.위 화면의 좌측편은 멀티마크다운을 지원하는 뷰어(Marked)에서 표시한 화면입니다. 표 하단의 각주가 잘 표현되고 있습니다. 우측은 마크다운만 지원하는 에디터(Mou)에서 표시한 화면입니다. 각주는 일반 텍스트로 보이지만, 표의 좌우폭은 화면 사이즈에 맞춰서 줄어져 있습니다. 스마트폰에서 보아도 마찬가지입니다. TOC 기능도 자동 지원되어 section으로 건너뛰기도 가능합니다.그래서, hwp 파일을 MMD 파일로 변환하여 보관하고, 필요시에 LaTeX를 통한 PDF 생성을 생각하고 있었습니다.자동 변환이 안되면, 표 부분은 latex 형식으로 입력해야겠네요. 감사합니다. -
Progress
2014.10.31 18:37
아 그런가요?
저는 tabulary 말고 쪽 나눔이 허용되는 다른 표 환경의 사용법을 궁금해하시는 줄 알았습니다.
(요즘 문맥을 잘못 파악하는 빈도가 자주 발생해 걱정입니다.)
-
Dennis
2014.10.31 17:11
HWP에서 CSV 파일로 잘 저장이 된다면 csvsimple 패키지가 도움이 될 수 있지 않을까 싶네요. 명령행에서 texdoc csvsimple 이라고 해 보시면 패키지 설명서를 볼 수 있습니다.
-
안개나무
2014.11.02 12:44
감사합니다. 제가 가진 자료 중의 일부가 중간에 비교를 위한 표가 들어있는 형식이라서 별도의 CSV 파일을 유지할 필요는 없을 것 같습니다.
현재 정착한 방식은 작은 표의 경우, 글씨 크기를 small(자동생성) -> tiny로 대체, 그래도 안되는 경우에만 longtagu를 사용하는 방식으로 수동 교정하고 있습니다.
-
nanim
2014.11.05 11:20
일단, mmd가 생성해준 table 코드는 건드리지 말고 preamble의 조작만으로 표가 잘리게 하라는 말씀이라고 이해했습니다.
그러자면 다음 세 가지 문제를 해결해야 합니다.
- floating 환경인 table, figure가 쪽나눔을 방해하므로 제거해야 합니다.
- minipage는 원래 한 페이지 안에서만 구현되니까 이것도 제거해야 합니다.
- longtabu 환경의 문법과 tabulary가 다르므로 적당히 손을 봐줘야 합니다.
일단 table과 minipage 모두 무력화
\def\table[#1]{}
\def\endtable{}
\def\minipage#1{}
\def\endminipage{}tabulary로 된 환경을 longtabu에서 돌아가게 하기 위해서
\usepackage{longtable,tabu}
\newcolumntype L{l}
\let\tabulary=\relax
\def\tabulary#1{\begin{longtabu}to#1}
\def\endtabulary{\end{longtabu}}이 정도 하면, 적어도 예시된 문서는 원하는 대로 나올 것으로 봅니다.
그러나, 이 절차에서 보시듯이 minipage나 table와 같은 latex 설계상 basic한 것들을 \def하고 있다는 점에서 매우 위험한 코드이고, 일반적 목적에 사용하지 않아야 할 것입니다. 꼭 필요하다면 이러한 재정의를 "국지화(localize)"하는 방법을 생각해보시기 바랍니다.
======
Scrivener에서 이걸 어떻게 할 수 있겠나 생각해봤습니다.
표의 앞과 뒤에
<!--\begin{demo}-->
| 우편번호 | 일련번호 | 주소 |
=======| === | ===
....
<!-- \end{demo} -->
와 같이 마크업하는 것은 어렵지 않을 겁니다. 그리고 demo 환경을 다음과 같이 정의하여 preamble에 두면,
\newenvironment{demo}{
\let\ORGtabulary=\tabulary
\let\endORGtabulary=\endtabulary
\let\ORGtable=\table
\let\endORGtable=\endtable
\let\ORGminipage=\minipage
\let\endORGminipage=\endminipage
\def\table[##1]{}
\def\endtable{}
\def\minipage##1{}
\def\endminipage{}
\def\tabulary##1{\begin{longtabu}to##1}
\def\endtabulary{\end{longtabu}}
}
{
\let\table=\ORGtable
\let\endtable=\endORGtable
\let\minipage=\ORGminipage
\let\endminipage=\endORGminipage
\let\tabulary=\ORGtabulary
\let\endtabulary=\endORGtabulary
}원하시는 대로 Marked 앱에서는 markdown으로 보이고 latex으로 변환하면 longtable이 되지 싶습니다.
demo 정의 이전에 다음 두 줄은 필요하겠네요.
\usepackage{longtable,tabu}
\newcolumntype L{l}제가 테스트한 스크리브너 파일을 첨부합니다. 이 테스트에서는 caption을 문제삼지 않았습니다. 만약 caption까지 처리해야 한다면 고려할 요인이 좀 더 있겠습니다.
-
안개나무
2015.04.22 16:00
감사합니다. 답글을 이제야 봤네요. 보자마자 댓글을 달아서 결과는 아직 못봤지만, 잘 될것같습니다. 미리 감사드립니다. ^^
지금 삽입한 tabulary 환경은 표의 행이 많을 경우 자동으로 쪽 나눔을 해주지는 않습니다.
각설하고 tabu 패키지의 longtabu 환경을 쓰십시오. longtabu 환경은 길디 긴 표를 자동으로 쪽 나눔 해줍니다. longtabu 사용법은 예전에 사용하던 longtable 패키지의 문법과 같습니다. (따라서 longtable 패키지도 불러와야합니다.)
===
게시판에서 tabu나 longtabu로 검색하시면 몇 가지 유익한 게시물을 만날 수 있습니다.