<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE btexdoc SYSTEM "btexdoc.dtd">
<btexdoc cover="hardcover" inner="standard" papersize="standard">
    <macrodef>
        <pair key="thepart" value="제%1$s부"/>
        <pair key="parttype" value="1"/>
        <pair key="thechapter" value="%1$s장"/>
    </macrodef>
    <cover>
        <title>문자를 모아 책을 찍어내어 엮는 머나먼 여정으로의 소개</title>
        <subtitle>책 쓰고 찍어내는 법</subtitle>
        <author>Terran Publishing</author>
        <edition>시험판</edition>
    </cover>

    <tocpage title="목차"><tableofcontents/></tocpage>

    <manuscript>
        <part>책</part>

        <chapter>책이란 무엇인가</chapter>

        <p>본 견본은 책 조판 언어의 예시를 위해 제작되었다.</p>

        <section hide="1">책이란 정말 무엇인가</section>

        <p><index id="책"/>책 조판 시스템에서 책이란 페이지 번호와 그림과 <a href="하이퍼링크">하이퍼링크</a>와 같은 요소를 포함하여 가독성 좋게 편집된 글의 뭉치를 말한다.</p>
        <p>책은 ‘엮인’ 글로 취급되어 두 페이지가 한번에 보여진다.</p>

        <chapter>타자기를 사용한 집필</chapter>

        <p><index id="타자기"/>타자기는 글 쓰기의 시작을 빠르고 편리하게 해 준다. 타자기를 클릭하면 바로 작성이 가능하다.</p>
        <p>하지만 타자기를 사용할 때는 여러 문자 사용 불가, 사진 첨부 불가, 하이퍼링크 사용 불가, 너덜너덜해 못생긴 문단과 같은 크나큰 단점이 따라온다.</p>
        <p>타자기로 찍은 문서는 ‘엮이지 않은’ 글로 취급되어 한번에 한 페이지만 보여진다.</p>
        <p>위와 같은 이유로 타자기로는 책다운 책을 만들 수 없다.</p>

        <chapter>출판사와 인쇄소를 이용한 집필</chapter>

        <p>출판사를 통하면 진짜배기 책의 모든 장점을 담은 책다운 책을 고작 한 권도 아닌 여러 권을 원하는 만큼 찍어낼 수 있다.</p>
        <p>책을 인쇄하려면 원고를 출판사로 보내야 한다. 책을 찍어내기 위한 원고는 <btex/>이라는 특수한 언어로 작성되어야 한다.</p>
        <p><btex/>을 통하며 책 전체의 생김새를 간단히 기술할 수 있다. 사용할 수 있는 스타일은 조판 시스템이 지원하는 범위 안에서 제약이 없다. 타자기로 찍어낸 듯한 글도 원한다면 얼마든지 인쇄되도록 할 수 있다.</p>


        <part><btex/></part>

        <chapter>소개</chapter>

        <p><index id="btex 언어"/><btex/>(발음: [비ː텍])은 <latex/>과 유사하게 설계된 XML 기반의 마크업 언어이다.
            <btex/>은 세세한 스타일 정의문과 조판 설정을 추상화하여, 글을 쓰면서 <latex/> 매크로를 디버깅하는 등의 일 없이 글쓰기에 집중할 수 있도록 설계되었다. 다만 이러한 이유로 미리 정의된 스타일을 뜯어고치는 것은 어렵다.</p>
        <p><btex/> 문서는 다음의 다섯 부분으로 나뉘어진다: <!--
        --><a href="btexdoc">스타일 정의문</a>·<!--
        --><a href="표지 정의문">표지 정의문</a>·<!--
        --><a href="목차 정의문">목차 정의문</a>·<!--
        --><a href="원고">원고</a>·<!--
        --><a href="색인 페이지">색인 페이지</a>.
            이 중 스타일 정의문과 원고는 필수로 존재하여야 하는 부분이다.</p>


        <chapter>스타일 정의문</chapter>

        <p><index id="btexdoc"/>스타일 정의문은 <btex/> 문서의 가장 첫 부분이다. 스타일 정의문의 구조는 다음과 같다.</p>

        <callout align="left" class="code"><index id="btexdoc (태그)"/><!--
    -->&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br/><!--
    -->&lt;!DOCTYPE btexdoc SYSTEM "btexdoc.dtd"&gt;<br/><!--
    -->&lt;btexdoc cover="hardcover" inner="standard" papersize="standard"&gt;
        </callout>

        <p><code>btexdoc</code> 태그는 다음의 속성을 지원한다.</p>
        <ul>
            <li><code>cover</code> — 표지의 스타일을 지정함. 지원하는 값: <code>hardcover</code>, <code>none</code></li>
            <li><code>inner</code> — 내용의 스타일을 지정함. 지원하는 값: <code>standard</code>, <code>typewriter</code></li>
            <li><code>papersize</code> — 판형을 지정함. 지원하는 값: <code>standard</code></li>
        </ul>

        <chapter>표지 정의문</chapter>

        <p><index id="표지 정의문"/><code>cover</code> 태그는 책의 표지를 지정한다. 표지가 없는 책이라면 이 부분은 생략 가능하다. 표지 정의문의 구조는 다음과 같다.</p>
        <callout align="left" class="code"><index id="cover (태그)"/><index id="title (태그)"/><index id="subtitle (태그)"/><index id="author (태그)"/><index id="edition (태그)"/>&lt;cover hue="358"&gt;<br/>
            &lt;title&gt;책 제목&zwsp;&lt;/title&gt;<br/>
            &lt;subtitle&gt;필요한 경우 부제목&zwsp;&lt;/subtitle&gt;<br/>
            &lt;author&gt;누가 이 책을 집필하였는가&zwsp;&lt;/author&gt;<br/>
            &lt;edition&gt;필요한 경우 판본 정보&zwsp;&lt;/edition&gt;<br/>
            &lt;/cover&gt;
        </callout>
        <p>이 중 <code>title</code> 태그만이 필수 태그이다. 표지의 문구는 글자간 간격이 넓게 인쇄된다. 책 제목은 두배 큰 크기로 인쇄된다.</p>
        <p>표지의 색깔은 <code>hue</code> 속성을 사용하여 바꿀 수 있다. 0에서 360 사이의 숫자를 사용할 수 있다.</p>


        <chapter>목차 정의문</chapter>

        <p><index id="목차 정의문"/>목차 페이지의 내용은 원고를 읽어 자동으로 채워진다. 목차 정의문의 구조는 다음과 같다.</p>

        <callout align="left" class="code"><index id="tocpage (태그)"/>&lt;tocpage title="목차 혹은 필요한 다른 제목"&gt;&zwsp;&lt;tableofcontents/&gt;&zwsp;&lt;/tocpage&gt;
        </callout>

        <p><code>title</code> 속성은 목차 페이지의 장제목을 지정한다. 지정하지 않았으면 “Table of Contents”가 인자된다.</p>
        <p><code>&lt;tableofcontents/&gt;</code> 태그는 조판 시스템이 내부적으로 사용하는 태그이다.</p>


        <chapter>원고</chapter>

        <p><index id="원고"/><index id="태그 목록"/>원고는 책의 진짜 본문이 담긴 부분을 말한다. 본문에는 다음의 태그를 사용할 수 있다.</p>
        <ul>
            <li><index id="part (태그)"/><code>part</code> — 원고에 새 부(part)를 추가함</li>
            <li><index id="chapter (태그)"/><index id="section (태그)"/><code>chapter</code>, <code>section</code> — 원고에 새 장(chapter)·절(section)을 추가함. 목차 페이지에는 다른 이름을 표시하고 싶다면 <code>alt</code> 속성을 사용할 수 있음. 목차 페이지에서 숨기고 싶다면 <code>hide="1"</code> 속성을 추가할 것. 장이 새 페이지에서 시작되게 하려면 <a href="매크로 정의문">매크로 정의문</a>을 볼 것</li>
            <li><index id="p (태그)"/><code>p</code> — 새 문단을 삽입함. 본문의 글은 반드시 이 태그 내부에 작성되어야 함. 모든 문단는 16픽셀의 들여쓰기로 조판되나, 다음의 경우 들여쓰기가 적용되지 않음: 부·장·절의 첫 문단, <code>br</code>, <code>newpage</code>, <code>callout</code>, <code>ul</code>, <code>ol</code>,  <code>anonbreak</code> 태그 직후의 문단</li>
            <li><index id="span (태그)"/><code>span</code> — 문구의 색상이나 스타일을 변경함. 색상은 <code>colour</code> 속성에 작성되어야 함. 6자리 헥스코드, 3자리 헥스코드, CSS Colours Level 4에 정의된 색상명을 사용할 수 있음. 모든 색상은 내부적으로 가장 가까운 3자리 헥스코드로 변경됨에 유의할 것</li>
            <li><index id="emph (태그)"/><code>emph</code> — <code>span</code>의 특수한 경우로, 문구를 <emph>빨간색으로</emph> 인자함</li>
            <li><index id="itemname (태그)"/><code>itemname</code> — <code>span</code>의 특수한 경우로, 게임 내 아이템의 이름을 강조 표시할 때 사용함. 문구는 <itemname>파란색으로</itemname> 인자됨</li>
            <li><index id="targetname (태그)"/><code>targetname</code> — <code>span</code>의 특수한 경우로, 임의의 목표를 강조 표시할 때 사용함. 문구는 <targetname>초록색으로</targetname> 인자됨</li>
            <li><index id="code (태그)"/><code>code</code> — <code>span</code>의 특수한 경우로, 코드를 강조 표시할 때 사용함. 문구는 <code>암적색의 고정폭으로</code> 인자됨</li>
            <li><index id="br (태그)"/><code>br</code> — 스스로 닫는 태그. 임의의 줄바꿈을 삽입함</li>
            <li><index id="newpage (태그)"/><code>newpage</code> — 스스로 닫는 태그. 임의의 새 페이지를 삽입함</li>
            <li><index id="anonbreak (태그)"/><code>anonbreak</code> — 스스로 닫는 태그. 임의의 문단 분할을 적용함. 분할 표시는 한 줄을 비우고 가운데에 긴 줄을 삽입하여 이루어짐. 주로 소설을 조판하는 데에 사용됨</li>
            <li><index id="callout (태그)"/><code>callout</code> — 문단 태그로서, 문단을 회색 상자에 넣어 돋보이게 조판함</li>
            <li><index id="ul (태그)"/><index id="li (태그)"/><code>ul</code> — 순서 없는 목록을 조판함. 목록의 항목은 <code>li</code> 태그를 사용하여 기술됨</li>
            <li><index id="ol (태그)"/><code>ol</code> — 순서 있는 목록을 조판함. 목록의 항목은 <code>li</code> 태그를 사용하여 기술됨</li>
            <li><index id="fullpagebox (태그)"/><code>fullpagebox</code> — 문구를 한 페이지를 비우고, 그 페이지의 중앙에 조판함. 반드시 <code>newpage</code> 태그가 직전에 쓰여야 함</li>
            <li><index id="btex (태그)"/><code>btex</code> — 스스로 닫는 태그. <btex/> 로고를 삽입함</li>
        </ul>
        <p>스스로 닫는 태그는 하위 내용을 담을 수 없다. 스스로 닫는 태그는, 예를 들어 tagname이라는 태그가 있으면, 다음과 같이 쓴다: <code>&lt;tagname/&gt;</code>.</p>


        <section>장·절 제목 스타일</section>

        <p>부와 장·절은 <code>type</code> 속성을 사용하여 번호가 찍히는 스타일을 지정할 수 있다. 지원하는 스타일은 다음과 같다.</p>
        <ul>
            <li><code>a</code> — 번호로 알파벳을 사용함 (a, b, c, …)</li>
            <li><code>A</code> — 번호로 알파벳 대문자를 사용함 (A, B, C, …)</li>
            <li><code>i</code> — 번호로 로마 숫자를 사용함 (i, ii, iii, …)</li>
            <li><code>I</code> — 번호로 로마 숫자 대문자를 사용함 (I, II, III, …)</li>
            <li><code>1</code> — 번호로 아라비아 숫자를 사용함 (1, 2, 3)</li>
        </ul>
        <p>기본값은, 부는 로마 숫자 대문자, 장·절은 아라비아 숫자를 사용한다. 부의 경우 영어로 “Part I”과 같이 찍히고, 이를 “제1절”로 변경하는 등의 심화된 스타일은 <a href="매크로 정의문">매크로 정의문</a>에서 정의할 수 있다.</p>


        <section>문단 스타일</section>

        <p><code>p</code>와 <code>callout</code> 태그는 <code>align</code> 속성을 지원한다. 지원하는 스타일은 다음과 같다.</p>
        <ul>
            <li><code>left</code> — 문단을 좌측정렬함</li>
            <li><code>right</code> — 문단을 우측정렬함</li>
            <li><code>center</code> — 문단을 중앙정렬함</li>
            <li><code>justify</code> — 문단을 양쪽정렬함. 기본값</li>
        </ul>
        <p><code>p</code>, <code>span</code>, <code>callout</code> 태그는 추가로 <code>class="code"</code> 속성을 지원한다. 이 속성이 적용된 문구는 <span class="code">코드꼴(code font)</span>을 사용하여 인자된다.</p>


        <section>하이퍼링크</section>

        <p><index id="하이퍼링크"/>하이퍼링크는 <code>index</code>와 <code>a</code> 태그를 사용하여 적용할 수 있다.</p>
        <ul>
            <li><index id="index (태그)"/><code>index</code> — 링크의 목적지를 정의함. 링크의 이름은 문서 전체에서 유일하여야 하며, <code>id</code> 속성에 작성함</li>
            <li><index id="a (태그)"/><code>a</code> — 태그 내부의 문구를 클릭 가능하게 함. 링크의 목적지는 (index 태그의 id) <code>href</code> 속성에 작성함</li>
        </ul>


        <section>그림</section>

        <p><index id="img (태그)"/>외부 이미지는 스스로 닫는 <code>img</code> 태그를 사용해 넣을 수 있다. 그림은 세로로는 현재 줄에서부터, 가로로는 페이지의 중앙에 인쇄된다. 페이지에 남아 있는 줄보다 이미지의 높이가 더 크다면, 이미지는 새로운 페이지에 인쇄된다. <code>img</code> 태그의 구조는 다음과 같다.</p>

        <callout align="left" class="code"><!--
    -->&lt;img src="http(s)나 file URL" height="8"/&gt;<br/><!--
    -->&lt;img fromgame="basegame:gui/small.png" height="4"/&gt;
        </callout>

        <p><code>height</code> 속성은 이미지의 높이를 <emph>픽셀 단위가 아닌 줄의 개수</emph>로 지정하어야 한다. 이미지의 너비는 자동으로 계산되며, 텍스트의 너비보다 넓다면 오류가 발생한다. 이미지 하단에 문구를 출력하려면 <code>caption</code> 속성을 사용할 수 있다.</p>

        <p>지원하는 이미지 포맷: JPEG·PNG·BMP·TGA</p>


        <chapter>색인 페이지</chapter>

        <p><index id="색인 페이지"/>색인 페이지의 내용은 원고를 읽어 자동으로 채워진다.
            문서에 사용된 모든 <code>index</code> 태그가 이 페이지에 인쇄된다. 색인 페이지의 구조는 다음과 같다.</p>

        <callout align="left" class="code"><index id="indexpage (태그)"/>&lt;indexpage title="색인 혹은 필요한 다른 제목"&gt;&zwsp;&lt;tableofindices/&gt;&zwsp;&lt;/indexpage&gt;
        </callout>

        <p><code>title</code> 속성은 색인 페이지의 장제목을 지정한다. 지정하지 않았으면 “Index”가 인자된다.</p>
        <p><code>&lt;tableofindices/&gt;</code> 태그는 조판 시스템이 내부적으로 사용하는 태그이다.</p>


        <chapter>문서 끝맺기</chapter>

        <p><btex/> 문서는 <code>btexdoc</code> 태그로 시작되었으니, 반드시 같은 태그로 끝나야 한다. <code>&lt;/btexdoc&gt;</code>을 써 넣어 문서를 마무리하자.</p>


        <chapter>마무리</chapter>

        <p><btex/>으로 작성된 최종 원고는 출판사에 도착한 후 인쇄가 시작된다. 원고에 오류가 없다면 주문한 부수대로 책이 인쇄되어 합리적인 영업일 내에 우편으로 배송된다. 즐거운 글쓰기가 되길!</p>



        <part type="1">고급 매크로</part>


        <chapter>매크로 정의문</chapter>

        <p><index id="매크로 정의문"/>여기서는 조판 시스템이 사용하는 태그를 설명하고, 이 태그를 조작하여 조금이나마 미리 정의된 스타일을 변경하는 법을 기술한다.</p>
        <p><index id="macrodef (태그)"/>매크로는 <code>cover</code> 앞에 <code>macrodef</code>태그를 두어 정의할 수 있다. 매크로 정의문의 구조는 다음과 같다.</p>

        <callout align="left" class="code">&lt;macrodef&gt;<br/><!--
