닥북 문서를 출력용 PDF로 변환하는 방법은 몇가지가 있습니다. 닥북이 SGML이던 시절에는 주로 JadeTeX을 통해 텍으로 조판하는 방법을 썼습니다. 하지만 XML로 바뀐 후에는 XML의 전통적인 문서 변환 방식인 XSLT를 사용하서 FO 형식의 문서를 만들고, 이를 다시 FOP처럼 FO를 PDF로 바꿔주는 도구를 이용하는 것이 “공식” 방법이 되었습니다. 문제는 그렇게 생성한 PDF의 품질이 그다지 좋지 않다는 겁니다. 일차적인 문제는 FO를 만드는 스타일시트가 그다지 미적인 측면에 신경을 쓰지 않았다는 것이고, FO를 PDF로 변환하는 도구 역시 적어도 공개된 것들중에는 아직 쓸만한 것이 없습니다. 결국 닥북을 기본 문서 형식으로 채택하고 있는 많은 프로젝트들이 여전히 JadeTeX에 의존하고 있는 상황입니다. KTUG분들 덕분에 최근에는 한글 문서도 처리할 수 있게 되었고요. 그러나 JadeTeX은 SGML에 기반하고 있어, 스타일시트로 별로 인기없는 DSSSL을 써야만 한다는 것이 큰 단점이죠. 조금만 결과물의 모양을 바꾸려고 해도 DSSSL을 고쳐야 하는데, 이쪽은 XSLT에 비해 사용자도 많지 않고, 소프트웨어도 그리 활발히 개발되고 있지 않아서 도움을 구하기가 어렵습니다.

결국 NetBSD에서는 한국어판 NetBSD 사용 안내서를 만들면서 닥북 XML에 직접 XSLT 스타일시트를 적용해서 LaTeX 파일을 만들고, 거기서 dhucs로 PDF를 만드는 방법을 택했습니다. NetBSD 프로젝트의 CVS 저장소에서 htdocs 모듈을 받으면 make 명령만으로 PDF 파일을 생성할 수 있습니다. 보다 일반적인 환경에서 이 방법을 사용하려면 다음과 같이 하면 됩니다.

먼저 몇가지 소프트웨어를 설치해야 합니다.

  • XSLT 처리기 — XML 파일에 XSLT 스타일시트를 적용해서 다른 형태로 바꿔줍니다. 이 글에서는 libxslt에 포함된 xsltproc를 쓰고 있지만, 다른 XSLT 처리기도 사용 가능할겁니다. 대부분의 BSD와 리눅스에서 패키지로 설치 가능합니다. 맥오에스텐에는 기본으로 포함되어 있습니다.
  • db2latex-0.8pre1 — 닥북 파일로부터 LaTeX 파일을 얻기 위한 스타일시트입니다. 0.8pre1이 최신 버젼입니다.
  • Hangul-ucs — UTF-8로 인코딩된 한글 LaTeX 문서를 처리하는 패키지입니다. 설치 방법은 KTUG을 참조하세요.

libxslt나 Hangul-ucs는 쓰고 계신 운영 체제에서 패키지로 제공하는 것이 있다면 그걸 설치하는 것이 제일 간단합니다. 하지만 db2latex은 pkgsrc를 쓰는 환경이 아니라면 설치하기 전에 고쳐줘야 할 것이 있습니다. db2latex은 2004년 이후로 개발이 안 되고 있어서 최근 버젼의 소프트웨어와 사용하면 충돌하는 부분이 좀 있습니다. 한글 처리를 위해서 바꿔줘야 하는 것들도 있고요. 대부분은 별도의 XSL 파일을 하나 만들어 쓰는 것으로 해결이 됩니다만, 템플릿 하나를 없애야 하는 것이 있어서 이건 db2latex 소스 자체에서 고쳐줘야 합니다. db2latex의 xsl/qandaset.mod.xsl에서 question.answer.label이란 템플릿을 찾아서 지워주세요. pkgsrc에 포함된 패치를 적용하셔도 됩니다.

다음은 db2latex의 설정을 바꾸어주는 XSL 파일을 만들 차례입니다. 이 파일을 만드는 가장 간단한 방법은 NetBSD 사용자 안내서용으로 만들어 놓은 것을 가져다 필요한 부분만 바꾸는 겁니다. 맨 앞에 보면 처음으로 나오는 xsl:import에서 db2latex 스타일시트를 불러옵니다.

<xsl:import href="http://db2latex.sourceforge.net/xsl/docbook.xsl"/>

XML 카탈로그가 제대로 되어 있어서 URL을 보고 설치된 파일을 찾아오는 경우라면 그냥 놔둬도 되지만, 그렇지 않은 경우라면 URL이 실제 파일 위치를 가리키도록 바꿔주세요.

<xsl:import href="file:///path/to/db2latex/xsl/docbook.xsl"/>

조금 아래에 보면 dhucs와 관련된 LaTeX 명령들을 정의하고 있는데요, dhucs의 특정 옵션을 사용해야 한다거나 다른 LaTeX 패키지를 쓸 일이 있으면 그 부분에 추가해주시면 됩니다. 변환하고자 하는 닥북 문서의 최상위 요소가 article이면 latex.article.preamble.pre와 latex.article.preamble.post를, book이면 latex.book.preamble.pre와 latex.book.preamble.post를 고쳐주세요. 나중에 생성된 LaTeX 파일을 보시면 쉽게 감이 오실 겁니다.

이제 LaTeX 파일을 생성할 준비가 되었습니다. 이 단계는 보통 XSLT 스타일시트를 적용할때와 같습니다. xsltproc 명령을 쓰면 다음과 같이 합니다.

% xsltproc -o docbook.tex default-tex.xsl docbook.xml

default-tex.xsl은 좀전에 만들어준 XSL 파일이고, docbook.xml이 한글 닥북 문서입니다. docbook.tex은 새로 만들 LaTeX 파일입니다. 생성된 LaTeX 파일을 latex 명령으로 처리해서 PDF를 생성하면 됩니다.

댓글 한개

  1. Mr.Dust님의 댓글:

    이 문서를 따라하고 있는데, “db2latex의 xsl/qandaset.mod.xsl에서 question.answer.label이란 템플릿을 찾아서 지워주세요.” 에서 막힙니다. qandaset.mod.xsl 에는 question.answer.label 이란 템플릿이 존재하지 않고, 그래서 그 다음 과정으로 넘어가면, “compilation error: file http://db2latex.sourceforge.net/xsl/qandaset.mod.xsl line 366 element template xsl:template: error duplicate name ‘question.answer.label’” 이라는 에러가 뜹니다. 검색해보니 db2latex-xsl-0.8pre1-3 에서 고쳐질 거라더군요.

    그래서 이번엔 데비안 db2latex-xsl-0.8pre1-5 를 받아 깔아보니 lists.mode.xsl 에서 에러가 납니다. object 가 defined 되지 않았다고 나오는군요. 흠.. 이 역시도 pre1-3 에서 수정된 것 같은데..

    도움을 부탁드립니다. 제가 하고 있는 것은 김프 매뉴얼로 docbook -> pdf 이며, 자세한 내용은 다음 게시물에 있습니다.(내용이 길어서요 ;;) http://docbook.or.kr/phpBB2/viewtopic.php?t=734&start=0&postdays=0&postorder=asc&highlight=tex

댓글 남기기