이전 다음 차례

1. 소개

이 글은 리눅스 문서처리를 위한 Linuxdoc-SGML 문서 처리 시스템에 대한 사용자 안내서이다. Linuxdoc-SGML은 하나의 SGML DTD(문서 형태 정의,Document Type Definition)이며, groff, LaTeX, HTML, GNU info, LyX, RTF 파일로 변환하는 방법을 지정한다.

Linuxdoc-SGML은 Tom Gordon(thomas.gordon@gmd.de)의 QWERTZ DTD에 많은 기반을 두고 있다. 그사람의 DTD를 약간의 수정을하고, 리눅스 문서로 사용하기 위해, 파일을 바꾸었다.

Linuxdoc-SGML은 일반적인 문서 처리 시스템이 아니다. 하지만, 이것은 많은 양식의 문서를 위해 사용될 수 있다. 리눅스에는 다양한 문서 양식이 있는데, 대표적으로, HOWTO, FAQ, 매뉴얼 페이지(Man page)들 수 있다. 이런 문서 양식으로 문서를 처리할 수 있는 것이 이 시스템이다. 실질적으로 우리가 흔히 구할 수 있는 문서들은 .sgml 파일 형태가 아니다. 하지만, 요즘 들어, 이런 문서들은 바로 이 시스템을 이용해서 만들어 지는 것이 대부분이다. 각종 리눅스 관련 문서를 만들고 싶다면, 이 시스템에서 사용하는 풀그림들을 사용하기를 권한다.

이 시스템의 좋은 점 중 하나는 다양한 문서양식으로 만들 수 있다는 것이다. 지금까지 대부분의 리눅스 문서들은 그냥 문서 편집기로 보통의 텍스트 파일 형태로 만들어졌다. groff 문서와 같이 조금 복잡한 문서들도 보통 텍스트 편집 방식으로 작성되었지만, HTML, LaTeX등 다양하고 복잡한 문서양식들을 일일이 그 양식에 맞게 재편집 한다는 것은 쉬운일이 아니다. 이런 문제의 해결로 가령 Linux, it's cool! 이런 내용이 파일 안에 있다면, 이 파일을 각각의 문서 양식에 따라, 처리할 수 있는 시스템의 필요성이 생긴 것이다. 문서를 작성하는 사람 또한 하나의 양식(.sgml 파일)으로 문서를 작성하면, 문서작성을 위한 노력을 줄일 수 있다.

1.1 이 문서에 대하여

이 문서 또한 Linuxdoc-SGM DTD를 사용해서 쓰여졌다. (영문이 그렇고, 진짜 이문서는 html로 만들어졌습니다. 아직 Linuxdoc-SGM DTD 구조체계를 잘 몰라서... 껄껄) 이 문서에는 DTD를 사용해서 .sgml 파일을 만드는 대략적인 이야기가 설명된다. SGML 문서의 한 예제로 example.sgml 파일을 참조한다. 이 파일은 원하는 문서를 만들 때 사용할 대략적인 문서 구조를 제시하고 있다.

1.2 왜 SGML?

SGML을 사용한 이유는 SGML은 다른 문서양식 변환을 위해 특별하게 만들어졌기 때문이다. SGML이란 표준으로 일반화된 조판 언어(Standard Generalized Markup Language) 이다. SGML은 자체적인 문법 구조를 가지고 있으며, 이 문법으로 문서가 작성된다. 사용자는 하나의 DTD(문서 형태 정의,Document Type Definition)로 문서의 구조를 지정한다. Linuxdoc-SGML 시스템에서는 리눅스 HOWTO 문서의 구조와 기타 여러 문서들의 구조를 가지고있다. QWERTZ는 또다른 하나의 DTD인 것이다.

DTD는 한 문서에서 사용되는 "요소(elements)"의 이름을 지정한다. 하나의 요소라는 것은 문서 구조의 한 부분이다. 가령, 장, 절, 단락, 심지어 강조글자와 같은 작은 것들도 각각의 요소가 된다. LaTeX같은 경우와 달리, 각각의 요소는 SGML 자체적으로 지정되어 있지는 않다. Linuxdoc-SGML DTD는 LaTeX 문서들의 장, 절, 본문 "요소"들과 같은 것을 참조하는 요소들을 정의하는 처리를 한다. 한편, SGML은 사용자 정의 문서 양식을 위한 기반을 제공한다. 이런 점에서, SGML은 저수준 TeX와 비슷하고, Linuxdoc-SGML DTD는 LaTeX와 비슷하다.

두가지가 유사하지만 혼돈하지 말기를 바란다. SGML은 텍스트 양식화 시스템이 아니다. 즉, SGML형식으로 양식화 하는 것은 없다. SGML 소스는 단지 다른 문서 양식화에 사용될 뿐이다. 더 자세히 말하면, SGML은 단지, 문서 구조를 정의하는데만 사용된다. 문서 양식화의 용이성이나, 내부적인 매크로같은 것은 없다. 이런 모든 것은 DTD에서 정의된다. 하나의 DTD를 사용하지 않고는 SGML을 사용할 수 없다. DTD는 바로 SGML이 어떻게 작동할 것인가를 정의하는 것이다.

