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
|
%% !TEX program = lualatex
%% !TEX encoding = UTF-8
%%
%% luatexko-doc.tex
%%
%% written by Dohyun Kim <nomos at ktug org>
%% Soojin Nam <jsunam at gmail com>
%%
%% public domain
\documentclass[a4paper]{article}
\usepackage[hmargin=3.8cm]{geometry}
\usepackage[svgnames]{xcolor}
\usepackage{luacolor}
\usepackage[hangul]{luatexko}
\directlua{
fonts.protrusions.setups.notoserifcjk = {
[0x28] = { 0.5, 0 }, % (
[0x29] = { 0, 0.5 }, % )
[0x2C] = { 0, 1 }, % ,
[0x2E] = { 0, 1 }, % .
[0x3A] = { 0, 0.5 }, % :
[0x3B] = { 0, 0.5 }, % ;
[0xAB] = { 0.5, 0 }, % «
[0xBB] = { 0, 0.5 }, % »
[0x2018] = { 1, 0 }, % ‘
[0x2019] = { 0, 1 }, % ’
[0x201C] = { 0.5, 0 }, % “
[0x201D] = { 0, 0.5 }, % ”
}
fonts.protrusions.setups.notosanscjk = {
% compresspunctuations 가 이미 반각을 강제했으므로 여기선 0.5만 준다.
% +halt, +vhal 따위의 옵션이 주어진 때에도 마찬가지
[0x3001] = { 0, .5 },
[0x3002] = { 0, .5 },
[0xFF0C] = { 0, .5 },
[0xFF0E] = { 0, .5 },
[0xFE10] = { 0, .5 },
[0xFE11] = { 0, .5 },
[0xFE12] = { 0, .5 },
}
}
\defaultfontfeatures+{Renderer=HarfBuzz}
\setmainhangulfont{Noto Serif CJK KR}[
Scale=0.98,
AutoFakeSlant,
Script=Hangul,
Language=Korean,
UprightFont=* Light,
BoldFont=* Bold,
InterLatinCJK=.125em,
CompressPunctuations,
Expansion, Protrusion=notoserifcjk,
]
\setsanshangulfont{Noto Sans CJK KR}[
Scale=0.98,
Script=Hangul,
Language=Korean,
UprightFont=* DemiLight,
BoldFont=* Bold,
InterLatinCJK=.125em,
CompressPunctuations,
]
\setmonofont{Inconsolatazi4}[
Scale=0.98,
CharRaise=0.125ex,
Color=MidnightBlue,
]
\setmonohangulfont{Noto Sans CJK KR}[
Scale=0.98,
UprightFont=* DemiLight,
BoldFont=* Bold,
CharRaise=-.125ex,
Color=MidnightBlue,
]
\setmathhangulfont{Noto Sans CJK KR}
[
Script=Hangul,
Language=Korean,
SizeFeatures={
{Size=-6, Font=* Medium},
{Size=6-9, Font=* Regular},
{Size=9-, Font=* DemiLight},
},
]
\newhangulfontfamily\verticalhangulfont{Noto Sans CJK KR}[
Renderer=Node,
Script=Hangul,
Language=Korean,
UprightFont=* DemiLight,
BoldFont=* Bold,
InterLatinCJK=.125em,
Vertical=Alternates,
RawFeature=vertical,
CompressPunctuations,
InterCharStretch=1pt,
CharRaise=1pt,
CharacterWidth=Full,
Protrusion=notosanscjk,
]
\newhangulfontface\rubyfont{Noto Serif CJK KR Medium}[
Script=Hangul,
Language=Korean,
]
\usepackage{hologo}
\def\luatex{\hologo{LuaTeX}}
\def\XeTeX{\hologo{XeTeX}}
\usepackage[hidelinks]{hyperref}
\AddToHook{env/itemize/begin}{\small}
\AddToHook{env/verbatim/begin}{\linespread{1.1}}
\catcode`|=13 \protected\def|{\verb|\let\\=\textbackslash} %|
\def\nohyphen{\language\csname l@nohyphenation\endcsname}
\protected\def\cs#1{\texttt{\nohyphen \textbackslash\detokenize{#1}}}
\protected\def\pkgkwd#1#{\leavevmode
\ifx\relax#1\relax \expandafter\luatexkopkgkwd
\else \expandafter\luatexkopkgkwdX \fi}
\def\luatexkopkgkwd#1{\texttt{\nohyphen \string#1}\luatexkopkgkwdX{#1}}
\def\luatexkopkgkwdX#1{\marginpar{%
\hfuzz\maxdimen \texttt{\nohyphen \footnotesize \string#1}}}
\def\logoko{\textsf{k}\kern-.0625em\textit{o}}
\def\luatexko{\luatex-\logoko}
\def\texlive{\TeX\ Live}
\def\kotex{\logoko\kern-.1ex .\kern-.1667em \TeX}
\def\hemph#1{\textsf{\bfseries #1}}
\def\ldots{$\dots$}
\newenvironment{plaintex}{%
\par\bigskip
\begin{narrower}\small\parindent=0pt
\leavevmode\llap{\color{gray}plain \TeX\quad}\ignorespaces
}{
\par
\end{narrower}%
}
\widowpenalty5000
\clubpenalty5000
\begin{document}
\title{\luatexko\ 간단 매뉴얼}
\author{Dohyun Kim \normalsize |<nomos at ktug org>| \and
Soojin Nam \normalsize |<jsunam at gmail com>| \and
\normalsize <\url{http://github.com/dohyunkim/luatexko}>}
\date{Version 3.6\quad 2023/09/11}
\maketitle
\begin{quote}
For a summary introduction in English, please see |README| file.
\end{quote}
\smallskip
\section{부르기}\label{sec:loading}
\hemph{\texlive\ 2021 이상}{ \small (\luatex\ v1.12 이상)}을 사용해야 한다.
\luatexko\ 부르기: \cs{usepackage{luatexko}} 혹은 \cs{usepackage{kotex}}.%
\footnote{%
플레인텍에서는 \cs{input luatexko.sty} 혹은 \cs{input kotex.sty}. }
입력은 원칙적으로 UTF-8으로 한다.
BOM (Byte Order Mark)은 있어도 좋고 없어도 좋다.
CP949 인코딩에 관해서는 제\ref{sec:uhcencoding}절 참조.
\section{패키지 옵션}\label{sec:packageopt}
패키지 옵션으로 \pkgkwd{hangul}과 \pkgkwd{hanja}가 제공된다.%
\footnote{%
|[nofontspec]| 옵션은 v2.0부터 더는 제공되지 않는다. }
행간격 조정이 행해지며
장 제목이나 표·그림 캡션 따위가 한글 또는 한자 방식으로 표시된다.
장(chapter) 제목과 편(part) 제목에만 ``제(第)''가 붙어 ``제~1 편''
``제~3 장''과 같은 방식으로 표시되며 절 제목 이하에는 붙지 않는다.
\section{글꼴명령}\label{sec:fontcmds}
\luatexko를 부르면 fontspec 패키지도 자동 불러온다. 글꼴 설정은
fontspec 문서 참조.
한국어 글꼴을 위해 새로 마련한 명령은 다음과 같다.%
\pkgkwd*{\setmainhangulfont}%
\pkgkwd*{\setsanshangulfont}%
\pkgkwd*{\setmonohangulfont}%
\pkgkwd*{\newhangulfontfamily}%
\pkgkwd*{\newhangulfontface}%
\pkgkwd*{\addhangulfontfeature}%
\pkgkwd*{\hangulfontspec}
첫 두 줄, 즉 main/sans 글꼴들에는 |Ligatures=TeX| 옵션이 자동으로 주어진다.%
\footnote{%
\cs{adhochangulfont} \cs{adhochanjafont} \cs{addhocfallbackfont}는
마지막 줄 명령들의 다른 이름들이다. }
\begin{verbatim}
\setmainhangulfont \setmainhanjafont \setmainfallbackfont
\setsanshangulfont \setsanshanjafont \setsansfallbackfont
\setmonohangulfont \setmonohanjafont \setmonofallbackfont
\newhangulfontfamily \newhanjafontfamily \newfallbackfontfamily
\newhangulfontface \newhanjafontface \newfallbackfontface
\addhangulfontfeature \addhanjafontfeature \addfallbackfontfeature
\hangulfontspec \hanjafontspec \fallbackfontspec
\end{verbatim}
\begin{plaintex}
플레인텍에서 한글 글꼴 설정은 다음과 같이 할 수 있다:
\begin{verbatim}
\hangulfont=UnDotum\relax
\hanjafont="Noto Sans CJK KR" at 10pt
\fallbackfont=HanaMinA at 10pt
\end{verbatim}
v3.2부터는 한글폰트의 기본값으로 \hemph{은바탕}을 로드한다.
또한 다음 명령들도 제공한다:
\begin{verbatim}
\sethangulfont\taza=UnTaza at 12pt
\sethanjafont\dotum=UnDotum at 12pt
\setfallbackfont\noto={Noto Sans CJK KR} at 12pt
\end{verbatim}
그리하여 다음처럼 지시할 수 있게 된다:
\begin{verbatim}
\expandafter\def\expandafter\tt\expandafter{\tt\taza\dotum\noto}
\end{verbatim}
\end{plaintex}
\section{글꼴 대체}\label{sec:fontswitch}
원칙적으로 \luatexko는 지시된 글자가 영문폰트에 없으면 한글폰트에서,
한글폰트에도 없으면 한자폰트에서, 한자폰트에도 없으면 fallback
폰트에서 글자를 찾아 찍는다.
한글폰트가 지정되지 않았고 기본폰트에 한글 글리프가 없다면
\hemph{은바탕, 은돋움 트루타입}을 자동으로 불러온다.%
\footnote{%
은글꼴 트루타입은 \texlive에 포함되어 있다. }
하지만 \pkgkwd{\hangulbyhangulfont}|=1|을 선언하면 한글은 우선 한글폰트로
식자한다. 또한 \pkgkwd{\hanjabyhanjafont}|=1|을 선언하면 한자는 우선 한자폰트로
식자한다. 두 경우 모두 |0|을 선언하면 원래 방식으로 되돌아간다.
문단 중간에서 사용해도 동작한다. \sout{그러나 루아코드가 실행되므로
텍의 그룹에 의해 영향받지 않는 전역적 효과를 가진다.}
일정한 영문 문장부호들은 한글 폰트로 식자된다.
즉, \pkgkwd{\hangulpunctuations}|=1|이 기본으로 작동하고,
|0|을 지시해야 이 기능이 비로소 꺼진다.
verbatim 코드를 식자할 때는 이 기능이 작동하지 않으며,%
\footnote{%
정확히 말하자면 |\\language=\\l@nohyphenation| (플레인텍에서는 |\\language=-1|인 경우),
즉 하이프네이션이 허용 안 되는 상황에서는 작동하지 않는다.
부연하건대, |\\language=\\l@nohyphenation| 상황에서 작동하지 않는
그밖의 기능은 다음과 같다: 줄바꿈 허용, InterCharacter, InterHangul,
InterLatinCJK, CompressPunctuations, RemoveClassicSpaces,
한글^^b7한자 폰트 문자 다음의 공백 크기 조정 등. 마지막의
한글^^b7한자 다음의 공백 크기 조정은 영문자가 고정폭 글꼴일 때에도
작동하지 않는다. }
문장부호가 고정폭 글꼴이거나 tfm 폰트일 때에도 작동하지 않는다.
영향 받는 문장부호들의 기본값은 다음과 같다:
\begin{verbatim}
[0x21] ! [0x27] ' [0x28] ( [0x29] )
[0x2C] , [0x2E] . [0x3A] : [0x3B] ;
[0x3F] ? [0x60] ` [0xB7] · [0x2014] —
[0x2015] ― [0x2018] ‘ [0x2019] ’ [0x201C] “
[0x201D] ” [0x2026] … [0x203B] ※
\end{verbatim}
다음과 같은 명령으로 이 목록에 문자를 추가하거나 제거할 수 있다.%
\pkgkwd*{\registerpunctuations}%
\pkgkwd*{\unregisterpunctuations}
인자는 콤마로 분리된 숫자 형식으로서 유니코드 코드포인트를 뜻한다.
\begin{verbatim}
\registerpunctuations{45, "2D, `-}
\unregisterpunctuations{"2D, "2015}
\end{verbatim}
이상 문장부호 관련 명령들은 문단 중간에서도 쓸 수 있지만, 전역적 효과를 가진다.
\section{줄바꿈 허용}\label{sec:break}
어떤 글자 앞이나 뒤에서 줄바꿈을 허용하고 싶을 때 아래와 같이 명령을 준다.%
\pkgkwd*{\registerbreakableafter}%
\pkgkwd*{\registerbreakablebefore}
이들 명령을 문단 중간에서 사용하면 문단의 처음부터 전역적 효력을 가진다.
\begin{verbatim}
\registerbreakableafter{"2460, "2461}
\registerbreakablebefore{"2460, "2461}
\end{verbatim}
\luatexko는 다분히 보수적으로 줄바꿈을 허용하고 있다.
예시한 유니코드는 `①'과 `②'인데 기본적으로
이들 문자 앞뒤 모두에서 줄바꿈이 되지 않는다.
\section{글꼴 옵션}\label{sec:fontoption}
fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있다.%
\footnote{%
옛한글 식자를 위해서는 적어도 |Script=Hangul|
(플레인텍이라면 |script=hang|)을 주어야 한다.
옛한글이 아니더라도 한글을 쓴다면 이 옵션과 |Language=Korean|
(플레인텍은 |language=KOR|)을 주는 것이 좋다. }\,%
\footnote{%
|PunctRaise|, |NoEmbedding| 옵션은 v2.0부터 더는 제공하지 않는다. }
\def\hunmintxt{%
\noindent\textbf{%
世솅〮宗조ᇰ御ᅌᅥᆼ〮製졩〮訓훈〮民민正져ᇰ〮音ᅙᅳᆷ
}\par
製졩〮ᄂᆞᆫ〮글〮지ᅀᅳᆯ〮씨〮니〮御ᅌᅥᆼ〮製졩〮ᄂᆞᆫ〮님〯금〮지〯ᅀᅳ샨〮그〮리라〮%
訓훈〮은〮ᄀᆞᄅᆞ칠〮씨〮오〮民민ᄋᆞᆫ〮百ᄇᆡᆨ〮姓셔ᇰ〮이〮오〮音ᅙᅳᆷ은〮소리〮니〮%
訓훈〮民민正져ᇰ〮音ᅙᅳᆷ은〮百ᄇᆡᆨ〮姓셔ᇰ〮ᄀᆞᄅᆞ치〮시논〮正져ᇰ〮ᄒᆞᆫ소리〮라〮
\par\medskip
\noindent\textbf{%
國귁〮之징語ᅌᅥᆼ〯音ᅙᅳᆷ이〮
}\par
國귁〮ᄋᆞᆫ〮나라〮히라〮之징ᄂᆞᆫ〮입〮겨〮지라〮語ᅌᅥᆼ〯는말〯ᄊᆞ미라〮
\par
나랏〮말〯ᄊᆞ미〮
\par\medskip
\noindent\textbf{%
異잉〮乎ᅘᅩᆼ中듀ᇰ國귁〮ᄒᆞ〮야〮
}\par
異잉〮ᄂᆞᆫ〮다ᄅᆞᆯ씨라乎ᅘᅩᆼᄂᆞᆫ〮아〯모〮그ᅌᅦᄒᆞ〮논겨〮체ᄡᅳ〮는字ᄍᆞᆼ〮ㅣ라〮%
中듀ᇰ國귁〮ᄋᆞᆫ〮皇ᅘᅪᇰ帝뎽〮겨〯신나라〮히니〮우〮리〮나랏〮常쌰ᇰ談땀애〮%
江가ᇰ南남이〮라〮ᄒᆞ〮ᄂᆞ〮니라〮
\par
中듀ᇰ國귁〮에〮달아〮
}
\begin{figure}
\fboxsep=1em
\fbox{\parbox{\dimexpr\linewidth-2.1em\relax}{\sffamily
\parindent1em
\hunmintxt
}}
\caption{옛한글 조판 보기}\label{fig:yethangul}
\end{figure}
\begin{description}
\item[InterHangul] \pkgkwd*{InterHangul}%
{\addhangulfontfeature{InterHangul=.5ex}한글 글자
사이의 자간}. 아래는 $-0.04$em 만큼 한글 자간을 지시한다.%
\footnote{%
플레인텍에서는 |interhangul=<dimen>|. }
\begin{verbatim}
[InterHangul=-0.04em]
\end{verbatim}
\item[InterLatinCJK] \pkgkwd*{InterLatinCJK}%
한글 또는 한자와 Latin문자 사이의 자간을 설정한다.%
\footnote{%
플레인텍에서는 |interlatincjk=<dimen>|. }
한글^^b7한자 다음에 라틴 문자가 오는 경우 원래는 줄바꿈이 되지 않지만
이 옵션을 주면 줄바꿈이 가능해진다.
\begin{verbatim}
[InterLatinCJK=0.25em]
\end{verbatim}
\item[InterCharacter] \pkgkwd*{InterCharacter}%
CJK 글자들 사이의 자간을 지시한다.%
\footnote{%
플레인텍에서는 |intercharacter=<dimen>|. }
fontspec의 |LetterSpace| 옵션과 기능이 유사하지만, 옛한글을 깨뜨리는 등의
오작동을 하지 않는다. 전술한 자간 옵션들보다 후순위로 동작한다.
\begin{verbatim}
[InterCharacter=.125em]
\end{verbatim}
\item[InterCharStretch] \pkgkwd*{InterCharStretch}%
CJK 글자간 가변공백{\small(글루)}의 stretch 값을 지시한다.%
\footnote{%
플레인텍에서는 |intercharstretch=<dimen>|. }
\begin{verbatim}
[InterCharStretch=0.5pt]
\end{verbatim}
\item[CharRaise] \pkgkwd*{CharRaise}%
글자의 세로 위치를
{\addhangulfontfeature{CharRaise=.3em} 조절}할 수 있는 기능이다.
이로써 주변에 식자되는 다른 글꼴과 조화를 이루게 한다.%
\footnote{%
플레인텍에서는 |charraise=<dimen>|. }
\begin{verbatim}
[CharRaise=2pt]
\end{verbatim}
세로쓰기에서는 모든 글자들을 지정한 값만큼 오른쪽으로 이동시킨다.%
\footnote{%
세로쓰기에서는 이 옵션 값을 고정길이(가령 |pt| 단위)로 주어야
크기가 다른 폰트들간에 중앙정렬이 유지된다. }
\item[RemoveClassicSpaces] \pkgkwd*{RemoveClassicSpaces}%
고문헌 조판시에 CJK 글자들 사이의 공백을 없애준다.%
\footnote{%
플레인텍에서는 |+removeclassicspaces|. }
\item[CompressPunctuations] \pkgkwd*{CompressPunctuations}%
CJK 구두점 {\small (낫표 따위)}의 글자폭을
반각으로 만든다.%
\footnote{%
플레인텍에서는 |+compresspunctuations|.
}\,\footnote{%
v2.0부터는 사용자가 지시하지 않는 한 자동으로 글자폭을 줄여주지 않는다.
}
이 옵션은 |CharacterWidth=AlternateHalf| 내지 {\small (세로쓰기의 경우)}
|Vertical=HalfMetrics|와 거의 같은 기능을 한다.%
\footnote{%
플레인텍에서는 각각 |+halt| 및 |+vhal|이다. 이들과 완전 동일하진
않다. 가령 U+00B7\;(^^b7)의 경우 및 고문헌조판 모드에서
U+2018\;(^^^^2018) U+2019\;(^^^^2019) U+201C\;(^^^^201c) U+201D\;(^^^^201d)
처리의 경우.}
\item[Protrusion] \pkgkwd*{Protrusion}%
특정 글자가 행 끝에 왔을 때 판면 바깥으로 끌어내는
기능이다. \luatex은 기본값으로 온점 반점 등을 완전 글자내밀기 한다.
|Protrusion|은 |Protrusion=default|와 같은 뜻이다.%
\footnote{%
플레인텍에서는 |protrusion=default|. }
자신만의 설정을 만들어 지정할 수 있다.%
\footnote{%
default 설정을 고치는 방법은 이를테면 다음과 같다
(이 매뉴얼의 소스 앞부분을 참고하라):\par
\leftskip=3em\noindent
\cs{directlua{ fonts.protrusions.setups.default[0x201C] = { 1, 0 } }} }
\item[Expansion] \pkgkwd*{Expansion}%
판면의 균일한 조판을 위해 글자들을 미세하게 늘이거나
줄이는 기능이다. |Expansion|은 |Expansion=default|와 마찬가지 뜻이다.%
\footnote{%
플레인텍에서는 |expansion=default|. }
\end{description}
\section{고문헌}\label{sec:classic}
\def\analectstext{%
子曰:「學而時習之,不亦說乎?有朋自遠方來,不亦樂乎?人不知而不慍,不亦君子乎?」\par
有子曰:「其爲人也孝弟,而好犯上者,鮮矣!不好犯上,而好作亂者,未之有也!君子務本,本立而道生;孝弟也者,其爲仁之本與?」\par
子曰:「巧言令色,鮮矣仁!」\par
曾子曰:「吾日三省吾身:爲人謀,而不忠乎?與朋友交,而不信乎?傳,不習乎?」\par
子曰:「道千乘之國,敬事而信,節用而愛人,使民以時。」\par
子曰:「弟子入則孝,出則弟;謹而信,汎愛衆;而親仁,行有餘力,則以學文。」
}
\begin{figure}
\centering
\fbox{\parbox{37em}{\typesetclassic\sffamily
\analectstext
}}
\caption{고문헌 조판 보기. typesetclassic 환경을 이용했다.
글꼴에 |CompressPunctuations| 옵션을 주었다.
}\label{fig:gomun}
\end{figure}
고문헌 조판을 위해 \pkgkwd{typesetclassic} 환경을 제공한다.
전처리부에 \cs{typesetclassic}을 선언할 수도 있다.%
\footnote{%
플레인텍에서는 (문서 전체에 적용하지 않는다면 그룹 안에서)
\cs{typesetclassic}을 사용한다. }\,%
\footnote{%
|japanese|, |chinese|, |Schinese|, |Tchinese|, |korean| 따위의 환경은
지난 버전과의 호환성을 위해 제공되고 있을 뿐이다.
그렇더라도 중국어나 일본어 폰트를 사용한다면 이들 환경을 사용하는 것이 좋다.
|chinese|는 |Schinese|와 동의어이다. }
그림~\ref{fig:gomun} 참조.
v2.0부터는 고문헌 조판에서 한글^^b7한자와 영문자가 붙어 나오더라도 자동으로
간격을 잡아주지 않으므로 이런 경우 사용자가 |InterLatinCJK| 옵션을
지정해야 한다.
또한 불필요한 공백이 오더라도 자동으로 제거해주지 않으므로 이런 경우
사용자가 |RemoveClassicSpaces| 옵션을 주어야 한다.
\pkgkwd{typesetmodern} 환경은 고문헌 조판 중에 잠깐 현대 한국어를 조판하는 데
사용한다.%
\footnote{%
플레인텍에서는 (문서 전체에 적용하지 않는다면 그룹 안에서)
\cs{typesetmodern}을 사용한다. }
고문헌 조판 중 \luatexko가 글자 사이에 삽입하는 미세간격을 사용자가
영{\small(zero)}으로 강제하기 위해선 \pkgkwd{\inhibitglue} 명령을 이용한다.
\section{세로쓰기}\label{sec:verttype}
세로쓰기는 폰트의 고급 오픈타입 속성을 이용하므로 폰트가 이를 지원해야
가능한 일이다. 폰트에 |Vertical=Alternates|와 \pkgkwd{RawFeature=vertical}
옵션을 준다.%
\footnote{%
이는 플레인텍에서 |vertical;+vert| 옵션을 주는 것과 같다.
사실 |vertical|을 선언하면 |vert|는 자동으로 켜지도록 해 두었다. }\,%
\footnote{%
|vmtx| 정보를 가지고 있지 않은 글꼴은 세로쓰기에 적합치 않은 글꼴이다.
|otfinfo -t <파일>| 명령으로 글꼴에 들어있는 테이블 정보를 알 수 있다. }\,%
\footnote{%
폰트 옵션 |Renderer=HarfBuzz| 또는 |Renderer=OpenType| 등
(플레인텍에서는 |mode=harf| 옵션)을 주고
컴파일하여 HarfBuzz 모듈을 이용하려는 경우 세로쓰기가
현재로서는 지원되지 않는다. 세로쓰기를 하려면 이 옵션을 빼고 디폴트 값인
|Renderer=Node| (플레인텍에서는 |mode=node|)를 사용하라.}\,%
\footnote{%
세로쓰기에서는 \cs{typesetclassic}의 아종인 \cs{typesetvertical}이
기본으로 셋팅되어 있다. 일종의 고문헌 조판으로 보는 것이다.
}
세로쓰기에서 |CharRaise| 옵션의 효과에 대해서는 제\ref{sec:fontoption}절을
참조.
문서의 일부를 세로쓰기하려면
|\begin{|\pkgkwd{vertical}|}{<dimen>}| \ldots\ |\end{vertical}|
환경을 이용한다. 인자 |<dimen>|으로 세로쓰기 박스의 높이를 지시한다.
그림~\ref{fig:vertical},~\ref{fig:vertical3} 및 \ref{fig:vertical2} 참조.
만약 인자가 비어있거나 \cs{empty}이면 본문을 한 줄짜리 박스로 식자하며,
이때 높이는 natural height가 된다.
\begin{figure}
\fboxsep=5pt
\framebox[\linewidth]{
\begin{vertical}{20em}
\linespread{1.5}\sffamily \verticalhangulfont
\hunmintxt
\end{vertical}
}
\caption{세로쓰기의 예. 박스 높이 |20em|을 지시했다.
아직 HarfBuzz 모드를 쓸 수 없으므로 폰트에 |Renderer=Node| 옵션을 명시했다.
}\label{fig:vertical}
\end{figure}
\begin{figure}
\fboxsep=5pt
\framebox[\linewidth]{
\begin{vertical}{17em}
\linespread{1.5}\sffamily \verticalhangulfont
\parindent0pt \everypar{\hangindent1em \hangafter1 }
\analectstext
\end{vertical}
}
\caption{세로쓰기의 다른 예. 박스 높이 |17em|을 지시했다.
글꼴에 |CompressPunctuations|와 더불어
|InterCharStretch=1pt|를 옵션으로 주었다. 공백이 없는 문서는 자간늘이기 값을
넉넉하게 주는 것이 좋다.
|Protrusion| 옵션으로 구두점들이 행 끝에 매달린 것도 볼 수 있다.
|CompressPunctuations|로 이미 반각이 강제되고 있으므로 글자내밀기 값으로 |0.5|를
주어야 전부 내밀기가 된다.
}\label{fig:vertical3}
\end{figure}
\begin{figure}
\fboxsep=5pt
\framebox[\linewidth]{
\begin{vertical}{17em}
\linespread{1.5}\sffamily \verticalhangulfont
\parindent0pt \everypar{\hangindent1em \hangafter1 }
\spaceskip=.5em plus.25em minus.125em
\quad 님의 침묵(The Silent Beloved)
\smallbreak
\hfil\hfil 한 용 운\hfil
\bigbreak
님은 갓슴니다 아아 사랑하는나의님은 갓슴니다\par
푸른산빗을깨치고 단풍나무숩을향하야난 적은길을 거러서 참어떨치고
갓슴니다\par
黃金의꽃가티 굿고빗나든 옛盟誓는 차듸찬띠끌이되야서 한숨의 微風에
나러갓슴니다\par
날카로은 첫〈키쓰〉의追憶은 나의運命의指針을 돌너노코 뒷거름처서 사러젓슴니다\par
\hellipsis\par
아아 님은갓지마는 나는 님을보내지 아니하얏슴니다\par
제곡조를못이기는 사랑의노래는 님의沈默을 휩싸고돔니다\par
\end{vertical}
}
\caption{세로쓰기의 또 다른 예. 박스 높이 |17em|을 지시했다.
Noto Sans CJK 글꼴의 세로쓰기 공백은 원래 |1em|,
즉 전각크기로 매우 크기 때문에, 여기서는 \cs{spaceskip} 명령을 이용하여
반각 크기로 강제했다.
}\label{fig:vertical2}
\end{figure}
문서 전체를 세로쓰기한다면 이 환경을 쓰는 대신
\pkgkwd{\verticaltypesetting} 명령을 전처리부에 선언한다.
이때 면주는 가로로 식자되며 면주 폰트의 설정은 사용자의 몫이다.
몇몇 페이지를 세로쓰기로 식자하려면 본문 중에
|\begin{|\pkgkwd{verticaltypesetting}|}| \ldots\ |\end{verticaltypesetting}|
환경을 이용한다.
이때도 면주는 가로로 식자되며, 환경의 시작과 끝에서 쪽나눔이 행해진다.
세로쓰기 도중에 문서의 일부를 가로쓰기하려면
|\begin{|\pkgkwd{horizontal}|}{<dimen>}| \ldots\ |\end{horizontal}|
환경을 이용한다. |<dimen>|은 가로쓰기 박스의 너비를 지시한다.
만약 인자가 비어있거나 \cs{empty}이면 본문을 한 줄짜리 박스로 식자하며,
이때 너비는 당연히 natural width가 된다.
\begin{plaintex}
문서의 일부를 세로쓰기하려면 |\vertical{<dimen>}| \ldots\ |\endvertical|.
인자는 비워둘 수 있다.
문서 전체를 세로쓰기하려면 문서 첫머리에 \cs{verticaltypesetting}.
몇몇 페이지를 세로쓰기하려면 \cs{beginverticaltypesetting} \ldots\ \cs{endverticaltypesetting}.
세로쓰기 도중에 가로쓰기를 넣으려면 |\horizontal{<dimen>}| \ldots\ |\endhorizontal|.
인자는 비워둘 수 있다.
\end{plaintex}
\section{드러냄표}\label{sec:dotemph}
\pkgkwd{\dotemph} 명령으로 \dotemph{드러냄표}%
를 이용한 강조를 할 수 있다. 기본은 글자 위에 점을 찍는 형태이나
다음과 같이 명령을 주어 개인적으로 선호하는 기호를 드러냄표로 쓸 수
있다.
\medskip
①~|\def|\pkgkwd{\dotemphraise}|{0.4em }|:
드러냄표를 피강조 글자 위로 끌어올리는 길이
②~|\def|\pkgkwd{\dotemphchar}|{\bfseries ^^^^02d9}|: 드러냄표 기호 자체를 정의.
\section{루비}\label{sec:ruby}
루비를 달 수 있다. ruby 패키지가 이미 존재하지만 \luatexko와 궁합이 잘
맞지 않아 새로 매크로를 제공한다.
\begin{quote}
\pkgkwd{\ruby}|{漢字}{한자}|\quad$\Rightarrow$\quad\ruby{漢字}{한자}
\end{quote}
이처럼 글자별로 따로 루비를 달 필요가 없다. 관련 설정은 다음처럼
한다.
\medskip
①~\pkgkwd{\rubyfont}: 루비를 식자할 폰트를 지시해 둔다. 기본값은 현재 폰트%
\footnote{%
루비는 글자 크기가 작기 때문에 본문 폰트보다 약간 굵은 폰트로
지정하는 것이 좋다. }
②~|\def|\pkgkwd{\rubysize}|{0.6}|:
루비 글자 크기를 본문 글자 크기에 대한 비율로 지정%
\footnote{%
플레인텍에서는 루비의 글꼴크기를 따로 조정해주지 않는다.
사용자가 \cs{rubyfont}를 설정할 때 크기도 함께 지시하도록 한다.
가령: |\\font\\rubyfont=UnBatang at \\rubysize em| }
③~|\def|\pkgkwd{\rubysep}|{0.1ex}|: 루비와 본문 글자 사이의 간격을 지정
④~\pkgkwd{\rubynooverlap}: 루비의 폭이 본문 글자의 폭보다 클 때 루비가 이웃
글자들 위로 삐져나가지 못하게 한다. 본문 글자의 흐름을 중시하여
\pkgkwd{\rubyoverlap}을 기본값으로 하였으므로 이는 따로 선언할 필요가 없다.
\medskip
한편, 연속된 본문 글자들에 각각 한 글자씩 루비를 달고자 한다면
\pkgkwd{\xxruby}|{...}{...}| 명령을 사용한다. 글자들 사이에 줄바꿈이 허용된다.
두 인자의 글자 수가 동일해야 한다.
\section{밑줄긋기}\label{sec:uline}
ulem 패키지가 \luatexko와 궁합이 맞지 않아{\small (줄바꿈에 문제가 있음)}
명령을 따로 제공한다.%
\pkgkwd*{\uline}%
\pkgkwd*{\sout}%
\pkgkwd*{\uuline}%
\pkgkwd*{\xout}%
\pkgkwd*{\uwave}%
\pkgkwd*{\dashuline}%
\pkgkwd*{\dotuline}
\def\RA{\>$\Rightarrow$\>}
\begin{tabbing}
\cs{dotuline{밑줄을 점선으로 긋는다}}\quad\=$\Rightarrow$\quad\= \kill
\cs{uline{밑줄을 그을 수 있다}}\RA\uline{밑줄을 그을 수 있다}\\
\cs{sout{취소선을 그을 수 있다}}\RA\sout{취소선을 그을 수 있다}\\
\cs{uuline{밑줄을 두 줄 긋는다}}\RA\uuline{밑줄을 두 줄 긋는다}\\
\cs{xout{빗금으로 취소할 수 있다}}\RA\xout{빗금으로 취소할 수 있다}\\
\cs{uwave{물결표로 밑줄을 삼는다}}\RA\uwave{물결표로 밑줄을 삼는다}\\
\cs{dashuline{대시로 밑줄을 삼는다}}\RA\dashuline{대시로 밑줄을 삼는다}\\
\cs{dotuline{밑줄을 점선으로 긋는다}}\RA\dotuline{밑줄을 점선으로 긋는다}
\end{tabbing}
관련하여 다음 설정을 할 수 있다.
\medskip
①~|\def|\pkgkwd{\ulinedown}|{0.5ex}|: 밑줄을 베이스라인 아래로 끌어내리는 정도
②~|\def|\pkgkwd{\ulinewidth}|{0.04em}|: 밑줄의 굵기
\medskip
사실 위 밑줄 양식들을 만드는 데는 예외없이
\pkgkwd{\markoverwith} 명령이 사용되었다.
따라서 사용자는 이를 이용해 원하는 양식을 만들 수 있다.
가령 노란색 마커펜을 흉내내려면,%
\footnote{%
이 명령의 인자로 들어갈 수 있는 것은 box와 rule에 국한된다.
예시에서는 박스를 넣었다.}\,%
\footnote{%
별표 붙은 명령 \cs{markoverwith*}는 \cs{xleaders}를 실행하고,
예시처럼 별표가 없으면 \cs{cleaders}를 실행한다. }
\begin{verbatim}
\def\ymarker{%
\markoverwith{%
\hbox{\color{yellow!50}\vrule width 1pt height 9pt depth 2pt}%
}}
\end{verbatim}
\def\ymarker{\markoverwith{%
\hbox{\color{yellow!50}\vrule width 1pt height 9pt depth 2pt}}}
\cs{ymarker{노란색을 칠해서 강조한다}}\quad$\Rightarrow$\quad
\ymarker{노란색을 칠해서 강조한다}.
\section{자동조사}\label{sec:autojosa}
자동조사는 \kotex 과 동일하게 \cs{은} \cs{는} \cs{이} \cs{가} \cs{을} \cs{를}
\cs{와} \cs{과} \cs{로} \cs{으로} \cs{라} \cs{이라} 따위를 사용한다.
버전 1.3부터는 \pkgkwd{\josaignoreparens}|=1|이 선언되어 있으면 자동조사는
\hemph{괄호 부분을 건너뛰고} 그 앞 글자에 매칭한다.
|0|이 선언되면 원래 방식으로 돌아간다.
\begin{quote}
\cs{josaignoreparens=1} \josaignoreparens=1 \\
|홍길동(1992)\는|\quad$\Rightarrow$\quad 홍길동(1992)\는\\
|홍길동(2001)\로|\quad$\Rightarrow$\quad 홍길동(2001)\로\par
\cs{josaignoreparens=0} \josaignoreparens=0 \\
|홍길동(1992)\는|\quad$\Rightarrow$\quad 홍길동(1992)\는\\
|홍길동(2001)\로|\quad$\Rightarrow$\quad 홍길동(2001)\로
\end{quote}
\section{루아 모듈의 제거 및 복원}\label{sec:luamodule}
루아 코드 |luatexko.deactivateall()|은 이상 언급한 \luatexko 의 거의 모든
기능을 무력화한다. |luatexko.reactivateall()|은 이를 복원한다.%
\footnote{수직 모드 (문단과 문단 사이)에서 사용할 것.
수평 모드에서는 정상작동을 보장하지 못한다.}
다른 패키지와 충돌할 때 시도해 볼 수 있다.
전자의 함수에는 문자열을 인자로 줄 수도 있는데, 해당하는 다른 패키지의
모듈들을 잠시 제거할 수 있다.
\section{수식 한글}\label{sec:mathhangul}
\begin{quote}
|$가^{나^다}$|\quad$\Rightarrow\quad가^{나^다}$
\end{quote}
수식 한글 폰트를 설정하면 수식 모드에서도 한글을 {\small(hbox로 감싸지 않고)}
직접 입력할 수 있다.%
\footnote{%
|\\hbox|를 쓰지 않고 직접 입력하는 수식 한글이
\uline{디스플레이 수식} 안에 사용된 경우,
앞서 기술한 드러냄표 강조, 밑줄 강조, 한글 글꼴 옵션 등의 기능이 현재로는
전혀 작동하지 않는다. 구현은 비교적 간단하지만, 과연 수식에서
저러한 기능을 써야 할 경우가 있을까 의문이기 때문이다.
사용자의 요청이 있으면 즉시 반영하겠다.
}
v2.0부터는 자동으로 수식 한글을 잡아주지 않는다.%
\pkgkwd*{\setmathhangulfont}
\begin{verbatim}
\setmathhangulfont{Noto Sans CJK KR}
[
SizeFeatures={
{Size=-6, Font=* Medium},
{Size=6-9, Font=* Regular},
{Size=9-, Font=* DemiLight},
}
]
\end{verbatim}
현재 한글만 쓸 수 있게 설정되어 있다. 한자도 수식에 직접 입력하려면 사용자는
다음 명령으로 유니코드 블럭을 추가 지정해야 한다.%
\pkgkwd*{\setmathhangulblock}
\begin{verbatim}
\setmathhangulblock{4E00}{9FC3}
\end{verbatim}
\begin{plaintex}
플레인텍에서는 \cs{mathhangulfont=UnBatang}과 같이 설정한다.
또는 좀 더 그럴듯하게 하려면:
\begin{verbatim}
\font\texthangul="Noto Sans CJK KR DemiLight" at 10pt
\font\scripthangul="Noto Sans CJK KR Regular" at 7pt
\font\scriptscripthangul="Noto Sans CJK KR Medium" at 5pt
\setmathhangulfonts\texthangul\scripthangul\scriptscripthangul
\end{verbatim}
\end{plaintex}
\section{한국어 항목 번호}\label{sec:hangulnums}
\kotex과 동일하게 항목 번호를 한국어 기호로 붙일 수 있다.%
\footnote{%
\cs{jaso} \cs{gana} \cs{ojaso} \cs{ogana} \cs{pjaso} \cs{pgana}
\cs{onum} \cs{pnum} \cs{oeng} \cs{peng} \cs{hnum} \cs{Hnum}
\cs{hroman} \cs{hRoman} \cs{hNum} \cs{hanjanum} 따위를 사용한다. }
\section{입력 변환}\label{sec:normalize}
\pkgkwd{\luatexhangulnormalize}|=1|이라 지시하면 첫가끝 자모를 완성형 음절로,
|2|라면 완성형 음절을 첫가끝 자모로 인코딩 변환한다. |0|이 할당되면
인코딩 변환 기능이 꺼진다. \XeTeX의 \cs{XeTeXinputnormalization} 명령과
유사하다.%
\footnote{%
변환기능은 |lua-uni-algos| 패키지를 이용하므로
이 패키지를 설치해두어야 한다. }\,%
\footnote{%
HarfBuzz 모드에서는
첫가끝 자모로의 입력변환이 효과를 못볼 수도 있으니 유의할 것.
}
\section{UHC 입력 인코딩}\label{sec:uhcencoding}
권장하지 않지만 불가피하게 입력 인코딩이 UHC (Unified Hangul Code)%
\footnote{%
CP949라고도 하며 EUC-KR을 포함한다. }%
로 되어 있는 파일을 처리할 때는 \pkgkwd{\luatexuhcinputencoding}|=1|을 선언한다.
|0|을 할당하면 다시 UTF-8 입력으로 간주한다. \XeTeX의 \cs{XeTeXinputencoding}
명령과 유사하나, 오직 한국어 문자만 처리할 수 있다.%
\footnote{%
CP949 인코딩 파일시스템을 사용하는 윈도 운영체제에서의
한글 파일이름 불러오기 기능은 v2.0부터는 제공하지 않는다.
대신 |luatex -cmdx ...|, |lualatex -cmdx ...|와 같이 컴파일시 명령행에
|-cmdx| 옵션을 주면 된다고 하니 테스트해 보시기 바란다. }
\smallskip
\hbox to\linewidth{\hss\vrule width .4\linewidth height.4pt \hss}
\smallskip
\section*{주요 변경 이력}
\begin{itemize}\linespread{1.1}\selectfont
\item[v3.2] ------
\item 한자 뒤에서도 자동조사 기능이 대체로 동작하게끔 하였다.
\XeTeX-\logoko{} 패키지가 설치돼 있을 것을 요구한다.
\item \hyperref[sec:verttype]{|vertical| 및 |horizontal| 환경의 인자를 비워둘 수 있다}.
\item \hyperref[sec:verttype]{|verticaltypesetting|을 환경으로도 쓸 수 있다.
플레인텍에서는 \cs{beginverticaltypesetting} \cs{endverticaltypesetting}}.
\item \hyperref[sec:fontcmds]{플레인텍 명령
\cs{sethangulfont} \cs{sethanjafont} \cs{setfallbackfont} 추가}
\item[v3.0] ------
\item \hyperref[sec:fontoption]{세로쓰기에서 |CharRaise| 옵션은
이제 글자들의 \dotemph{추가적인} 이동 길이를 나타낸다.}
\item 기본 로드되는 고정폭 한글 폰트(UnDotum)의 폭을
Latin Modern Mono 폰트에 맞추어 조정
\item \hyperref[sec:fontswitch]{영문자가 고정폭 글꼴일 때
한글^^b7한자 다음에 공백 크기 조정을 하지 않음}
\item \cs{actualtext} 명령 제거
\item[v2.6] ------
\item \hyperref[sec:fontswitch]{\cs{hangulbyhangulfont} 및
\cs{hanjabyhanjafont}가 지역적 효력만 가짐}
\item[v2.5] ------
\item LuaHB\TeX\ 지원 (세로쓰기 제외)
\item[v2.2] ------
\item \hyperref[sec:fontoption]{글꼴옵션 |InterCharStretch| 제공}
\item[v2.0] ------
\item \hyperref[sec:mathhangul]{수식 한글 글꼴을 자동으로 잡아주지 않음}
\item \cs{actualtext} 명령 작동 않음. 대신, 옛한글 텍스트 추출 자동 지원%
\footnote{%
PDF 리더 어플리케이션이 ActualText 기능을 지원해야 가능하다.
어도비 리더는 확실히 가능할 것이다. }
\item \hyperref[sec:fontoption]{글꼴옵션 |CompressPunctuations|,
|RemoveClassicSpaces|, |InterCharacter| 추가}
\item \hyperref[sec:break]{\cs{registerbreakableafter},
\cs{registerbreakablebefore} 명령 추가}
\end{itemize}
%\hfill \fboxsep=-\fboxrule \fbox{\vbox to 1em{\hbox to 1em{\hss}\vss}}
\end{document}
|