-->　　&lt;pair key="매크로 이름" value="매크로 값"/&gt;<br/><!--
-->　　&lt;pair key="또다른 매크로" value="또다른 값"/&gt;<br/><!--
-->&lt;/macrodef&gt;</callout>


        <section>매크로 키</section>

        <p>내부적으로 부와 장 제목은 매크로를 사용하여 인자된다. 매크로의 값을 바꾸면 번호가 인자되는 스타일을 변경할 수 있다. 매크로의 이름과 기본값은 다음과 같다.</p>

        <ul>
            <li><index id="thepart (매크로)"/><code>thepart</code> — 부 제목 번호. 기본값: <code>Part %1$s</code></li>
            <li><index id="parttype (매크로)"/><code>parttype</code> — <code>part</code> 태그의 기본 스타일. 기본값: <code>I</code></li>
            <li><index id="thechapter (매크로)"/><code>thechapter</code> — 장 제목 번호. 기본값: <code>%1$s</code></li>
            <li><index id="chaptertype (매크로)"/><code>chaptertype</code> — <code>chapter</code> 태그의 기본 스타일. 기본값: <code>1</code></li>
            <li><index id="chapteronnewpage (매크로)"/><code>chapteronnewpage</code> — 새 페이지에서 장이 시작되게 하기. 활성화하려면 0이 아닌 임의의 값을 넣을 것. 기본값: <code>0</code></li>
            <li><index id="resetchapterafterpart (매크로)"/><code>resetchapterafterpart</code> — 부(part) 뒤에 오는 장번호가 1에서 시작되게 하기. 활성화하려면 0이 아닌 임의의 값을 넣을 것. 기본값: <code>0</code></li>
            <li><index id="parindent (매크로)"/><code>parindent</code> — 문단의 들여쓰기 크기를 조절함. 기본값: <code>16</code></li>
        </ul>

        <p>매개변수인 <code>%1$s</code>는 각 제목의 <code>type</code> 속성에 따라 적절한 숫자로 치환된다.</p>

        <p>이 매크로는 장제목을 원하는 언어의 스타일로 변경하는 데에 사용될 수 있다. 예를 들면 한국어 환경에서는 다음과 같은 정의가 바람직할 것이다.</p>

        <callout align="left" class="code">&lt;macrodef&gt;<br/><!--