1.3 어떻게 작동되나?

여기서는 SGML로 문서를 만드는 방법과, Linuxdoc-SGML DTD로 어떻게 작업할 것인가를 다루고 있다. 먼저, 하나의 DTD가 필요하다. 글쓴이는 QWERTZ DTD를 사용한다. 이 DTD는 원래, LaTeX와 비슷한 DTD를 필요로 하는 사람들에 의해서 만들어졌다. 글쓴이는 이 DTD를 리눅스에서 사용하기 위해서 Linuxdoc-SGML DTD로 다시 바꾸었다. Linuxdoc-SGML DTD는 간단하게 문서의 구조를 설정한다. 아래는 그 구조 설정의 한 부분이다.

<!element article - -
        (titlepag, header?, 
         toc?, lof?, lot?, p*, sect*, 
         (appendix, sect+)?, biblio?) +(footnote)>
이것은 "article"을 위한 모든 구조를 설정한다. article은 LaTeX에서의 documentstyle과 비슷하다. 위의 article 경우에는 제목쪽(titlepage - titlepag), 선택적인 표제(header - header), 선택적인 글차례(table content - toc), 선택적인 그림차례(list of figures - lof), 여러 단락(paragraph - p), 여러 섹션(sect), 선택적인 부록(appendix)과 참고문헌(biblio), 각주(footnote)로 구성되어 있음을 말한다.

보는 바와 같이 DTD는 어떤 구체적인 모양을 지정하는 것이 아니라, 단지 문서의 추상적인 개념만을 지정한다.

sgml 문서를 만드는데 있어, 어떤 DTD 문법을 이해할 필요는 없다. 단지 그냥 만들어진 DTD를 사용하면 된다. 만일 이외의 특수한 문서 양식이 필요할 경우에는 직접 DTD를 만들면된다. 그렇지 않을 경우에는, 그저 사용하기만 하면 된다. Linuxdoc-SGML 문서의 구조에 대해서는 뒷부분에서 자세히 다루도록 하겠다.

다음으로, DTD에서 정의된 문서의 구조에 따라 문서를 작성한다. 다시 한번 말하지만, Linuxdoc-SGML DTD는 LaTeX와 비슷하다. 그래서, LaTeX를 사용하는 사람들에게 쉽게 문서를 만들 수 있을 것이다.

SGML 소스가 작성이 되어, 이것을 어떤 특정한 문서양식으로 바꾸고자 하면, 먼저 SGML 소스는 그 지정한 분석기에 의해서, 분석된다. 글쓴이는 James Clark, jjc@jclark.com이 만든 sgmls 분석기를 사용한다. 이 사람은 groff의 제작자이다. 글쓴이와 이사람과는 잘 아는 사이다. sgmls 분석기는 지정한 DTD에 의해 SGML 소스를 검사하고, 처리한다. 각종 매크로를 처리하고, 각 요소를들 분리하고, 다음 단계에서 사용하는 sgmlsasp에서 처리 가능하도록 바꾼다.

sgmlsasp에서는 문서를 다른 양식으로(LaTeX와 같은) 변화하는 작업을 한다. 이 작업은 "파일대치"라는 개념을 사용하는데, 이 개념은 SGML의 각 요소들이 각각의 지정한 문서양식에서 사용하는 각각의 요소로 되치되는 방식을 취한다.

예를 들어, LaTeX의 경우는 아래와 같이 바뀐다.

<itemize>       +       "\\begin{itemize}      +
</itemize>      +       "\\end{itemize}        +
위에서 보는 바와 같이 itemize 요소는 LaTeX 파일로 변환 될때 아래와 같이 바뀌는 것이다.
\begin{itemize}
(이렇기 때문에, Linuxdoc-SGML DTD는 LaTeX와 비슷하다고 한 것이다.)

그래서, SGML 소스를 가지고 다른 문서양식으로 변환하고자 하면, 먼저 SGML 요소들을 사용하는 문서를 작성해야 하고, 이것을 가지고, 기타 여러 문서 양식으로 변환한다. 엄밀히 말하면, 이것은 그리 간단한 작업이 아니다, 예를 들어, 현재 가지고 있는 DTD에서 지원하지 않는 문서 구조로 된 문서를 변환하고자 한다면, 분명 문제점들이 발생한다. 이런 경우에는, 일반적인 SGML 양식을 사용해서, 전체적인 틀을 잡고, 나머지 각 문서들에서 특수하게 사용되는 부분들에 대해서는 변환을 해서, 그 문서에서 편집하는 것이 보다 쉬운방법이다.

sgmlsasp의 작업이 끝나면, 원하는 하나의 문서양식(예를 들어 LaTeX)을 얻을 수 있다. 이 글에서는 하나의 예를 설명할 것이다. 이 예제를 가지고 직접 변환해 보기 바란다. 물론 명령행의 단 한 줄로 모든 것은 끝난다.

하지만, 가장 먼저 이야기해야 할 부분은 이 풀그림을 어떻게 설치하고, 어떻게 환경 설정할 것인가에 대한 이야기인 것 같다.


이전 다음 차례