forked from YiHoze/HzGuide
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHzGuide.tex
More file actions
2898 lines (2199 loc) · 98.9 KB
/
HzGuide.tex
File metadata and controls
2898 lines (2199 loc) · 98.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
\documentclass[minted]{hzguide}
\setmainfont{NotoSerifCJKkr-Regular.otf}[BoldFont={NotoSerifCJKkr-Bold.otf}, ItalicFont={NotoSerif-LightItalic.ttf}] %https://github.com/googlefonts/noto-cjk
\setsansfont{NotoSansCJKkr-Regular.otf}[BoldFont={NotoSansCJKkr-Medium.otf}]
\setmonofont{D2Coding}[Scale=0.95]% \setmonohangulfont{NotoSansMonoCJKkr-Regular.otf}[Scale=0.95]
\LayoutSetup{
paper=A4,
column=vartwo,
ulmargin=25mm,
ulratio=1.5,
hook={\setheadfoot{10mm}{15mm}},
% showtrims,
% showlayout
}
\HeadingSetup{
cftsection,
chapterstyle=sparse,
cjkchapter,
chaptercolor=MidnightBlue,
sectionsize=\Large\color{MidnightBlue},
subsectionsize=\large\color{MidnightBlue},
sectionstyle={firm, rule},
paragraphstyle=indent,
linespacing=1.33,
}
\sloppy
\PageStyleSetup{
headrule=false,
headouter={},
evenfootleft={\thepage\quad |\qquad \leftmark},
oddfootright={\rightmark\qquad |\quad \thepage},
% sectionmark=true
}
\ThumbIndexSetup{
xoffset=0mm, toffset=50mm, boffset=50mm,
width=3em, height=2em, interval=5mm,
fgcolor=white, bgcolor=darkgray,
style=\sffamily\bfseries\LARGE\centering,
content=\thechapter
}
\makeatletter
\patchcommand{\@smemmain}{}{\ThumbIndexEnable} % \mainmatter*
\makeatother
\patchcommand{\printindex}{\ThumbIndexDisable\cleartoverso}{}
\ObjectSetup{align=\centering}
\RenewTerms{macros}{
labeltype=macro,
font=\ttfamily,
marker = {{},{}},
delimiter=\hfill,
labelwidth=4.75em,
leftmargin=5.35em,
}
\IndexingEnable*
\BoundedBoxSetup{
beforeskip=.75\onelineskip,
afterskip=.1\onelineskip,
style=\setSpacing{1.1}
}
\NewBoundedBox{example}{type=LeftBarBox, style=\sffamily\small}
\CodeSetup{
beforeskip=.5\onelineskip,
afterskip=0pt,
star={boxed=false}
}
\ExplSyntaxOn
\NewDocumentCommand \keyvalue { v }
{
\group_begin:
\ttfamily =~#1
\group_end:
\newline
}
\NewDocumentCommand \keyvalueTF {}
{
\texttt{=~true/false}\newline
}
\NewDocumentCommand \true {}
{
\texttt{true}
}
\NewDocumentCommand \false {}
{
\texttt{false}
}
\NewDocumentCommand \hzsource { s O{hzguide.cls} m m }
{
\bool_if:NTF \g_minted_bool
{
\IfBooleanTF {#1}
{
\inputminted[linenos=true, firstline=#3, lastline=#4]{latex}{#2}
}{
\hzsource_codebox:nnn {#2}{#3}{#4}
}
}{
\noindent\textcolor{red}{#2:~#3--#4}
}
}
\makeatletter
\cs_new:Npn \hzsource_codebox:nnn #1 #2 #3
{
\int_compare:nTF { \@listdepth > 0 }
{
\dim_set:Nn \l_tmpa_dim { .75\l_code_raise_offset }
}{
\dim_set:Nn \l_tmpa_dim { \l_code_raise_offset }
}
\begin{CodeBox}[beforeskip=\l_code_before_skip, afterskip=\l_code_after_skip]
\vspace{\l_tmpa_dim}\mbox{}
\l_code_fontsize_tl
\inputminted[linenos=true, firstline=#2, lastline=#3]{latex}{#1}
\end{CodeBox}
}
\makeatother
\NewDocumentCommand \hzsourceline { o }
{
\IfValueTF { #1 }
{
\int_gset:Nn \g_tmpa_int { #1 }
}{
\int_gincr:N \g_tmpa_int
}
\hzsource*{\int_use:N \g_tmpa_int}{\int_use:N \g_tmpa_int}
}
\NewDocumentCommand\button{m}{
\raisebox{-0.35ex}{
\tikz\node[
rectangle,
rounded~corners=2pt,
inner~sep=2pt,
minimum~height=11pt,
draw=darkgray,
fill=backgray,
font=\footnotesize\bfseries
]{#1};
}
}
\NewDocumentCommand\winkey{}{\button{\includegraphics{winkey.pdf}}}
\ExplSyntaxOff
\DecolorHyperlinks[MidnightBlue]
\NewDocumentCommand\ptref{m}{\pageref{#1} 페이지 \titleref{#1}}
\AnnotateSetup{index, star={index=false}}
\CoverSetup{
AfterFront=\cleartorecto,
BeforeBack=\cleartoverso,
title={HzGuide},
subtitle={테크니컬 라이터를 위한 레이텍 클래스},
ProductImage=cover_image.jpg,
DocumentType={사용 설명서},
PubYear=2022,
revision={2.0},
note={\hfill 미니멀리즘의 목표는 사용자에게 요구되는 수고를 최소화하는 것이다.},
manufacturer={\email{yihoze@gmail.com}},
address={수원 광교}
}
\begin{document}
\frontmatter*
\FrontCover
% \begin{IfVartwoEnlarge}
\TableOfContents
\ListOfFigures
% \end{IfVartwoEnlarge}
\chapter{머리말}
\begin{flushright}
\url{https://github.com/YiHoze/HzGuide}
\end{flushright}
\noindent 나는 테크니컬 라이터로서 내게 필요한 것들을 HzGuide 클래스에 만들어 넣었다.
memoir 클래스와 expl3 문법에 친숙한 사용자는, 그런 사용자가 HzGuide 클래스를 사용할 리 없겠지만, 이 문서를 이해하는 데에 어려움이 없을 것이다.
텍스트 에디터로 HTML 파일을 읽는 것은 불가능하지 않을지라도 매우 피곤한 일이다.
텍 문서가 그와 같이 복잡하다면 글을 쓰는 것은 물론이고 고치는 것도 고역이다.
모든 레이텍 사용자들이 지향하듯이 나 역시 ``판독하기 쉬운 텍 문서''를 만드는 것을 목표로 매크로들을 만들었다.
\begin{code}
\begin{figure}
\frame{\includegraphics[scale=1.25]{foo.jpg}}
\caption[그림 차례에 들어가는 짧은 설명]{긴 설명}
\label{foo}
\end{figure}
\end{code}
\noindent 이를테면 아래 코드로 위의 것과 동일한 결과를 얻을 수 있다.
\begin{code}
\image*[scale=1.25]{foo}(긴 설명)<짧은 설명>
\end{code}
일반적으로 설명서에서 그림과 차례에 캡션을 붙이지 않는다.
다른 종류의 문서들에 비해 설명서가 더 많은 이미지들을 포함하기 때문에 떠다니는 \texttt{figure} 환경이 사용하기에 도리어 부적합하다.
하지만 그런 것들이 필요한 경우에 대응할 수 있도록 \verb{\image} 명령이 설계되었다.
그 다음 목표는 ``제어하기 쉬운 문서''이다.
\verb{\image} 명령의 짝이 \verb{\ImageSetup}이다.
HzGuide 클래스에 정의된 많은 명령들이 그와 같은 쌍으로 이루어져 있다.
그 설정 명령들을 이용하여 문서 전체에 걸쳐 이미지 크기를 비롯한 스타일들을 손쉽게 변경할 수 있다.
그와 같은 목표 아래 매크로를 생성하는 매크로들이 있다.
\verb{\NewTerm}, \verb{\NewTerms}, \verb{\NewBoundedBox} 그리고 \verb{\NewConditionals}가 명령 또는 환경들을 만드는 명령들이다.
\verb{\NewTerm} 명령의 목적 중 하나가 번역에 있다.
한 문서에 포함된 텍스트는 번역의 관점에서 세 가지로 나뉜다.
번역되어야 할 텍스트, 번역되지 않아야 할 텍스트, 이미 정해진 것으로 바뀌어야 할 텍스트.
리모컨 버튼들이 번역되지 않아야 할 텍스트이다.
스타크래프트 Ⅰ의 한국어 버전에서 ``marine''이 ``마린''이었는데, 스타크래프트 Ⅱ에서는 ``해병''으로 바뀌었다.
번역자는 사용자 인터페이스에 사용되는 것들을, 설령 그것이 부적절할지라도, 따라야 한다.
번역자가 번역해야 할 텍스트와 하지 않아야 할 텍스트를 식별할 수 있도록 다음과 같은 꼬리표가 필요하다.
\begin{code}
\invariable{Volume} \predefined{Marine}
\end{code}
전자 문서가 보편화되면서 진부해진 것들이 있다.
장\annotate*{chapter}이 오른 페이지에서 시작되는 것과 같은 일반적인 조판 관행에 텍 사용자들은 시나브로 익숙해지지만, 인쇄를 전제로 하지 않는 문서들이 점점 많아지면서 빈 페이지를 문서의 자연스러운 일부로 받아들이지 않는 독자들이 늘어나고 있다.
PDF 뷰어의 북마크와 검색 기능 때문에 면주와 색인은 더 이상 독자들에게 긴요한 장치로 간주되지 않는다.
같은 이유로, 내가 처음 만들 때 의도했던 것과는 달리, HzGuide 클래스에 정의된 여러 매크로들 중 일부는 이제 장식에 가까운 것이 되었다.
\ref{sec:layout} 절에서 소개하는 변이단 조판에 내가 집착했던 이유는 가장 이상적인 글줄 길이인 12 센티미터를 고수하기에 A4 종이가 너무 컸기 때문이다.
하지만 이제 종이 크기나 글자 크기는, 적어도 대부분의 나의 의뢰인들에게는, 그다지 문젯거리가 아니다.
독자들은 저마다 편한 크기로 페이지를 확대하거나 축소해서 볼 수 있다.
장 차례와 워터마크와 반달 색인이 비슷한 이유로 거의 쓸모를 잃었다.
나는 실제 프로젝트에서 더 이상 변이단을 사용하지 않는다.
하지만 HzGuide로 할 수 있는 것들을 가급적 많이 보여주기 위하여 이 문서에 변이단을 사용하였다.
그리고 색인도 추가하였다.
색인이 예외적으로 필요한 문서가 바로, \textit{The \LaTeX3 Interfaces}\annotate*{expl3}처럼, 많은 매크로를 포함하는 레이텍 문서이다.
HzGuide 클래스는 expl3로 작성되었다.
처음부터 클래스 작성을 목표로 한 것은 아니었다.
잡다한 서너 패키지들을 만들었고, 정확히 언제인지 기억하지 못하지만 그것들을 합쳐서 클래스로 만들었다.
그리고 2015 년에 expl3를 이용하여 새로 작성하였다.
expl3가 아니었다면 매크로를 생성하는 매크로들을 만들 엄두를 내지 못했을 것이다.
\bigskip
\begin{flushright}
이 호재
\end{flushright}
\mainmatter*
\chapter{개요}
HzGuide는 \term{memoir}에 기반하여 \term{테크니컬 라이터}\annotate{technical writer}의 설명서 작성을 돕기 위한 목적으로 만들어진 레이텍 클래스이다.
\section{클래스 옵션}
memoir 클래스 옵션들과 함께 다음 옵션들을 사용할 수 있다.
\begin{code}
\documentclass[language=japanese, styleset=../foo.tex, Noto]{hzguide}
\end{code}
\begin{macros}<hzguide>
\item[language] \keyvalue{korean, english, chinese, TC, czech, danish, dutch, finnish, german, italian, japanese, norwegian, polish, portugeue, russian, slovakian, spanish, swedish, turkish }
영어는 \texttt{language=english} 대신 \texttt{english}로 지정할 수 있다.
디폴트는 \macro{korean}이다.
\macro{chinese}는 \term{간체}\annotate{简体}, \macro{TC}는 \term{번체}\annotate{繁體}이다.
언어에 따라 \macro{polyglossia} 또는 \macro{xeCJK} 패키지가 호출된다.
\item[property] \keyvalue{foo, ...}
주어진 문서 속성들이 \macro{\DocumentSetup}에 전달된다.
\ptref{sec:conditional_text}\를 보라.
\item[styleset] \keyvalue{foo.tex}
지정된 공통 설정 파일을 불러들인다.
문서들 사이에 일관성을 유지하려면 \term{전제부}\annotate{preamble}에서 선언되는 설정들을 하나의 파일에 담아 여러 문서에 공통으로 사용해야 한다.
이 옵션의 실제는 \macro{\input} 명령의 실행에 불과하나, 설정 파일을 클래스 옵션으로서 명시함으로써 문서의 정체성을 확인하는 데에 이것의 목적이 있다.
\item[packageset] \keyvalue{packages.tex}
특정한 순서로 패키지들을 가져와야 하는 예외적인 경우를 위해 이 옵션이 고안되었다.
예를 들어 전제부에 다음과 같이 선언하면 HzGuide에 의해 kotex이 이미 올라온 뒤에 bidi가 읽힌다.
그것은 공백 없이 영어 텍스트와 이어진 한글이 식자되지 않는 문제를 일으킨다.
다음과 같이 packages.tex을 작성하고 \macro{packageset} 옵션에 지정하면, 이 패키지들이 kotex보다 먼저 올라온다.
\begin{code}
\usepackage{stackengine}
\usepackage{ulem}
\usepackage{bidi}
\end{code}
\item[Noto] \keyvalueTF
Noto 폰트가 사용된다.
\item[minted] \keyvalueTF
\macro{minted} 패키지가 사용된다. \macro{\coderead} 명령이 \macro{\verbatiminput} 대신 \macro{\inputminted}를 사용하게 된다.
\item[template] \keyvalueTF
\term{hztemplate.tex}을 불러들인다. 설명서 초안을 만들기 위한 목적으로, 설명서에 사용되는 여러 요소들을 예시하는 명령들을 제공한다.
\ptref{chp:template}\을 보라.
\end{macros}
\section{공통 설정 파일}
공통 설정 파일을 작성할 때, 폰트나 다른 이유로, 텍 엔진이나 문서의 언어에 따라 설정을 달리해야 하는 경우가 있다.
다음 명령들이 그런 경우에 도움이 될 것이다.
\begin{code}
\IfXetex{ TRUE }[ FALSE ]
\IfLuatex{ TRUE }[ FALSE ]
\ifLang{언어}{ TRUE }[ FALSE ]
\begin{IfLanguage}{언어} \end{IfLanguage}
\end{code}
\macro{\IfXetex}은 현재 문서가 \term{지텍}\annotate{XeTeX}에 의해 컴파일될 때, \macro{\IfLuatex}은 \term{루아텍}\annotate{LuaTeX}이 사용될 때 유효하다.
\begin{code}
\documentclass[language=german]{hzguide}
\ifLang{german}{ … }
\begin{IfLanguage}{german} … \end{IfLanguage}
\end{code}
\macro{\ifLang} 명령과 \macro{IfLanguage} 환경은 \macro{\NewConditionals} 명령에 의해 만들어졌다.
이 매크로들의 보다 자세한 사용법에 대해 \ptref{sec:conditional_text}\를 보라.
두 가지 이상의 문서에 공용으로 사용해야 하는 부가적인 설정 파일을 만들어야 하는 경우에, 그 파일을 서로 다른 폴더에서 읽어야 한다면, 다음과 같은 명령이 유용할 수 있다.
\begin{code}
\NewDocumentCommand \styleinput { m }
{
\IfFileExists{ ../#1 }
{
\input{../#1}
}{
\IfFileExists{ #1 }{ \input{#1} }{}
}
}
\styleinput{common.tex}
\end{code}
이 명령은 지정된 파일을 상위 폴더에서 찾고 없으면 현재 폴더에서 찾아서 가져올 것이다.
\section{다국어 문서}
인쇄나 다른 이유로 여러 언어로 번역된 PDF 문서들을 하나로 합쳐야 할 때, 각 문서에 그 문서의 언어를 나타내는 북마크를 추가하는 것이 유용할 것이다.
\begin{code}
\NewDocumentCommand \BookmarkLanguage { m O{-1} }
{
\bookmark[level=#2, page=1]{#1}
}
\BookmarkLanguage{ENGLISH}
\end{code}
\ChapterContentsEnable
\chapter{페이지 모양과 문서 구조}
\section{판형}
\label{sec:layout}
\macro{\LayoutSetup} 명령을 이용하여 판면과 여백을 설정할 수 있다.
\begin{code}
\LayoutSetup{
paper=A4,
column=vartwo
}
\end{code}
\begin{macros}<\LayoutSetup>
\item[paper] \keyvalue{A3, A4, A5, A5V, letter, B5, JB5, slide, arbitrary}
종이 크기들은 다음과 같다.
\begin{macros}*
\item[A3] 297 × 420 mm
\item[A4] 210 × 297 mm
\item[A5] 148 × 210 mm
\item[A5V] 152 × 225 mm \\ 이것은 \term{신국판}이다.
\item[letter] 8.5 × 11 in (215.9 × 279.4 mm)
\item[B5] 176 × 250 mm
\item[JB5] 182 × 257 mm \\ 이것은 JIS의 B5 크기이며 흔히 \term{사륙배판}이라고 불린다.
\item[slide] 9 × 6 in (228.6 × 152.4 mm)
\end{macros}
일반적인 규격에서 벗어나는 판형을 만들려면 \macro{arbitrary}를 지정하고, 아래 옵션들을 적절하게 설정하라.
\item[stockwidth] \keyvalue{250mm}
인쇄 용지의 폭. 재단선이나 반달 색인을 표시해야 할 때 페이지보다 넓은 크기가 지정되어야 한다.
\item[stockheight] \keyvalue{353mm}
인쇄 용지의 높이
\item[paperwidth] \keyvalue{210mm}
페이지 폭
\item[paperheight] \keyvalue{297mm}
페이지 크기
\item[landscape] \keyvalueTF
페이지가 가로 방향으로 바뀐다.
\item[column] \keyvalue{one, vartwo}
\macro{vartwo}를 지정하면, 이 문서와 같이, \term{변이단}\annotate{變二段}으로 조판된다.
\item[ulmargin] \keyvalue{36mm}
상단 여백
\item[ulratio] \keyvalue{1.0}
하단 여백을 결정할 배율을 지정하라. ``2''를 지정하면 하단 여백이 상단 여백의 두 배가 된다.
\item[lrmagin] \keyvalue{35mm}
좌우 여백
\item[vartwomargin] \keyvalue{20mm}
변이단으로 조판할 때 오른쪽 여백. 왼쪽 여백은 오른쪽 여백의 세 배가 된다.
\item[showtrims] \keyvalueTF
재단선이 표시된다.
그림 \ref{trims_layout}\을 보라.
\item[showlayout] \keyvalueTF
이 옵션은 \macro{\ShowPageLayout} 명령을 호출하여 여백 영역과 텍스트 영역의 테두리에 선을 그린다.
그림 \ref{trims_layout}\을 보라.
\item[hook]
\keyvalue{\setheadfoot{0mm}{5mm}}
이 예와 같은 구획 명령을 이 설정에 끼워 넣을 수 있다.
\end{macros}
\image[float, scale=0.5]{trims_layout}(이 문서의 레이아웃)
변이단에서 사용할 수 있는 \macro{IfVartwoEnlarge} 환경은 주어진 길이 만큼 글줄의 폭을 왼쪽 여백으로 확장한다.
디폴트는 \verb{\marginparwidth}와 \verb{\marginparsep}의 합이다.
\begin{code}
\begin{IfVartwoEnlarge}[폭] \end{IfVartwoEnlarge}
\IfVartwo{ TRUE }[ FALSE ]
\end{code}
\macro{\IfVartwo} 명령은 클래스 내부에서 여러 명령들의 작동을 제어한다.
\section{면주}
\macro{\PageStyleSetup} 명령을 이용하여 면주 모양을 변경할 수 있다. \macro{\LayoutSetup} 명령이 이 명령을 이용한다.
\begin{code}
\PageStyleSetup{
headrule=true,
evenheadleft=\leftmark,
oddheadright=\rightmark,
evenfootleft=\thepage,
oddfootright=\thepage,
chaptermark=true,
sectionmark=true,
}
\end{code}
\begin{macros}<\PageStyleSetup>
\item[font] \keyvalue{\rmfamily\small}
폰트
\item[headleft] \keyvalue{\leftmark, \rightmark, \thepage, 텍스트}
상단 왼쪽
\item[headcenter] 상단 가운데
\item[headright] 상단 오른쪽
\item[headinner] 상단 안쪽 (왼쪽 페이지의 오른쪽과 오른쪽 페이지의 왼쪽)
\item[headouter] 상단 바깥쪽 (왼쪽 페이지의 왼쪽과 오른쪽 페이지의 오른쪽)
\item[footleft] 하단 왼쪽
\item[footcenter] 하단 가운데
\item[footright] 하단 오른쪽
\item[footinner] 하단 안쪽
\item[footouter] 하단 바깥쪽
\item[evenheadleft] 왼쪽 페이지의 상단 왼쪽
\item[evenheadcenter] 왼쪽 페이지의 상단 가운데
\item[evenheadright] 왼쪽 페이지의 상단 오른쪽
\item[oddheadleft] 오른쪽 페이지의 상단 왼쪽
\item[oddheadcenter] 오른쪽 페이지의 상단 가운데
\item[oddheadright] 오른쪽 페이지의 상단 오른쪽
\item[evenfootleft] 왼쪽 페이지의 하단 왼쪽
\item[evenfootcenter] 왼쪽 페이지의 하단 가운데
\item[evenfootright] 왼쪽 페이지의 하단 오른쪽
\item[oddfootleft] 오른쪽 페이지의 하단 왼쪽
\item[oddfootcenter] 오른쪽 페이지의 하단 가운데
\item[oddfootright] 오른쪽 페이지의 하단 오른쪽
\item[headrule] \keyvalueTF
상단 가로선
\item[footrule] \keyvalueTF
하단 가로선
\item[chaptermark] \keyvalueTF
\macro{\chaptermark} 명령이 활성화된다.
\item[sectionmark] \keyvalueTF
\macro{\sectionmark} 명령이 활성화된다.
\item[markdelimiter] \keyvalue{\quad}
주어진 문자가 장절 번호와 제목 사이에 삽입된다.
\item[chapterpage] \keyvalueTF
상단 면주가 장 페이지에도 적용된다.
\end{macros}
\section{장, 절, 문단}
\macro{\HeadingSetup} 명령을 이용하여 장과 절 제목의 모양을 그리고 문단 모양을 변경할 수 있다.
\begin{code}
\HeadingSetup{
linespacing=1.25,
chapterfont=\normalfont\bfseries,
sectionsize=\Large\color{MidnightBlue},
paragraphstyle=indent
}
\end{code}
\begin{macros}<\HeadingSetup>
\item[linespacing] \keyvalue{1.25}
줄 간격. 이것은 \macro{\baselinestretch}를 설정하는 것과 같다.
\item[article] \keyvalueTF
면주가 단순해지고 차례 표제가 절 수준으로 바뀐다.
이것은 memoir의 \macro{aritcle} 클래스 옵션과 무관하다.
\item[cftsection] \keyvalueTF
차례 표제가 절 수준으로 바뀐다.
\item[chapterwider] \keyvalueTF
변이단 조판에서 장 제목가 왼쪽 여백에서 시작되게 한다.
\item[chapterstyle] \keyvalue{tight, sparse}
장 스타일. 이것은 \macro{\chapterstyle}를 설정하는 것과 같다.
그러나 memoir 클래스에 정의된 여러 장 스타일들 가운데 일부에 대해서만 아래 옵션들이 유효할 것이다.
\macro{tight} 스타일은 디폴트에서 줄 간격을 줄인 것에 불과하다.
\macro{veelo} 같은 스타일을 이용하려면, \macro{\printerchaptername}을 비롯한 여러 매크로들을 재정의해야 한다.
\item[cjkchapter] \keyvalueTF
한국어에 대해서는 ``제\,1\,장''이, 중국어와 일본어에 대해서는 ``第\,1\,章''이 식자된다.
\item[chapteralign] \keyvalue{\raggedleft, \centering, \raggedright}
장 제목의 정렬
\item[chapterfont] \keyvalue{\normalfont\bfseries}
장 제목의 폰트
\item[chaptercolor] \keyvalue{black}
장 제목의 색
\item[chapternamesize] \keyvalue{\huge}
장 이름의 크기
\item[chapternumbersize] \keyvalue{\HUGE}
장 번호의 크기
\item[chaptertitlesize] \keyvalue{\Huge}
장 제목의 크기
\item[nochaptername] \keyvalueTF
장 이름이 식자되지 않는다. ``제''도 식자되지 않는다.
\item[chaptercontents] \keyvalueTF
장 제목 아래에 장 차례가 만들어진다.
\item[sectionstyle] \keyvalue{firm, sparse, tight, multiline, rule}
절 스타일. \macro{multiline}은 변이단 조판에서 절 제목의 둘째 줄이 들여쓰기 되는 것을 방지한다.
두 가지 옵션을 함께, 이를테면 \macro{multiline}과 \macro{rule}을 동시에 지정할 수 있다.
\item[sectionalign] \keyvalue{\raggedleft, \centering, \raggedright}
절 제목의 정렬
\item[sectionfont] \keyvalue{\normalfont\bfseries}
절 제목의 폰트
\item[sectionsize] \keyvalue{\Large}
절 제목의 크기
\item[subsectionsize] \keyvalue{\large}
하위 절 제목의 크기
\item[subsubsectionsize] \keyvalue{\normalsize}
최하위 절 제목의 크기
\item[paragraphstyle] \keyvalue{interval/indent}
절 모양. 디폴트는 \macro{interval}이다. 이것은 들여쓰기 없이 문단 사이를 띄운다.
설정에 따라 목록들의 항목 간격도 함께 조정된다.
\item[parskip] \keyvalue{0.25\onelineskip}
문단 간격. \macro{paragraphstyle} 옵션에 \macro{interval}을 지정했을 때 이 값이 유효하다.
\item[parindent] \keyvalue{1em}
들여쓰기 크기. \macro{paragraphstyle} 옵션에 \macro{indent}를 지정했을 때 이 값이 유효하다.
\end{macros}
\section{차례와 북마크}
``차례''가 차례에 포함되어 있는 것은 군더더기처럼 보인다.
별표가 붙은 \macro{\tableofcontents*}는 ``차례''를 차례에 넣지 않지만, 북마크에도 차례가 추가되지 않는다.
\begin{code}
\TableOfContents[줄 간격]
\TableOfContents*[1.1]
\ListOfFigures[줄 간격]
\end{code}
\macro{\TableOfContents} 명령은 ``차례''를 차례에 넣지 않는 대신 북마크에 차례를 추가한다.
이 명령에 줄 간격을 선택적으로 지정할 수 있다.
별표가 붙은 \macro{\TableOfContents*}는 \macro{\tableofcontents}와 동일하다.
\macro{\ListOfFigures} 명령을 같은 방법으로 사용할 수 있다.
\section{장 차례}
설명서에서 장 차례가 필요한 부분이 ``\term{문제 해결하기}''\annotate{troubleshooting}이다.
\macro{\HeadingSetup}에 \macro{chaptercontents} 옵션을 지정하면 \macro{\ChapterContentsEnable} 명령이 호출된다.
\begin{code}
\ChapterContentsEnable[장 번호](절 수준)
\ChapterContentsDisable
\end{code}
장 번호 없이 \macro{\ChapterContentsEnable}을 선언하면 모든 장에 장 차례가 만들어진다.
장 번호를 지정하면 그 장에만 차례가 만들어진다.
절 수준에 ``3''을 지정하면 최하위 절\annotate*{\string\subsubsection}까지 장 차례에 포함된다.
디폴트는 ``2''\annotate*{\string\subsection}이다.
아래 예와 같이 \macro{\ChapterContentsDisable} 명령을 함께 사용하면 장 차례가 만들어져야 할 장의 범위를 지정할 수 있다.
\begin{code}
\ChapterContentsEnable
\chapter{troubleshooting}
…
\chapter{Frequently Asked Questions}
…
\ChapterContentsDisable
\chapter{Warranty}
\end{code}
\section{절 앞에서 쪽 나누기}
모든 절이 새 페이지에서 시작하는 것은 대개 바람직하지 않지만, 일정한 양식이 반복되는 \term{참조 설명서}\annotate{reference manual}에서는 독자에게 오히려 도움이 될 수 있다.
\begin{code}
\SectionNewpageOn*
\SectionNewpageOff
\SubsectionNewpageOn
\SubsectionNewpageOff
\end{code}
\macro{\SectionNewpageOn} 명령이 주어지면 \macro{\SectionNewpageOff} 명령을 만날 때까지 각 장에서 둘째 절 이후의 모든 절 앞에서 쪽 나눔이 일어난다.
\macro{\SectionNewpageOn*} 명령은 첫째 절조차 다음 페이지로 넘긴다.
\macro{\SubsectionNewpageOn}과 \macro{\SubsectionNewpageOff} 명령들도 같은 방식으로 작동한다.
\section{사용자 행동}
하나의 \term{사용자 업무}\annotate{user task}는 하나 이상의 사용자 행동이 연결되어 달성된다.
소프트웨어 제품에서, 특히 모바일 앱에서, 매우 다양한 기능들이 일련의 단순한 조작으로 작동한다.
아래 예와 같은 설명은 ``목적''과 ``방법'' 또는 ``심리적 행동''과 ``물리적 행동''으로 이루어져 있다.
\begin{example}
\vspace*{-1.5\onelineskip}
\paragraph{Turn iPhone on.} Press and hold the Sleep/Wake button until the Apple logo appears.
\paragraph{Unlock iPhone.} Press either the Sleep/Wake or Home button, then drag the slider.
\end{example}
\noindent 이와 같은 단락을 만드는 데에 \macro{\paragraph} 명령이 충분하지만, 자유롭게 스타일을 변경할 수 있도록 \macro{\action} 명령이 고안되었다.
\begin{code}
\ActionSetup{옵션}
\action{목적 텍스트}
\end{code}
\macro{\ActionSetup} 명령으로 다음 옵션들을 변경할 수 있다.
\begin{macros}<\ActionSetup>
\item[beforeskip] \keyvalue{0.5\hzparksip}
단락 위 간격
\item[afterskip] \keyvalue{-\hzparksip}
단락 아래 간격. \macro{inline} 옵션이 \true이면 이 간격이 무시된다.
\item[font] \keyvalue{\bfseries}
폰트
\item[delimiter] \keyvalue{:, \quad}
구획 문자.
\item[inline] \keyvalueTF
이 옵션이 \false이면 방법 설명이 다음 줄에서 시작한다.
\end{macros}
이 단락들은 외형적으로 목록과 흡사하다.
하지만 이것들은, 각 단락의 \term{화제}\annotate{topic}가 서로 다르기 때문에, 목록이 될 수 없다.
\section{워터마크}
\macro{\watermark} 명령을 이용하여 \term{워터마크}를 삽입할 수 있다.
\begin{code}
\watermark{
x=15, y=150,
fontsize=45, color=yellow, rotate=-90,
text={WATERMARK}
}
\end{code}
\codeinput
워터마크를 없애려면 \macro{\watermark}가 선언된 페이지로부터 적어도 1 페이지 뒤에서 \macro{\ClearWatermark} 명령이 주어져야 한다.
\begin{code}
\WatermarkSetup{옵션}
\watermark{옵션}
\ClearWatermark
\end{code}
\macro{\WatermarkSetup} 명령으로 변경할 수 있는 옵션들은 다음과 같다.
\begin{macros}<\WatermarkSetup>
\item[x] \keyvalue{10}
x 좌표. 단위는 밀리미터이다.
\item[y] \keyvalue{10}
y 좌표
\item[color] \keyvalue{blue}
색
\item[font] \keyvalue{\sffamily}
폰트
\item[fontsize] \keyvalue{45}
폰트 크기. 단위는 포인트이다.
\item[rotate] \keyvalue{90}
기울기. 1 사분면에서 반시계 방향으로 주어진 각도만큼 회전한다.
\item[text] \keyvalue{텍스트}
워터마크 텍스트
\item[image] \keyvalue{이미지 파일}
\macro{text} 옵션과 \macro{image} 옵션이 동시에 설정된다면, 앞서 주어진 옵션이 무시된다.
\item[scale] \keyvalue{1.0}
주어진 배율만큼 이미지가 확대되거나 축소된다.
\end{macros}
\section{반달 색인}
\macro{\ThumbIndexEnable} 명령을 이용하여 장 번호나 제목을 \term{반달 색인}\annotate{thumb index}에 넣을 수 있다. 이 명령은 반달 색인을 오른 페이지에 만든다.
\begin{code}
\ThumbIndexSetup{옵션}
\ThumbIndexEnable
\ThumbIndexDisable
\end{code}
이 기능은 \macro{\chaptermark} 명령을 이용하기 때문에 \verb{\chapter} 명령이 주어지지 않으면 발효되지 않는다.
이 문서는 다음과 같이 설정되었다.
\hzsource[hzguide.tex]{38}{48}
\macro{\ThumbIndexSetup} 명령을 이용하여 반달 색인의 스타일을 바꿀 수 있다.
위치나 크기 옵션에 밀리미터 단위로 값을 지정하는 것이 좋다.
주어진 값들로부터 밀리미터 단위로 변환하여 좌표를 구하기 때문에 그리고 이 과정에서 소수점 이하가 버려지기 때문에 정확한 계산을 기대하기 어렵다.
\begin{macros}<\ThumbIndexSetup>
\item[xoffset] \keyvalue{0mm}
반달 색인이 바깥쪽으로 돌출되는 크기. 그림 \ref{trims_layout}\을 보라.
\item[toffset] \keyvalue{30mm}
첫 장에서 반달 색인의 y 좌표. 엄밀히 말해 이것은 페이지 상단으로부터 띄어야 하는 최소 거리이다.
\item[boffset] \keyvalue{30mm}
페이지 하단으로부터 띄어야 하는 최소 거리
\item[interval] \keyvalue{5mm}
앞 장의 반달 색인과 뒷 장의 반달 색인 사이의 간격
\item[width] \keyvalue{3em}
박스 폭
\item[height] \keyvalue{2em}
박스 높이
\item[fgcolor] \keyvalue{white}
글자 색
\item[bgcolor] \keyvalue{gray}
박스 색
\item[style] \keyvalue{\bfseries\centering}
폰트와 정렬
\item[vertical] \keyvalueTF
박스가 세로 방향으로 회전한다.
\item[content] \keyvalue{\thechapter}
장 제목를 표시하는 방법에 대해 아래 예를 보라.
\end{macros}
\begin{code}
\ThumbIndexSetup{
xoffset=12.1em, toffset=30mm, boffset=60mm,
width=15em, height=2.5em, interval=5mm,
fgcolor=white, bgcolor=darkgray,
style=\sffamily\bfseries\Large,
content=\quad\leftmark,
vertical=true
}
\end{code}
\ClearWatermark
\chapter{그림과 표}
\noindent 다른 종류의 문서들에 비해 설명서가 갖는 두드러진 특징들 중 하나는 그림과 표를 많이 포함한다는 것이고 그래서 그것들의 배치를 텍에 맡겨 놓기 곤란하다는 것이다.
\section{문단 사이에 이미지}
\macro{\image} 명령이 그림을 문단 사이에 둔다.
\begin{coderesult}
\image[scale=0.5]{uncertain}
(초고에서 그림 자리를 보여주기 위한 이미지)<초고 이미지>
\end{coderesult}
\begin{code}
\image*|[옵션]{이미지 파일}[다른 이미지 파일](캡션)<짧은 캡션>
\ImageSetup{옵션}
\end{code}
일반 출판물과 달리 설명서에서 그림은 보충적인 자료가 아니라 핵심적인 정보의 일부이기 때문에 \term{캡션}이 오히려 군더더기이다. 불가피한 경우에만 그림에 캡션을 붙여야 한다.
\begin{macros}<\ImageSetup>
\item[beforeskip] \keyvalue{\hznulldim, 0.5\onelineskip}
그림 위 간격.
값이 \macro{\hznulldim}이면 \macro{\ObjectSetup}으로 설정된 값이 사용된다.
\ptref{sec:object}\를 보라.
\item[afterskip] \keyvalue{\hznulldim, 0.5\onelineskip}
그림 아래 간격.
\item[gap] \keyvalue{1em}
다른 이미지 파일이 주어졌을 때 두 이미지 사이 간격
\item[align] \keyvalue{\raggedleft, \centering, \raggedright}
이미지 정렬
\item[float] \keyvalueTF
이 옵션은 이미지를 \macro{figure} 환경에 넣는다. 다시 말해 그림의 위치가 텍에 의해 결정된다.
\item[float-placement] \keyvalue{tbh}
figure 환경을 이용하는 경우에 위치 옵션
\item[frame] \keyvalueTF
이미지 테두리에 선이 그어진다.
\item[fitline] \keyvalueTF
이미지가 \macro{fitwidth}에 설정된 폭보다 크면 그에 맞게 줄어든다.
\item[fitwidth] \keyvalue{\linewidth}
이미지 폭
\item[flush] \keyvalueTF
변이단 조판에서 이미지가 왼쪽 여백으로 넘어간다.
\item[scale] \keyvalue{1.0}
주어진 배율만큼 이미지가 확대되거나 축소된다.
\item[landscape] \keyvalueTF
이미지가 90도 회전한다. 캡션도 함께 회전한다.
\item[middle] \keyvalueTF
이미지가 주어진 공간에서 세로로 중간에 놓인다.
\item[caption] \keyvalue{텍스트}
캡션. 파일 이름 따위를 나타내기 위한 목적으로 밑줄 문자(\_)를 사용할 수 있다.
\item[caption-short] \keyvalue{텍스트}
그림 차례에 들어가는 짧은 캡션
\item[caption-verb] \keyvalueTF
기호 문자들을 백슬래시 없이 그대로\annotate{verbatim} 캡션에 사용할 수 있다.
\item[caption-ignore] \keyvalueTF
캡션이 식자되지 않는다.
\item[caption-fit] \keyvalueTF
캡션의 폭이 이미지 폭에 맞춰진다.
\item[label] \keyvalue{텍스트}
상호참조를 위한 라벨. 달리 지정하지 않으면 이미지 파일의 이름이 라벨이 된다.
\item[legend] \keyvalueTF
캡션에 번호가 붙지 않는다.
\item[showfilename] \keyvalueTF
이미지 파일의 이름이 표시된다.
\item[fake] \keyvalueTF
\ptref{sec:fakeimage}\를 보라.
\item[star] \keyvalue{옵션}
이것은 기본 설정과 다른 작동을 허용하기 위한 목적으로 고안되었다.
주어진 옵션이 별표(*)가 붙은 \macro{\image*}에 적용된다.
\begin{code}
\ImageSetup{
frame=false, scale=1, landscape=false, …
star={frame=true, scale=0.5, …},
vbar={landscape=true, …}
}
\image{foo} \image*{foo} \image|{foo} \image*|{foo}
\end{code}
\item[vbar] \keyvalue{옵션}
\macro{star} 옵션과 마찬가지로, 주어진 옵션이 수직선(|)이 붙은 \macro{\image|}에 적용된다.
\end{macros}
\macro{\listimg} 명령은 목록 환경에서 이미지를 삽입하기 위해 고안되었다. \macro{\image} 명령을 위한 전역 설정들 가운데 \macro{scale}과 \macro{showfilename} 옵션만이 이 명령에 적용된다.
\begin{coderesult}
\begin{enumerate}
\item 이 명령의 주요 목적은 소프트웨어 설명서에서 어떤 조작에 따르는 결과를 보여주는 것이다.
\listimg{uncertains}
\item 윗 글줄과 이미지 사이의 간격을 옵션으로 지정할 수 있다.
\listimg[-1ex]{uncertains}
\end{enumerate}
\end{coderesult}
\macro{\listimg*}에 대해서는 \ptref{sec:fakeimage}\를 보라.
\subsection{번역사를 위한 이미지 대조}
소프트웨어 설명서를 번역할 때 가장 골치아픈 문제는 사용자 인터페이스 스크린샷들이다.
\begin{reference}
\ui{보안 형태} 옵션을 \ui{개인용}으로 설정한 경우에, 사용되는 암호화 방식을 선택하십시오. \\
If \ui{Security Type} is set to \ui{Personal}, select the security type in use.
\end{reference}
이 예에서, 번역사에게 넘기기 전에 ``보안 형태''를 ``Security Type''으로 바꾸어두는 것이 기술적으로 가능하고 가장 바람직하지만,
대개 제공된 문자열 대조표에서 번역사가 찾아 바꾸어야 한다.
엑셀로 작성된 문자열 대조표를 일일이 찾아보는 것은 번잡스럽고 헷갈린다.
별로 쓰일 것 같지 않지만, 번역사들에게 도움이 될까하여 실험적인 \macro{\mateimage} 명령이 고안되었다.
\begin{code}
\mateimage[옵션]{이미지 파일}
\MateSetup{옵션}
\end{code}
\macro{\mateimage}의 옵션은 \macro{\image} 명령에 전달된다.
\macro{\MateSetup}에 지정할 수 있는 옵션들은 다음과 같다.
\begin{macros}<\MateSetup>
\item[mate] \keyvalue{first, second, both}
\item[firstpath] \keyvalue{../images/kor/}
한국어 스크린샷 이미지들이 포함된 폴더
\item[secondpath] \keyvalue{../images/eng/}
영어 스크린샷 이미지들이 포함된 폴더
\end{macros}
\macro{mate}에 \macro*{both}가 설정되어 있을 때 \macro*{\mateimage{foo.png}}는 \macro*{../images/kor/foo.png}와 \macro*{../images/eng/foo.png}를 삽입한다.
파일 이름들이 서로 동일해야 한다.
\section{설명 딸린 이미지}
\macro{\illustimage} 명령 또는 \macro{IllustImage} 환경이 이미지와 설명문을 나란히 배치한다.
\begin{coderesult}
\begin{IllustImage}{uncertainm}
이 환경은 주어진 이미지에 대한 짧은 설명문을 곁에 두기 위한 목적으로 고안되었다.
\macro{wrapfigure} 환경과 달리, 글이 이미지 높이를 넘쳐도 이미지 아래로 흐르지 않는다.
\end{IllustImage}
\end{coderesult}
\begin{code}
\illustimage*^[옵션]{이미지 파일}(캡션){텍스트}
\begin{IllustImage}*^[옵션]{이미지 파일}(캡션)
설명문
\end{IllustImage}
\IllustImageSetup{옵션}
\end{code}
\begin{macros}<\IllustImageSetup>