-->　　&lt;pair key="thepart" value="제%1$s부"/&gt;<br/><!--
-->　　&lt;pair key="parttype" value="1"/&gt;<br/><!--
-->　　&lt;pair key="thechapter" value="%1$s장"/&gt;<br/><!--
-->&lt;/macrodef&gt;</callout>

        <chapter>외부 변수 인자하기</chapter>

        <p><index id="v (태그)"/>편지의 보내는 사람과 받는 사람과 같이 인자될 문구를 조판 시스템 외부에서 정의하는 것이 바람직한 경우가 있다. 이러한 문구는 스스로 닫는 <code>v</code> 태그를 사용하여 추가할 수 있다. 이 태그는 또한 게임 내에 정의된 문자열을 가져오는 데에 사용될 수도 있다.</p>
        <p>외부 변수를 인자하려면 <code>id</code> 속성을 사용하여야 한다. 게임 내 문자열을 가져오려면 <code>fromgame</code> 속성을 사용하라. 두 속성은 서로 상충되므로 하나의 속성만을 사용하여야 한다.</p>

        <section>게임 내 화폐 단위 인자하기</section>

        <p><index id="bucks (태그)"/>“총액: <bucks>1234</bucks>”와 같은 문구를 인쇄하려면 <code>bucks</code> 태그 내부에 <code>v</code> 태그를 넣어서 사용할 수 있다. 예시 코드는 다음과 같다.</p>

        <callout align="left" class="code">&lt;p&gt;총액: &lt;bucks&gt;&lt;v id="invoice_total_amount"/&gt;&lt;/bucks&gt;&lt;/p&gt;</callout>

        <p>외부변수 <code>invoice_total_amount</code>에 <code>너무많음</code>이라는 문자열이 선언되어 있다면, 위 코드는 “총액: <bucks>너무많음</bucks>”을 인쇄할 것이다.</p>


        <section>한국어 전용 태그</section>

        <p><index id="조사 처리"/><code>v</code> 태그의 조사 처리를 위해서는 아래의 태그를 사용할 수 있다. 조사 처리 태그는 <code>v</code> 태그처럼 변수를 인자하는데, 치환된 단어에 적절한 조사를 같이 붙여 인자한다.</p>

        <ul>
            <li><index id="veun (태그)"/><index id="vneun (태그)"/><code>veun</code> <code>vneun</code> — 은/는</li>
            <li><index id="vi (태그)"/><index id="vga (태그)"/><code>vi</code> <code>vga</code> — 이/가</li>
            <li><index id="veul (태그)"/><index id="vreul (태그)"/><code>veul</code> <code>vreul</code> — 을/를</li>
            <li><index id="vwa (태그)"/><index id="vgwa (태그)"/><code>vwa</code> <code>vgwa</code> — 와/과</li>
            <li><index id="vro (태그)"/><index id="veuro (태그)"/><code>vro</code> <code>veuro</code> — 로/으로</li>
        </ul>

        <p>태그 쌍 중에서는 아무거나 사용해도 무방하다. 어느 쪽이든 알맞는 조사를 추가할 것이다. 달리 말하면, <code>veun</code>과 <code>vneun</code>은 완전히 동일한 태그이다.</p>

        <p>이 태그들은 다음과 같은 상황에 쓰일 수 있다. 아래와 같은 <btex/> 문서가 있다면,</p>

        <callout align="left" class="code">[en] Send your &lt;v fromgame="GAME_ITEM_HOLOTAPE"/&gt; that contains the manuscript to the publisher via mail to have your books printed.<br/><!--
    -->[koKR] 원고가 담긴 &lt;veul fromgame="GAME_ITEM_HOLOTAPE"/&gt; 출판사로 우편을 통해 보내야 책이 인쇄됩니다.</callout>

        <p>변수는 현재 게임 언어에 따라 대입되고, 그 다음 조사처리가 진행된다. 조판이 완료된 문구는 다음과 같다. (파란색은 해당 단어가 태그에 의해 대입되었음을 뜻한다)</p>

        <callout>[en] Send your <itemname>Holotape</itemname> that contains the manuscript to the publisher via mail to have your books printed.<br/><!--
    -->[koKR] 원고가 담긴 <itemname>홀로테이프를</itemname> 출판사로 우편을 통해 보내야 책이 인쇄됩니다.</callout>


        <part>일반인 출입금지</part>

        <chapter alt="대기 프로세스">왜 책이 인쇄될 때까지 기다려야 하나요? 인쇄기를 직접 사용할 수는 없나요?</chapter>

        <p><btex/> 엔진은 빠른 물건이 아니다. 책을 하나 조판하려면 최소 몇 초가 필요하다. “대기 시스템”은 별도의 스레드 풀에서 (멀티스레딩으로 작동함) 책이 인쇄되도록 하여 게임플레이를 방해하지 않도록 도입되었다. 이것이 없다면 책이 한번 인쇄될 때마다 게임이 ‘응답 없음’ 상태가 될 것이고, 이는 인게임 경험에 매우 부정적으로 작용한다.</p>

        <p>인쇄 프로세스가 오류 없이 종료되었다면, 우편 시스템을 통해 플레이어에게 완성된 책을 배송한다. 오류가 있다면 오류 정보를 담은 우편이 대신 배송된다.</p>

        <p>상기와 같은 이유로 “인쇄기”는 플레이어에게 직접적으로 제공되지 않고, “출판사”와 우편을 통해 간접적으로 이용하는 형태로 제공된다.</p>


        <newpage/>

        <fullpagebox>
            <p><span colour="#666">이 페이지는 의도적으로 비워 두었습니다</span></p>
        </fullpagebox>

    </manuscript>

    <indexpage title="색인"><tableofindices/></indexpage>
</btexdoc>
