From be88ab29c165e6b16091443c3e8f36c4febf8a27 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 22 Jan 2020 03:02:40 +0000 Subject: CTAN sync 202001220302 --- language/japanese/zxjatype/LICENSE | 2 +- language/japanese/zxjatype/README-ja.md | 108 ++- language/japanese/zxjatype/README.md | 1 + language/japanese/zxjatype/zxjatype.sty | 99 ++- language/korean/pmhanguljamo/README.md | 22 + .../pmhanguljamo/doc/ABOUT_FONTS_TO_COMPILE.md | 16 + .../korean/pmhanguljamo/doc/munjangganghwa.jpg | Bin 0 -> 143726 bytes .../korean/pmhanguljamo/doc/pmhanguljamo-doc.pdf | Bin 0 -> 115873 bytes .../korean/pmhanguljamo/doc/pmhanguljamo-doc.tex | 453 ++++++++++++ .../korean/pmhanguljamo/doc/pmhanguljamo-kdoc.pdf | Bin 0 -> 508007 bytes .../korean/pmhanguljamo/doc/pmhanguljamo-kdoc.tex | 793 +++++++++++++++++++++ language/korean/pmhanguljamo/pmhanguljamo.sty | 630 ++++++++++++++++ 12 files changed, 2097 insertions(+), 27 deletions(-) create mode 100644 language/korean/pmhanguljamo/README.md create mode 100644 language/korean/pmhanguljamo/doc/ABOUT_FONTS_TO_COMPILE.md create mode 100644 language/korean/pmhanguljamo/doc/munjangganghwa.jpg create mode 100644 language/korean/pmhanguljamo/doc/pmhanguljamo-doc.pdf create mode 100644 language/korean/pmhanguljamo/doc/pmhanguljamo-doc.tex create mode 100644 language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.pdf create mode 100644 language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.tex create mode 100644 language/korean/pmhanguljamo/pmhanguljamo.sty (limited to 'language') diff --git a/language/japanese/zxjatype/LICENSE b/language/japanese/zxjatype/LICENSE index fbe40a0146..0c208cdd77 100644 --- a/language/japanese/zxjatype/LICENSE +++ b/language/japanese/zxjatype/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2018 Takayuki YATO (aka. "ZR") +Copyright (c) 2009-2020 Takayuki YATO (aka. "ZR") Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/language/japanese/zxjatype/README-ja.md b/language/japanese/zxjatype/README-ja.md index 9574b7b40c..e65f816d6d 100644 --- a/language/japanese/zxjatype/README-ja.md +++ b/language/japanese/zxjatype/README-ja.md @@ -23,22 +23,122 @@ LaTeX: XeLaTeX と xeCJK パッケージを利用した日本語組版の支援 zxjatype パッケージ ― 本体 --------------------------- -まだ解説が書けておりません…。基本的な機能の説明については以下の Web -ページで行っていますのでそちらを参照してください。 +基本的な機能の説明については以下の Web ページでも行っているのでそちらも +参照してほしい。 * [ZXjatype パッケージ] (http://zrbabbler.sp.land.to/zxjatype.html) +### パッケージ読込 + +xeCJK と一緒に読み込む場合: + + \usepackage[<オプション>...,...]{zxjatype} + +xeCJK と別個に読み込む場合: + + \usepackage[...]{xeCJK} + \usepackage[<オプション>...]{zxjatype} + +有効なオプションは以下の通り: + + * `default`:(既定)パッケージ読込直後に日本語用の設定への切替を行う。 (`\zxjapanesestyle` を実行する。) + * `nodefault`: `default` の否定。 xeCJK の初期設定が保持される。 + * `CJKchecksingle`:(既定)xeCJK の文字ウィドウ抑制機能を有効にする。 + (`CheckSingle=true` を設定する。) + * `noCJKchecksingle`: `CJKchecksingle` の否定。xeCJK の初期設定の通り + で文字ウィドウ抑制機能が無効になる。 + * `adjustcharclass`:(既定)日本語の組版規則に合わせて xeCJK の文字 + クラス設定を変更する。 + * `noadjustcharclass`: `adjustcharclass` の否定。 xeCJK の文字クラス + 設定を変更しない。 + * `kanakinsoku`: 小書き仮名を行頭禁則の対象にする。具体的には、これら + の文字の文字クラスを「閉じ括弧類」に変更する。 + ※この扱いには副作用があって、直後に約物がある場合の空きが不正になる + (約物が並んでいると解釈されるため)。 + * `nokanakinsoku`:(既定)小書き仮名を行頭禁則の対象にしない。具体的 + にはこれらの文字の文字クラスを「通常 CJK 文字」に変更する。 + ※`kanakinsoku`・`nokanakinsoku` の何れの場合も xeCJK の設定に変更を + 加えることに注意。変更したくない場合は `noadjustcharclass` にする。 + * `useinhibitglue`: pTeX と互換の `\inhibitglue` 命令を定義する。 + ※ただし現状の実装は不完全で問題があることが判っている。 + * `nouseinhibitglue`:(既定) `useinhibitglue` の否定。`\inhibitglue` + は定義されない。 + * `prefercjk`: 一部の記号類の文字クラスを「非 CJK 文字」(欧文扱い) + から「通常 CJK 文字」(和文扱い)に変更する。 + ※和文扱いの範囲が LuaTeX-ja の初期状態とほぼ同じになる。 + * `noprefercjk`:(既定)`prefercjk` の否定。 + +### 機能 + +xeCJK の CJK フォントファミリ設定において、`\setjafontscale` で設定された +和文スケール値が `Scale` の値として設定される。以下の命令が対象となる。 + + - `\setCJKmainfont` + - `\setCJKsansfont` + - `\setCJKmonofont` + - `\setCJKfamilyfont` + +zxjatype の独自の命令。 + + * `\setjafontscale{<実数>}`: 和文スケール値を設定する。 + ※空の引数も可能で、この場合は和文スケール値設定が抑止される。 + * `\>`: 明示的に和欧文間空白を出力する。 + ※数式モード中では LaTeX カーネルの定義が維持される。 + ※他のパッケージで再定義が行われている場合は定義されない。 + * `\inhibitglue`: その箇所で和文文字間に自動的に入る空白を抑制する。 + ※`useinhibitglue` オプション指定時にのみ定義される。 + * `\<`: `\inhibitglue` と同義。 + ※他のパッケージで再定義が行われている場合は定義されない。 + * `\textrawen{<テキスト>}`: 和文処理を無効化し、引数のテキストを欧文 + フォントで出力する。 + * `rawentext` 環境: `\textrawen` の環境版。 + * `\textrawja{<テキスト>}`: 和文処理を無効化し、引数のテキストを和文 + フォントで出力する。 + * `rawjatext` 環境: `\textrawja` の環境版。 + * `\zxjapanesestyle`: 日本語用の設定に切り替える。 + ※この命令はユーザによる再定義が可能。 + * `\zxusejapaneseparameter`: 和欧文間空白と和文間空白を日本語組版に + 適した値にする。 + * `\zxuseoriginalparameter`: 和欧文間空白と和文間空白を xeCJK の初期 + 設定に戻す。 + +なお、`\zxjapanesestyle` の初期値は以下のとおりである: + + \xeCJKsetup{ + AllowBreakBetweenPuncts = true, + PunctStyle = fullwidth, + }% + \zxusejapaneseparameters + +### 旧版との互換のための命令 + + * `\setjamainfont`: xeCJK の `\setCJKmainfont` と同義。 + * `\setjasansfont`: xeCJK の `\setCJKsansfont` と同義。 + * `\setjamonofont`: xeCJK の `\setCJKmonofont` と同義。 + * `\setjafamilyfont`: xeCJK の `\setCJKfamilyfont` と同義。 + * `\jafamily`: xeCJK の `\CJKfamily` と同義。 + +### 参考:0.6 版で廃止された機能 + + * `\(no)jafamilyinverbatim` 命令 + 更新履歴 -------- + * Version 0.7 ‹2020/01/22› + - xeCJK 2.x 版の使用を非推奨(将来廃止予定)とする。 + - `(no)prefercjk` オプションを新設。 + - 和文スケール値を `\zxjatypeJaScale` に格納する。 + - バグ修正。 + * Version 0.6c ‹2018/05/03› - バグ修正。 * Version 0.6b ‹2017/08/03› - - (試験的) `(no)useinhibitglue` オプション。 - - (試験的) `(no)kanakinsoku` オプション。 + - `(no)useinhibitglue` オプション。 + - `(no)kanakinsoku` オプション。 * Version 0.6a ‹2017/08/02› - バグ修正。 diff --git a/language/japanese/zxjatype/README.md b/language/japanese/zxjatype/README.md index 2c5dda651d..de9a5cc620 100644 --- a/language/japanese/zxjatype/README.md +++ b/language/japanese/zxjatype/README.md @@ -44,6 +44,7 @@ All other options are passed to xeCJK. Revision History ---------------- + * Version 0.7 ‹2020/01/22› * Version 0.6c ‹2018/05/03› * Version 0.6b ‹2017/08/03› * Version 0.6a ‹2017/08/02› diff --git a/language/japanese/zxjatype/zxjatype.sty b/language/japanese/zxjatype/zxjatype.sty index dba68ee443..d507d99a77 100644 --- a/language/japanese/zxjatype/zxjatype.sty +++ b/language/japanese/zxjatype/zxjatype.sty @@ -1,7 +1,7 @@ %% %% This is file 'zxjatype.sty'. %% -%% Copyright (c) 2018 Takayuki YATO (aka. "ZR") +%% Copyright (c) 2009-2020 Takayuki YATO (aka. "ZR") %% GitHub: https://github.com/zr-tex8r %% Twitter: @zr_tex8r %% @@ -10,11 +10,12 @@ %% package declaration \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{zxjatype}[2018/05/03 v0.6c ZX Japanese typeset] +\ProvidesPackage{zxjatype}[2020/01/22 v0.7 ZX Japanese typeset] \RequirePackage{ifxetex}\RequireXeTeX %% code guards \edef\zxjt@restore@codes{% + \catcode33=\the\catcode33% \catcode34=\the\catcode34% \catcode39=\the\catcode39% \catcode43=\the\catcode43% @@ -24,11 +25,13 @@ \catcode58=\the\catcode58% \catcode60=\the\catcode60% \catcode62=\the\catcode62% - \catcode63=\the\catcode63% \catcode94=\the\catcode94% \catcode96=\the\catcode96% + \catcode124=\the\catcode124% + \catcode126=\the\catcode126% \endlinechar=\the\endlinechar% \relax} +\catcode33=12 % \catcode34=12 % <"> \catcode39=12 % <'> \catcode43=12 % <+> @@ -38,9 +41,10 @@ \catcode58=12 % <:> \catcode60=12 % <<> \catcode62=12 % <>> -\catcode63=12 % \catcode94=7 % <^> \catcode96=12 % <`> +\catcode124=12 % <|> +\catcode126=13 % <~> \AtEndOfPackage{% \zxjt@restore@codes \let\zxjt@restore@codes\@undefined @@ -49,7 +53,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % BOOTSTRAP CODE -% +% %% definitions \def\zxjt@pkgname{zxjatype} @@ -58,7 +62,8 @@ \newif\ifzxjt@adjustcharclass \newif\ifzxjt@kanakinsoku \newif\ifzxjt@useinhibitglue -\providecommand*\bxDebug{\@gobble} +\newif\ifzxjt@prefercjk +\providecommand\bxDebug[1]{} %% process options \DeclareOption{default}{\zxjt@defaulttrue} @@ -76,6 +81,8 @@ \DeclareOption{nokanakinsoku}{\zxjt@kanakinsokufalse} \DeclareOption{useinhibitglue}{\zxjt@useinhibitgluetrue} \DeclareOption{nouseinhibitglue}{\zxjt@useinhibitgluefalse} +\DeclareOption{prefercjk}{\zxjt@prefercjktrue} +\DeclareOption{noprefercjk}{\zxjt@prefercjkfalse} % \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{xeCJK}} \ExecuteOptions{default,CJKchecksingle,adjustcharclass} @@ -90,6 +97,10 @@ \let\zxjt@go@to@main\@empty }{% \bxDebug{xeCJK v2.x found.}% + \PackageWarningNoLine\zxjt@pkgname + {!!!!!!!! IMPORTANT !!!!!!!!\MessageBreak + Support for xeCJK v2.x will be *dropped*\MessageBreak + in the near future} \long\def\zxjt@go@to@main#1\zxjt@begin@old@code{}% } @@ -130,6 +141,11 @@ \ifzxjt@useinhibitglue \bool_set_true:N \l__zxjt_useinhibitglue_bool \fi +%% \l__zxjt_prefercjk_bool +\bool_new:N \l__zxjt_prefercjk_bool +\ifzxjt@prefercjk + \bool_set_true:N \l__zxjt_prefercjk_bool +\fi %%-------------------------------------- error messages @@ -150,8 +166,8 @@ } \__zxjt_msg_new:nn { jafamilyinverbatim-disabled } { - \token_to_str:N \(no)jafamilyinverbatim \c_space_tl - ~is~disabled~in~this~version. + \token_to_str:N \( no)jafamilyinverbatim~ + is~disabled~in~this~version. } \__zxjt_msg_new:nn { CJKfam-failed } { @@ -181,9 +197,9 @@ % (A mere \scan_stop: suffices?) \cs_new:Nn \__zxjt_boundary: { - \ifhmode + \if_mode_horizontal: \hbox:n {} - \fi + \fi: } %% \__zxjt_leavevmode: @@ -259,7 +275,7 @@ \AtBeginDocument { \cs_set_eq:NN \__zxjt_after_decl_CJKfam:n \__zxjt_after_decl_CJKfam_db:n - \seq_remove_duplicates:N \g__zxjt_CJKfam_seq + \seq_gremove_duplicates:N \g__zxjt_CJKfam_seq \seq_map_function:NN \g__zxjt_CJKfam_seq \__zxjt_after_decl_CJKfam:n \seq_gclear:N \g__zxjt_CJKfam_seq } @@ -332,7 +348,7 @@ \bxDebug { family( #1 )~<=~ \g__zxjt_onefam_info_tl } \tl_if_empty:NF \g__zxjt_onefam_info_tl { - \prop_put:NnV \g__zxjt_CJKfam_prop { #1 } \g__zxjt_onefam_info_tl + \prop_gput:NnV \g__zxjt_CJKfam_prop { #1 } \g__zxjt_onefam_info_tl } } @@ -360,6 +376,8 @@ % The encoding used for CJK-families. \tl_new:N \g__zxjt_encoding_tl \tl_gset:Nn \g__zxjt_encoding_tl { EU1 } +\cs_if_exist:NT \g_fontspec_encoding_tl + { \tl_set_eq:NN \g__zxjt_encoding_tl \g_fontspec_encoding_tl } %% \__zxjt_use_CJKfam: % Switches the NFSS family to the family corresponding to the current CJK- @@ -501,6 +519,7 @@ "30E7, "30EE, "30F5, "30F6, "30FC, "31F0, "31F1, "31F2, "31F3, "31F4, "31F5, "31F6, "31F7, "31F8, "31F9, "31FA, "31FB, "31FC, "31FD, "31FE, "31FF, "309D, "309E, "30FD, "30FE, + "1B150, "1B151, "1B152, "1B164, "1B165, "1B166, "1B167, } \xeCJKDeclareCharClass { FullRight } { @@ -518,6 +537,36 @@ \xeCJKsetup { LongPunct+ = { ^^^^2015 } } } +\bool_if:NT \l__zxjt_prefercjk_bool + { + \clist_map_inline:nn + { + "2002, "2010, "2011, "2016, "201A, "201E, "2020, "2021, + "2022, "2030, "2032, "2033, "2039, "203A, "203B, "203C, + "203E, "203F, "2042, "2044, "2047, "2048, "2049, "2051 + } + { \XeTeXcharclass #1 = \c__zxjt_CJK_class_int } + \clist_map_inline:nn + { + { "2070, "243F }, + { "2460, "27BF }, + { "2900, "29FF }, + { "2B00, "2BFF }, + { "FE50, "FE6F }, + { "1F100, "1F1DF } + } + { + \clist_set:Nn \l_tmpa_clist {#1} + \int_step_inline:nnn + { \clist_item:Nn \l_tmpa_clist { 1 } } + { \clist_item:Nn \l_tmpa_clist { 2 } } + { + \int_compare:nNnF { \XeTeXcharclass ##1 } = { \c__zxjt_CJK_class_int } + { \XeTeXcharclass ##1 = \c__zxjt_CJK_class_int } + } + } + } + %%-------------------------------------- public commands %%<*> \setjamainfont / \setjasansfont / \setjamonofont @@ -571,23 +620,29 @@ } } -%% \__zxjt_scale_tl +%% \l__zxjt_scale_tl % The scale value to be applied to CJK fonts. -\tl_new:N \__zxjt_scale_tl +\tl_new:N \l__zxjt_scale_tl %% \l__zxjt_scale_spec_tl \tl_new:N \l__zxjt_scale_spec_tl +%%<+> \zxjatypeJaScale +% The scale value to be applied to CJK fonts. +% (Same as \l__zxjt_scale_tl, but developer-level public.) + %%<*> \setjafontscale{} -%% Sets the value of \__zxjt_scale_tl, which defaults to 1. +%% Sets the value of \l__zxjt_scale_tl, which defaults to 1. \NewDocumentCommand \setjafontscale { m } { % NB: the argument is not expanded - \tl_set:Nn \__zxjt_scale_tl { #1 } - \tl_if_blank:VTF \__zxjt_scale_tl + \tl_set:Nn \l__zxjt_scale_tl { #1 } + \tl_set_eq:NN \zxjatypeJaScale \l__zxjt_scale_tl + \tl_set_eq:cN { __zxjt_scale_tl } \l__zxjt_scale_tl + \tl_if_blank:VTF \l__zxjt_scale_tl { \tl_clear:N \l__zxjt_scale_spec_tl } - { + { \tl_set:Nn \l__zxjt_scale_spec_tl - { Scale = \__zxjt_scale_tl , } + { Scale = \l__zxjt_scale_tl , } } } @@ -616,11 +671,11 @@ { \cs_set:Npn \> { - \ifmmode + \if_mode_math: \mskip \medmuskip - \else + \else: \CJKecglue \scan_stop: - \fi + \fi: } } } diff --git a/language/korean/pmhanguljamo/README.md b/language/korean/pmhanguljamo/README.md new file mode 100644 index 0000000000..061bcbcf04 --- /dev/null +++ b/language/korean/pmhanguljamo/README.md @@ -0,0 +1,22 @@ +# pmhanguljamo + +## About + +This LaTeX package provides Hangul *transliteration* input method, which enables to typeset Korean Letters (Hangul) with the help of proper fonts. The name is from “Poor- man’s Hangul Jamo Input Method.” + +It is mainly for the people who have a system without Korean IM, but want to typeset Hangul in their document. Not only modern Hangul, but so-colled “Old Hangul” characters that uses the lost letters such as ‘Arae-A’, ‘Yet Ieung’ or ‘Pan-Sios’ etc. can also be typeset. + +XeLaTeX recommended. And the legacy pdfTeX is not supported. + +## Copyright and License + +(C) 2020 Kangsoo Kim + +This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. + +This work has the LPPL maintenance status `maintained'. + +The Current Maintainer of this work is Kangsoo Kim. \ No newline at end of file diff --git a/language/korean/pmhanguljamo/doc/ABOUT_FONTS_TO_COMPILE.md b/language/korean/pmhanguljamo/doc/ABOUT_FONTS_TO_COMPILE.md new file mode 100644 index 0000000000..836bdf7dbc --- /dev/null +++ b/language/korean/pmhanguljamo/doc/ABOUT_FONTS_TO_COMPILE.md @@ -0,0 +1,16 @@ +# Many fonts + +To compile this document successfully, the following fonts must be installed: + + * Noto Serif CJK (kr), Noto Sans CJK (kr) and Noto Sans Mono CJK (kr) + * HCR LVT + * Nanum Myeongjo Yet Hangeul, and Nanum Barun Gothic Yet Hangeul + * KoPubWorld Batang and KoPubWorld Gothic + * Malgun Gothic + * Jeonju Wanpanbon Che + * Jeju Fonts + * Adobe Myungjo Std Medium + +# XeLaTeX + +run `xelatex` on the source file. \ No newline at end of file diff --git a/language/korean/pmhanguljamo/doc/munjangganghwa.jpg b/language/korean/pmhanguljamo/doc/munjangganghwa.jpg new file mode 100644 index 0000000000..cbd1362a6e Binary files /dev/null and b/language/korean/pmhanguljamo/doc/munjangganghwa.jpg differ diff --git a/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.pdf b/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.pdf new file mode 100644 index 0000000000..b306c193e4 Binary files /dev/null and b/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.pdf differ diff --git a/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.tex b/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.tex new file mode 100644 index 0000000000..83063ab4b3 --- /dev/null +++ b/language/korean/pmhanguljamo/doc/pmhanguljamo-doc.tex @@ -0,0 +1,453 @@ +%!TEX program = xelatex +% +% pmhanguljamo-doc.tex +%. written by Kangsoo Kim, 2020. +% +\documentclass[a4paper]{article} +\usepackage{fontspec} +%\setmainfont{Noto Serif} +%\setsansfont{Noto Sans} +%\setmonofont{Noto Sans Mono} +\setmainfont{XITS} + +\usepackage{hologo} +\newcommand*\XeTeX{\hologo{XeTeX}} +\newcommand*\XeLaTeX{\hologo{XeLaTeX}} +\newcommand*\LuaTeX{\hologo{LuaTeX}} +\newcommand*\LuaLaTeX{\hologo{LuaLaTeX}} + +\usepackage{pmhanguljamo} +\usepackage[colorlinks]{hyperref} + +\usepackage{polyglossia} +\setotherlanguage{korean} +\newfontfamily\hangulfont{UnBatang.ttf}[Script=Hangul] +%\newcommand*\jamo[1]{\begingroup\hangulfont\jamoword{#1}} +\newcommand*\jamo[1]{\textkorean{\jamoword{#1}}} + + + +\newcommand*\pkg[1]{\textsf{#1}\index{#1}\index{Package!#1}} +\newcommand*\thispkg{\pkg{pmhanguljamo}} +%\maxsecnumdepth{section} + +\begin{document} + +\title{Poorman's Hangul Jamo Input Method \\ \Large \texttt{pmhanguljamo.sty} } +\author{Kangsoo Kim} +\date{20 Jan 2020\quad version 0.2.1} + +\maketitle + +\tableofcontents + +\section{Introduction} +This \LaTeX\ package provides Hangul\footnote{% + \emph{Hangul} is the Korean alphabet + to write the Korean language. In both South and North Korea, + the standard writing system uses Hangul.} +\emph{transliteration} input method, which +enables to typeset Korean Letters (Hangul) with the help of proper fonts. +The name is from ``Poorman's Hangul Jamo Input Method.'' It is mainly for +the people who have a system without Korean IM, but want to typeset +Hangul in their document. +Not only modern Hangul, but so-colled ``Old Hangul'' characters +that uses the lost letters such as `Arae-A', `Yet Ieung' or `Pan-Sios' etc.\ can also be typeset. + +\XeLaTeX\ or \LuaLaTeX\ is required (\XeLaTeX\ recommended). The legacy pdf\TeX\ is not supported. +The Korean Language supporting packages such as \pkg{xetexko} or \pkg{luatexko} (in the ko.\TeX\ bundle) +or \pkg{polyglossia} under \XeLaTeX\ +are recommended, but without them typesetting Hangul is of no problem +with this package \thispkg. + +\section{Usage} + +\subsection{Loading the package} + +Put the following line in your preamble: +\begin{verbatim} +\usepackage{pmhanguljamo} +\end{verbatim} + +\subsection{Commands and Environment Provided} + +The main command to typeset Hangul is \verb|\jamoword|. + +\begin{quote} +Input: +\verb|\jamoword{myec dan/e/ga or su iss/svb/ni/da/.}|\\ +Result: \textkorean{\jamoword{myec dan/e/ga or su iss/svb/ni/da/.}} +\end{quote} + +The argument of the command consists of roman alphabets +and a few marks that represent the transliteration of Hangul Jamo. +The transliteration rule will be explained in the section~\ref{sec:rule} (page~\pageref{sec:rule}). + +And an environment named \emph{jamotext} is provided. +In the environment, multiple paragraphs can be located. So, it is +suitable to typeset longer text stuffs. For example, +\begin{verbatim} +\begin{jamotext} +jug/nvn nar/gga/ji ha/nvr/vr u/re/re \\ +han jem bu/ggv/rem ebs/gi/rvr + +ip/sai/ei i/nvn ba/ram/ei/do \\ +na/nvn goi/ro/oa/haiss/da/. +\end{jamotext} +\end{verbatim} +The result will be like this: +\begin{quote} +\begin{korean} +\begin{jamotext} +jug/nvn nar/gga/ji ha/nvr/vr u/re/re \\ +han jem bu/ggv/rem ebs/gi/rvr + +ip/sai/ei i/nvn ba/ram/ei/do \\ +na/nvn goi/ro/oa/haiss/da/. +\end{jamotext} +\end{korean} +\end{quote} + + +\subsection{Preamble of Document} + +Without any other packages, you can type Hangul. Note that +proper fonts should be declared for Hangul, using \pkg{fontspec}. + +\begin{verbatim} +\documentclass{article} +\usepackage{fontspec} +\usepackage{pmhanguljamo} + +\begin{document} +\fontspec[Script=Hangul]{UnBatang.ttf} +\jamoword{an/nyex/ha/sei/yo} +\end{document} +\end{verbatim} + +\texttt{UnBatang.ttf} is a font shipped in \pkg{unfonts-core} package of \TeX\,Live. +Not all Korean fonts can be available to typeset so-called `Old Hangul', +because they happen to lack +the feature of composing Korean Syllables from conjoining Jamo codes. Fortunately, +we have a few more fonts besides \texttt{UnBatang} that are \emph{proper} +and freely available, which are listed in the section~\ref{sec:font}. +In \TeX\,Live distribution, \texttt{UnBatang} is the only \emph{proper} one. + +The \pkg{polyglossia} package provides Korean language support. This package \thispkg\ +can be used with it. The following is an example. + +\begin{verbatim} +\documentclass{article} +\usepackage{polyglossia} +\setmainlanguage{english} +\setotherlanguage{korean} +\newfontfamily\hangulfont{UnBatang.ttf}[Script=Hangul] +\usepackage{pmhanguljamo} + +\begin{document} +\begin{korean} +\jamoword{han/gvr/vr si/hem/hab/ni/da/.} +\end{korean} +\end{document} +\end{verbatim} + +Or the ko.\TeX\ package bundle can be used together. + +\begin{verbatim} +\documentclass{article} +\usepackage{kotex} +\usepackage{pmhanguljamo} +\setmainhangulfont{UnBatang.ttf}[Script=Hangul] + +\begin{document} +\jamoword{na/ras/mar/ss@/mi} +\end{document} +\end{verbatim} + +In any case, the option \verb|[Script=Hangul]| should be given +to the font settings for Hangul. For more information, see section~\ref{sec:font}. + +The Korean writing system does not have hyphenation rule. +The line breaking can arise at the end of mostly every character. Therefore, +without Korean language supporting packages the line breaking and +justification of paragraphs will not be acceptable. +But when just single or a few Hangul characters are needed, for example in the case of typesetting +the author's name in Hangul, this package provides a casual way to print them out. + + +\section{Transliteration Rule}\label{sec:rule} + +\subsection{Tone Marks and Syllable Serapator} + +This package assumes that every Hangul syllable has Tone Mark which +must be explicitly put at the end of it. Table~\ref{tab:tonemark} +shows the input scheme of them. + +\begin{table}[h] +\centering +\caption{Tone Marks} \label{tab:tonemark} +\begin{tabular}{c|l} +\hline +input & description \\ \hline +\texttt{/} & for \emph{PyeongSeong}, no dot \\ \hline +\texttt{;} & for \emph{GeoSeong}, single dot on the left of a character, [U+302E] \\ \hline +\texttt{:} & for \emph{SangSeong}, double dots on the left of a character, [U+302F] \\ \hline +\end{tabular} +\end{table} + +The tone marks were used in the 15th century, but in the modern Korean they are +out of use. Nevertheless the \verb|/| mark in this package is also used in order to depict +the completion of composing a syllable --- i.e., syllable separator. So DO NOT miss it. + +However, it is possible to omit `\verb|/|' mark at the end of a word, i.e., just before \texttt{}, or at the end of the argument of \verb|\jamoword|. +Note that before the puctuation mark --- period , comma, etc., omitting \verb|/| is not permitted. + +\subsection{Consonants} + +Table~\ref{tab:cons} shows the transliteration rule for the consonants which are +used in the leading and trailing position of a syllable. + +\begin{table}[h] +\centering +\caption{Consonants} \label{tab:cons} +\fontspec{UnDotum.ttf} +\begin{tabular}{ll|ll|ll|ll} +\hline +ㄱ & g & ㄴ & n & ㄷ & d & ㄹ & r \\ +ㅁ & m & ㅂ & b & ㅅ & s & ㅇ & \textbf{x} \\ +ㅈ & j & ㅊ & c & ㅋ & k & ㅌ & t \\ +ㅍ & p & ㅎ & h & \char"3181 & \textbf{q} & \char"317F & \textbf{z} \\ +\char"3186 & \textbf{f} & & w & & & & \\ +\hline +\end{tabular} +\end{table} + +\begin{enumerate} +\item The corresponding letters ``g, n, d, m, b, s, j, k, t, p, h'' are +the same as Korean Romanization Method (RRK).\footnote{The \emph{Revised Romanization of Korean} 1995:2000 is the official Korean language romanization system in South Korea.} +\item The letter for `\textkorean{\jmcc{R}}' is allocated to \texttt{r} not \texttt{l}. +\item The letter `c' is for `\textkorean{\jmcc{C}}'. In the RRK, it is `\texttt{ch}' there. +\item Note that the letter for `\textkorean{\jmcc{X}}' is \texttt{x}, which is a bit strange, but commonly accepted `\texttt{ng}' was not to be chosen. It should be reserved for `\textkorean{\jamoword{@ng/}}' +\item And the letters `q, z, f' are more freely selected. These letters are the lost ones in Modern Korean. +\item The letter `w' is chosen to present \emph{Choseong Filler}. +\item The letters `l' and `lr' are for very rare case. In the 15th century Korean, `\textkorean{\jamoword{sla}}' and +`\textkorean{\jamoword{slra}}' were distinguishable. `sl' is chosen for the SIOS with left branch being longer, and `slr' means right branch longer. The same is the case `ssl', `sslr', `jl', `jlr' etc. +\item The `light labial consonants', \textkorean{\jmcc{BX}, \jmcc{PX}} in the Old Hangul can be input as `bx, px, bbx, mx'. +\item In the Modern Korean, only `gg, dd, bb, ss, jj' are additionally permitted in the leading consonant position, +But in the Old Hangul this limitation was not applied. So \emph{Choseong} can have multiple consonants, e.g., `bsg', `bsd', `ss', `sd' etc. +\item The leading `zero consonant' can be omitted. So if a syllable begins with vowel, then the leading `\textkorean{\jmcc{X}}' will appear. You can write the leading `x' of a syllable or not. +For example, `\verb|\jamoword{xax}|' and `\verb|\jamoword{ax}|' will generate the same result `\jamo{xax}'. +\end{enumerate} + +\subsection{Vowels} + +Table~\ref{tab:vow} shows the transliteration rule for vowels. + +\begin{table}[h] +\centering +\caption{Vowels}\label{tab:vow} +\ttfamily\fontspec{UnDotum.ttf} +\begin{tabular}{ll|ll|ll|ll|ll} +\hline +ㅏ & a & ㅓ & e & ㅗ & o & ㅜ & u & ㅡ & \textbf{v} \\ +ㅣ & i & \jmcc{@} & \textbf{@} & & & & & & \\ \hline +ㅑ & ya & ㅕ & ye & ㅛ & yo & ㅠ & yu & \kern-.3em\jmcc{@}\kern-.6em\jmcc{@} & @@ \\ \hline +ㅐ & ay, ai & ㅔ & ey, ei & ㅚ & oy, oi & ㅟ & uy, ui & ㅢ & vy, vi \\ +ㅒ & yay, yai & ㅖ & yey, yei & \jmcc{YOI} & yoi & \jmcc{YUI} & yui & \jmcc{@I} & @i \\ \hline +ㅘ & oa & ㅙ & oay, oai & ㅝ & ue & ㅞ & uey, uei & & \\ \hline +\end{tabular} +\end{table} + +\begin{enumerate} +\item The rule for vowels may look unfamiliar. But it is simple and easily rememberable. + +\item The letter `v' is never considered to be a vowel. But this package +determined it to stand for the vowel `\textkorean{\jmcc{V}}'. In fact, +the roman alphabets fall short of the vowels. This allocation is arbitrary. + +\item The lost `Arae-A' is allocated to `@', and the rare `Double Arae-A' to `@@', which are forgotten vowels in Modern Korean. +\end{enumerate} + +\subsection{Compatibility Jamos} + +The compatibility Jamo block in Unicode contains several Hangul Jamo characters, +which cannot be used to compose Hangul syllables, and are considered +independent Jamo characters respectively. + +To input the compatibility Jamos in the arguments of \verb|\jamoword| or \verb|jamotext|, +you are to type them in their capital letters (upper cases). And every compatibility Jamo has to be +separated with syllable separator --- \verb|/|. +Because the \verb|@| character has no upper case, write \verb|W| instead of \verb|@| to display compatibility `Arae-A'. + +Here is an example: +\begin{quote} +\begin{verbatim} +\jamoword{W/nvn a/rai/a/ra/go bu/rv/go A/oa bi/svs/ha/gei irg/nvn/da} +\end{verbatim} +\textkorean{\jamoword{W/nvn a/rai/a/ra/go bu/rv/go A/oa bi/svs/ha/gei irg/nvn/da}} +\end{quote} + + +\section{Proper Fonts}\label{sec:font} + +In order to typeset Hangul characters successfully with the input method +of this package, the help of the \emph{proper} font is crucial. +What we call \emph{proper} font is the font that has the Opentype feature of `Script Hangul', that is, the feature of conjoining jamo characters. +A Truetype font may have this Opentype feature. +Otherwise, it is regarded as an \emph{improper} font. + +Not so many fonts are \emph{proper}. +The fonts or font families listed in the following lines are +what we know \emph{proper}. +They can be downloaded from the url and used freely. And note that +\texttt{UnBatang} is already installed in your \TeX\,Live installation. + +\begin{description} +\item[Hamchorom LVT] Hamchorom fonts by Hancom Inc., and their variants with GSUB tables by KTS (the Korean \TeX\ Society). \url{https://github.com/dohyunkim/hcr-lvt} +\item[KoPub World] free fonts by Korea Publisher Society. \url{http://www.kopus.org/biz/electronic/font.aspx} +\item[Malgun Gothic] One of Windows 10 system font. +\item[Nanum Yet Hangul] Two font families from Naver. Nanum Myeongjo Yet Hangeul and Nanum Barun Gothic Yet Hangeul. \url{https://hangeul.naver.com/2014/archaicword} +\item[Noto CJK] Google's Noto CJK fonts. Or Adobe's Source Han fonts. \url{https://www.google.com/get/noto/help/cjk/} +\item[Un Batang] \verb|UnBatang.ttf|. on CTAN. \url{https://ctan.org/pkg/unfonts-core} +\end{description} + +To use one of these fonts, do not forget to provide +the \texttt{[Script=Hangul]} option. For example, you can specify +Hamchorom Batang LVT font as: +\begin{verbatim} +\newfontfamily\pmjamofont{HCR Batang LVT}[Script=Hangul] +\end{verbatim} +and then issue \verb|\pmjamofont| command in the scope of Hangul to be typeset. +It is recommended that the \emph{proper} font should be used consistently. + +\medskip + +In case the font you take is not \emph{proper}, you are to meet the warning +message at the console and log file, +\begin{verbatim} + Package fontspec Warning: (fontspec) + Font "batang" does not contain requested Script "Hangul". +\end{verbatim} +However, when \XeLaTeX\ is concerned, it is known that the \emph{Modern} Korean Characters (\emph{Hangul Precomposed Syllables} in the Unicode block [U+AC00] -- [U+D7A3]) can be rendered with this kind of font, in spite of the warning message. + + +\section{Examples} + +Now, we will show a few practical examples, where +the \emph{korean} environment of \pkg{polyglossia} package is used. +The preamble is like this: + +\begin{verbatim} +\usepackage{pmhanguljamo} +\usepackage{polyglossia} +\setotherlanguage{korean} +\newfontfamily\hangulfont{UnBatang.ttf}[Script=Hangul] +\end{verbatim} + +\subsection{Modern Hangul} + +\begin{verbatim} +\begin{korean} +\begin{jamotext} +e/rin/i/nvn na/ra/oa gye/rey/vi ap/nar/vr i/e/na/gar +sai/sa/ram/i/mv/ro gv/dvr/vi mom/goa ma/vm/vr gui/hi +ye/gye orh/go a/rvm/dab/go ssig/ssig/ha/gey ja/ra/do/rog +him/sse/ya han/da/. +\end{jamotext} +\end{korean} + +\begin{enumerate} +\item \textkorean{\jamoword{e/rin/i/nvn in/gan/v/ro/se +jon/jux/ha/ye/ya ha/mye sa/hoi/vi han sa/ram/v/ro/se +or/ba/rv/gey ki/ue/ya han/da/.}} +\end{enumerate} +\end{verbatim} + +\begin{quotation} +\begin{korean} +\begin{jamotext} +e/rin/i/nvn na/ra/oa gye/rey/vi ap/nar/vr i/e/na/gar +sai/sa/ram/i/mv/ro gv/dvr/vi mom/goa ma/vm/vr gui/hi +ye/gye orh/go a/rvm/dab/go ssig/ssig/ha/gey ja/ra/do/rog +him/sse/ya han/da/. +\end{jamotext} +\end{korean} + +\begin{enumerate} +\item \textkorean{\jamoword{e/rin/i/nvn in/gan/v/ro/se +jon/jux/ha/ye/ya ha/mye sa/hoi/vi han sa/ram/v/ro/se +or/ba/rv/gey ki/ue/ya han/da/.}} +\end{enumerate} +\end{quotation} + +\subsection{pre-1933 Hangul} + +A 15th century text with tone marks (\emph{BangJeom}). + +\begin{verbatim} +\begin{korean} +\begin{jamotext} +na/ras;mar:ss@/mi; dyuq/guig;ei; dar/a; +mun/jj@x;oa;ro; se/rv s@/m@s/di; a/ni;h@r/ss@i; +i;ren jyen/c@;ro; e/rin; b@ig;syeq;i; +ni/rv/go;jye; horf; bai; +i/sye;do; m@/c@m;nai: jey bdv;dvr; si/re; pye/di; +mod:h@rf no;mi; ha/ni;ra;. +\end{jamotext} +\end{korean} +\end{verbatim} + +\begin{quote} +\begin{korean} +\begin{jamotext} +na/ras;mar:ss@/mi; dyuq/guig;ei; dar/a; +mun/jj@x;oa;ro; se/rv s@/m@s/di; a/ni;h@r/ss@i; +i;ren jyen/c@;ro; e/rin; b@ig;syeq;i; ni/rv/go;jye; horf; bai; +i/sye;do; m@/c@m;nai: jey bdv;dvr; si/re; pye/di; +mod:h@rf no;mi; ha/ni;ra;. +\end{jamotext} +\end{korean} +\end{quote} + +And another example of 17th century, from \jamo{du/si/en/hai}, \emph{Selected Translations of +Du Fu's Poems}, without tone marks. + +\begin{verbatim} +\begin{verse} +\begin{korean} +\begin{jamotext} +g@/r@/mi p@/r@/ni sai de/ug h@i/o/,\\ +moy/hi pe/re/h@/ni gos/ bi/ci bvr bvd/n@n d@s/do/da/.\\ +ors bo/mi bon/d@in sdo di/na/ga/n@/ni \\ +e/nv na/ri i do/ra/gar h@i/o/. +\end{jamotext} +\end{korean} +\end{verse} +\end{verbatim} + +\begin{verse} +\begin{korean} +\begin{jamotext} +g@/r@/mi p@/r@/ni sai de/ug h@i/o/,\\ +moy/hi pe/re/h@/ni gos/ bi/ci bvr bvd/n@n d@s/do/da/.\\ +ors bo/mi bon/d@in sdo di/na/ga/n@/ni \\ +e/nv na/ri i do/ra/gar h@i/o/. +\end{jamotext} +\end{korean} +\end{verse} + +For more examples and information about this package, +please read the documentation \texttt{pmhanguljamo-kdoc.pdf} +(in Korean). + +\section{Acknowledgement} + +Thanks go to yihoze at the KTUG board, there he commented, +``The IMs I've tried such as Korean Windows Old Hangul IM or Saenaru IM +were all somewhat inconvenient. \ldots. +In my opinion, for the foreign scholar who +studies Korean language, especially Middle Age Korean language, +this kind of transliteration method may be much more convenient and +confident way of typesetting Korean than the IM solutions.''\footnote{\url{http://www.ktug.org/xe/index.php?mid=KTUG_open_board&document_srl=240134}} + +\end{document} diff --git a/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.pdf b/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.pdf new file mode 100644 index 0000000000..23c3829a8a Binary files /dev/null and b/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.pdf differ diff --git a/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.tex b/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.tex new file mode 100644 index 0000000000..8646c4d814 --- /dev/null +++ b/language/korean/pmhanguljamo/doc/pmhanguljamo-kdoc.tex @@ -0,0 +1,793 @@ +% +% Poorman's Hangul Jamo Input Method +% pmhanguljamo.sty 사용설명서 +% +% (C) 2020 Nova de Hi. +% part of pmhanguljamo package. +% +\documentclass[a4paper]{oblivoir} + +\hypersetup{colorlinks} + +\usepackage{fapapersize} +\usefapapersize{*,*,1in,*,1in,*} + +\usepackage{kotex-logo} +\usepackage{amssymb} +\usepackage{pmhanguljamo} +\usepackage{boxedminipage} + +\ifXeTeX +\def\fontfeatureoption{Script=Hangul} +\else\ifLuaTeX +\def\fontfeatureoption{Script=Hangul,RawFeature={mode=harf}} +\fi\fi + +%%% [Script=Hangul] is needed to typeset YETHANGUL +\setmainfont{Noto Serif} +\setsansfont{Noto Sans} +\setmonofont{Noto Sans Mono} +\setsansfont{Noto Sans CJK KR}[\fontfeatureoption] +\setkomainfont(Noto Serif CJK KR)(* Bold)(Noto Sans CJK KR Light)[\fontfeatureoption] +\setkosansfont(Noto Sans CJK KR)(* Bold)[\fontfeatureoption] +\setkomonofont(Noto Sans Mono CJK KR) + +\usepackage{tcolorbox} +\tcbuselibrary{listings,breakable} +\tcbset{listing engine=listings,colframe=gray,colback=white,size=normal} +\NewDocumentEnvironment {exampleside} {} + { \tcblisting{listing side text,righthand width=.38\textwidth} } + { \endtcblisting } + +\newcommand\pkg[1]{% + \textsf{#1}\index{#1}\index{패키지!#1}% +} + +\newcommand\env[1]{% + \textit{<#1>}\index{환경!#1}\index{#1}% +} + +\let\cmda\cmd + +%\makeindex +\parindent=0pt + +\begin{document} + +\title{Poorman's Hangul Jamo Input Method \\ \large pmhanguljamo.sty} +\author{Nova de Hi} +%\date{2020/07/17\quad v0.1} +%\date{2020/07/18\quad v0.1.1} +%\date{2020/07/19\quad v0.2.0} +\date{2020/01/20\quad v0.2.1} + +\maketitle + +\begin{exampleside} +\begin{jamotext} +g@/r@/mi p@/r@/ni sai de/ug h@i/o/,\\ +moy/hi pe/re/h@/ni gos/ bi/ci bvr bvd/n@n d@s/do/da/.\\ +ors bo/mi bon/d@in sdo di/na/ga/n@/ni \\ +e/nv na/ri i do/ra/gar h@i/o/. +\end{jamotext} +\end{exampleside} + +\tableofcontents* + +\section{목적} + +\pkg{pmhanguljamo.sty}는 ``Poorman's Hangul Jamo Input Method''에서 따온 이름이다. +알파벳과 몇 개의 기호문자만으로 한글 자모 (첫가끝) 입력을 대신할 수 있게 만든 것이다. +자모 조합 한글을 잘 처리할 수 있는 폰트의 도움을 받아 (\ref{sec:font}절을 보라) `모든' 한글 수백만자를 표현할 수 있다. +한글 패키지 \koTeX 과 함께 쓸 수 있고, 단독으로 사용해도 한글 표현이 가능하다. +외국어를 본문으로 하고 한두 글자의 한글만을 표현할 필요가 있을 때, 별도의 입력기가 없는 +상황에서 `옛한글'을 포함하는 문자와 문장을 출력하여야 할 때 쓸 수 있다. + +\hologo{XeLaTeX}, \hologo{LuaLaTeX}에서 사용할 수 있고 +\hologo{pdfLaTeX}은 지원하지 않는다. + +\section{사용법} + +\subsection{패키지 사용 선언} + +\begin{boxedverbatim} +\usepackage{pmhanguljamo} +\end{boxedverbatim} + +preamble에 위의 문장을 둔다. 패키지의 옵션은 따로 없다. + +\subsection{명령과 환경} + +\subsubsection{\texttt{\bs jamoword} 명령} + +\begin{boxedverbatim} +\jamoword{} +\end{boxedverbatim} + +한글 자모를 알파벳으로 입력하여 출력한다. +하나 또는 둘 이상의 단어가 올 수 있다. (단 하나의 단어만을 처리하는 \cmda{\jamotextcmd}라는 명령이 +있기는 하나 내부적으로 사용되는 것이다.) + +\medskip + +\begin{exampleside} +\jamoword{na/ras;mar:ss@/mi; dyuq/guig;ei dar/a;} +\end{exampleside} + +\subsubsection{\env{jamotext} 환경} + +\begin{boxedverbatim} +\begin{jamotext} + +\end{jamotext} +\end{boxedverbatim} + +\env{jamotext} 환경은 여러 문단을 포함하는 긴 문장을 식자할 수 있다. + +\medskip +\begin{exampleside} +\begin{jamotext} +na/ras;mar:ss@/mi; dyuq/guyg;ey; dar/a; + +mun/jj@x;oa;ro; se/rv s@/m@s/di; a/ni;h@r/ss@i; +\end{jamotext} +\end{exampleside} + +\subsubsection{\texttt{\bs jmcc} 명령} + +\begin{boxedverbatim} +\jmcc{} +\end{boxedverbatim} + +음절이 아니라 한 개의 자모만을 표시할 목적으로 \href{https://en.wikipedia.org/wiki/Hangul_Compatibility_Jamo}{한글 호환 자모}를 식자하려 할 때 사용하는 명령이다. +호환 자모를 \cmda{\jamoword} 명령의 인자 안에서 쓰는 방법은 \ref{sec:compjamo}절을 보라. 이 명령은 본문 +중에서 독립적으로 쓰기 위해 마련되었다. +인자로 단 하나의 자모만이 와야 한다. + +\medskip +\begin{exampleside} +\jmcc{BSG} \jmcc{@} \jmcc{UEY} +\end{exampleside} + +\subsection{성조표지와 음절} + +입력에는 로마자 알파벳과 \verb|@| 부호, 그리고 세 개의 성조표지(방점) 기호 \verb|/|, \verb|;|, \verb|:|를 사용한다. + +\emph{성조표지가 와야 음절이 완성된 것으로 본다}. 모든 한글 음절은 반드시 성조표지로 끝난다. +평성이 아닌 성조표지는 (적절한 폰트에서) 한글 음절의 왼편에 찍힌다. + +\begin{table}[htpb] +\centering +\caption{성조 표지} \label{tab:tonemarker} +\begin{tabular}{l|l|l} +\hline +\texttt{/} & 평성 & 점 없음 \\ \hline +\texttt{;} & 거성 & 점 하나 (\jamoword{m@s;no/p@n; so/ri;}) \\ \hline +\texttt{:} & 상성 & 점 둘 \\ \hline +\end{tabular} +\end{table} + +성조 표기를 하지 않는 경우에도 음절의 완성을 나타내는 \verb|/|를 두어야 한다. +다만 이 경우에 입력 편의를 위한 예외로서 +그 뒤에 스페이스가 와서 단어 입력이 종료되는 위치(또는 입력 문자열의 마지막)에서는 \verb|/|를 생략할 수 있다. 다음 예를 보아라. + +\medskip +\begin{exampleside} +\jamoword{naix:jyuq/ G/ so/ri;n@n;}\\ +\jamoword{naix:jyuq G so/ri;n@n;} +\end{exampleside} + +스페이스 앞에서 \verb|/|를 생략할 수 있음과 관련하여 스페이스가 아니라면 생략할 수 없음에 주의하라. 예컨대 마침표와 같은 문장부호가 올 때는 그 문장부호 앞에서 \verb|/|를 생략할 수 없다. + +\medskip +\begin{exampleside} +\jamoword{jas ans bo/m@i pvr/oa na/mo/sbun gi/peys/do/da/.} +\end{exampleside} + +\subsection{알파벳 대응 문자} + +알파벳 소문자를 이용하여 한글 자모 영역의 문자를 입력한다. 자음과 모음의 대응 규칙은 다음과 같다. + +\subsubsection{자음} + +\begin{table}[h] +\centering +\caption{알파벳-자모 대응 규칙: 자음}\label{tab:cons} +\ttfamily +\begin{tabular}{ll|ll|ll|ll} +\hline +ㄱ & g & ㄴ & n & ㄷ & d & ㄹ & r \\ +ㅁ & m & ㅂ & b & ㅅ & s & ㅇ & \textbf{x} \\ +ㅈ & j & ㅊ & c & ㅋ & k & ㅌ & t \\ +ㅍ & p & ㅎ & h & \char"3181 & \textbf{q} & \char"317F & \textbf{z} \\ +\char"3186 & \textbf{f} & & & & & & \\ +\hline +\end{tabular} +\end{table} + +\begin{enumerate}[1)] \firmlist +\item \texttt{g}, \texttt{n}, \texttt{d}, \texttt{r}, \texttt{m}, \texttt{b}, \texttt{s}, \texttt{j}, \texttt{c}, \texttt{k}, \texttt{t}, \texttt{p}, \texttt{h}는 연상이 가능할 것이므로 따로 설명하지 않는다. \jmcc{R}에 대하여 +\verb|r|만을 사용하고 \verb|l|을 쓰지 않는다. +\item `\jmcc{X}'(이응)에 대하여 \verb|x|를 채택하였다. 원래 이것은 오래 전 \pkg{frktex}이라는 패키지에서 +첫소리 이응에 대하여 \verb|x|를 썼던 적이 있으므로 그 유래가 아주 없다고 할 수는 없겠다. 다만 이 패키지는 +종성 이응 받침도 \verb|x|를 쓴다. +\item `\jmcc{Q}'(옛이응)을 \verb|q|로 한 것은 역시 \pkg{frktex}에서 온 것인데 ``꼭지 달린 이응''이라는 글자 모양이 \verb|q|를 연상시킨다''는 이유였다고 한다. 그럴 법도 하다. +\item `\jmcc{Z}'(반시옷)을 \verb|z|로 한 것은 납득할 수 있다고 본다. z가 s의 유성음에 대응하기 때문에. +\item 가장 곤란했던 것은 \jmcc{F}(여린히읗)이었다. 사용되지 않은 자판 가운데서 선택할 수밖에 없는데 \texttt{l}, \texttt{v}, \texttt{w}, \texttt{f} 정도가 선택 가능한 범위였다. 알파벳이 아닌 부호문자 중에서 선택하는 것도 생각해보았으나 역시 자판의 윗줄로 올라가는 것은 꺼려져서 \verb|f|로 선택하였다. 순전히 편의에 의한 대응이다. +\item `\jamotextcmd{sl@}'나 `\jamotextcmd{slr@}'와 같은 특별한 글자, `\jamotextcmd{ssla/sslra/jla/jlra/jjla/jjlra/cla/clra}'의 초성 글자들, 즉 훈민정음 언해의 ``\jamoword{dyuq/guyg;so/ri;yeys; ni;sso/ri;}'' 표기에서 쓰이는 齒頭\cntrdot 正齒音을 구분하기 위한 글자들은 \texttt{s}, \texttt{j}, \texttt{c}에 \texttt{l}, \texttt{lr}을 붙여서 표기한다. \verb|l|이 왼쪽(치두음), \verb|lr|이 오른쪽(정치음)이 더 길어지는 글자가 된다. +\item `\jmcc{BX}', `\jmcc{BBX}', `\jmcc{MX}', `\jmcc{PX}'와 같은 ``\jamoword{ib/si/ur;ga/b@i;ya/bx@n; so/ri;}'' 표기는 \verb|x|를 이어써서 표기한다. 각각, \texttt{bx}, \texttt{bbx}, \texttt{mx}, \texttt{px}. +\item 겹자음\cntrdot 복자음은 이어쓴다. \texttt{gg} \jmcc{GG}, \texttt{bsg} \jmcc{BSG}, \texttt{bsd} \jmcc{BSD}, \texttt{rf} \jmcc{RF}. +\item `제로자음'인 초성 이응은 생략할 수 있다. 모음으로 시작하면 초성 이응을 식자해준다. \verb|\jamoword{an}| \jamoword{an}. 만약 정말로 초성을 비우기를 원한다면(즉 초성 필러를 쓰려 한다면) \verb|w|를 그 위치에 쓰도록 하라. 이것은 종성에는 적용되지 않는다. \verb|\jamoword{wan}| \jamoword{wan}. +\end{enumerate} + +\subsubsection{모음} + +\begin{table}[h] +\centering +\caption{알파벳-자모 대응 규칙: 모음} \label{tab:vow} +\ttfamily +\begin{tabular}{ll|ll|ll|ll|ll} +\hline +ㅏ & a & ㅓ & e & ㅗ & o & ㅜ & u & ㅡ & \textbf{v} \\ +ㅣ & i & \jmcc{@} & \textbf{@} & & & & & & \\ \hline +ㅑ & ya & ㅕ & ye & ㅛ & yo & ㅠ & yu & \kern-.3em\jmcc{@}\kern-.6em\jmcc{@} & @@ \\ \hline +ㅐ & ay & ㅔ & ey & ㅚ & oy & ㅟ & uy & ㅢ & vy \\ +ㅒ & yay & ㅖ & yey & \jmcc{YOI} & yoi & \jmcc{YUI} & yui & \jmcc{@I} & @i \\ \hline +ㅘ & oa & ㅙ & oay & ㅝ & ue & ㅞ & uey & & \\ \hline +\end{tabular} +\end{table} + +\begin{enumerate}[1)] +\item 기본 모음 ㅏ, ㅓ, ㅗ, ㅜ, ㅡ, ㅣ, \jmcc{@}(\texttt{@})는 한 글자로만 표기한다. ㅑ, ㅕ, ㅛ, ㅠ는 \verb|y|를 앞에 붙인다. +\item `ㅡ'를 영문자의 자음에 해당하는 \verb|v|에 대응시킨 것은 이상하게 보일 수 있다. 그러나 윗 항을 충실하게 지키려다 보니 부득이했다. 실로 이 홀소리 글자의 로마자 표기는 혼란스럽다고 생각하고 있는데, 표준인 \texttt{eu}만이 아니라 \texttt{y}, \texttt{u} 등이 있었고, 다른 어떤 제안에서는 \verb|w|도 있었던 것으로 기억한다. 어차피 마땅한 방법이 없다면 이렇게 약속하고 쓰는 것이 한 방법이라 생각한다. \verb|v|자를 죽 늘리면 `ㅡ'가 되는 것처럼 보이는 연상에서 비롯되었는지 모른다. +\item \texttt{e}를 보통 `에'라고 읽기 때문에 `ㅓ'를 \verb|e|에 할당한 것이 익숙지 않을 수 있다. 이것은 Yale 표기법에 그 기원이 있다. +\item `ㅐ, ㅔ'는 단모음으로 간주되기 때문에 \texttt{ay}, \texttt{ey}라고 쓰도록 하였다. 비슷한 이유에서 \texttt{oy}, \texttt{uy}라고 되었다. +그러나 이런 음성학적 지식이 표기에 반드시 필요하다면 그것도 불편하다. 그래서 `\texttt{ai}, \texttt{ei}, \texttt{oi}, \texttt{ui}'라고 입력하는 것도 허용하였다. `ㅢ'의 경우에도 +\texttt{vy}와 \texttt{vi} 둘 다 가능하다. + +\verb|\jamoword{sai/say}| \jamoword{sai/say}.\quad \verb|\jamoword{sei/sey}| \jamoword{sei/sey}. \\ +\verb|\jamoword{soi/soy}| \jamoword{soi/soy}.\quad \verb|\jamoword{sui/suy}| \jamoword{sui/suy}. \\ +\verb|\jamoword{gvi/gvy}| \jamoword{gvi/gvy}. + +그러나 \jmcc{@I}는 단모음으로 인식될 가능성이 없다고 보아 \verb|@i|만을 취하였다. + +\verb|\jamoword{g@i}| \jamoword{g@i}. + +\item `쌍아래아'는 현대의 제주어 표기에서 이따금 필요하다. 모양대로 \verb|@@|로 적으며 \verb|y@|를 취하지 않았다. 현대 국어에서 이 글자의 소리는 잊혀진 것이라서 소리로 연상할 수 없기 때문이다.\\ +\verb|\jamoword{@@/nam/vn}| \jamoword{@@/nam/vn}. +\item 표준 로마자 표기법에서 \texttt{wa}, \texttt{wo}, \texttt{we}, \texttt{wi}로 표기할 때 나타나는 반자음 \verb|w|은 채택하지 않았다. `ㅘ, ㅝ, ㅟ'는 생긴 대로 \texttt{oa}, \texttt{ue}, \texttt{ui}로 적는다. +\item 이 패키지는 Unicode 4.0의 한글 자모 보충 A, B를 지원한다. 그러므로 한글 자모 영역([U+11XX])에는 없는 `\jamoword{wuye}'와 같은 모음을 표기할 수 있다. \verb|\jamoword{sa/guye}| \jamoword{sa/guye/}. 물론 폰트가 이를 지원해야 한다. +\end{enumerate} + +\subsubsection{호환자모 음절} \label{sec:compjamo} + +\cmda{\jamoword}나 \env{jamotext} 범위 안에서 호환 자모를 식자하려면 해당하는 자모를 대문자로, 하나의 음절로 입력한다. +별도로 \cmda{\jmcc}를 쓰지 않는다. 그러나 반드시 하나의 자모가 한 음절이어야 한다.\\ +\verb|\jamoword{B/n@n; ib/si/ur;sso/ri;ni;}| +\jamoword{B/n@n; ib/si/ur;sso/ri;ni;} + +\verb|\jamoword{孟m@ix/子j@/I/ g@r/@/sya/d@i}| +\jamoword{孟m@ix/子j@/I g@r/@/sya/d@i} + +\medskip + +호환 자모 아래아 `\jmcc{@}'를 \cmda{\jamoword} 인자 안에서 식자하려 할 때는 자모 아래아 `\jamoword{w@}'와 +구별하기 위해 대문자 \texttt{W}로 표기해야 한다. \verb|W|와 \verb|WI|만이 지원된다. + +\verb|\jamoword{W/n@n; 呑t@n/D/字/jj@x; ga/on;d@is;so/ri; g@;t@;ni/ra;.}| \\ +\jamoword{W/n@n; 呑t@n/D/字/jj@x; ga/on;d@is;so/ri; g@;t@;ni/ra;.} + +\subsubsection{한자와 음절 한글} + +\cmda{\jamoword} 명령과 \env{jamotext} 환경 안에 오는 인자는 다음과 같은 문자에 대하여 예약이 되어 있다. +\begin{itemize}\firmlist +\item 알파벳 문자 --- 한글 자모 문자에 대응한다. +\item \texttt{;}, \texttt{:}, \texttt{/} --- 이 세 개의 부호는 성조표지, 음절완성을 표시하기 위하여 예약되어 있다. +\item \texttt{|} --- 이 한 개의 부호문자는 내부적으로 사용하도록 예약되어 있다. +\end{itemize} +이를 제외한 문자는 입력한 대로 찍힌다. 즉 한글 완성형 음절 문자나 한자 및 숫자와 문장부호가 모두 그대로 출력된다. +콜론, 세미콜론, 슬래시는 각각 \cmda{\ColonMark}, \cmda{\SemiColonMark}, \cmda{\SlashMark} 명령을 사용할 수 있게 해두었다. + +\medskip +\begin{exampleside} +\jamoword{15 세기 표기\ColonMark{} 國之語音, 우리나라의 말이 $\Rightarrow$ na/ras/mar/ss@/mi} +\end{exampleside} + +단일 매크로 자체는 그대로 출력된다. 그러나 인자를 취하는 매크로의 인자로 로마자 알파벳이 들어가는 경우에는 +이 로마자를 자모 한글로 처리하려 하기 때문에 오류가 발생한다. 알파벳 포함 인자를 취하는 매크로는 이 범위 안에 +넣지 않는 것이 좋다. + +\medskip + +음절문자뿐 아니라 자모 한글의 입력도 그대로 출력된다. 어디선가 옛한글% +\footnote{1933년 이전 표기법의 한글을 가리킨다. +유니코드의 한글 음절 문자 영역에서 표현되지 않는 한글을 통칭하는 것이나 +현대 한국어 중에서 제주어를 기록할 때도 쓰이고, 워드 프로세서 \jamoword{h@n/gvr}의 +이름을 적을 때도 쓰이기 때문에 그리 `옛' 것은 아니다. +이 글에서는 관행을 따라 옛한글이라고 부르기로 한다.} +텍스트를 복사해와서 넣을 때 유용할지도. +다음 예에서 이 패키지의 입력 방식과 첫가끝 입력 방식이 혼용되어 있는 것을 볼 수 있다. + +\medskip +\begin{exampleside} +\jamoword{(/du/si/en/hai dvx/go/) +ᄇᆞᄅᆞ미 ᄲᆞᄅᆞ며 하ᄂᆞᆯ히 놉고 나ᄇᆡ 됫ᄑᆞ라미 슬프니} +\end{exampleside} + +\section{폰트} + +\subsection{사용가능한 글꼴}\label{sec:font} + +자모 조합 한글을 출력하려면 이를 해낼 수 있는 글꼴이 필요하다. 소위 `옛한글' 글꼴이라지만 PUA 옛한글 +5000여자의 사용자 영역 글자만을 가지고 있는 글꼴로는 이 패키지에서 말하는 옛한글을 식자할 수 없다. 새바탕\cntrdot 새굴림과 같은 한양 옛한글 +폰트, 전주완판본체, 제주폰트 등이 모두 옛한글에 사용할 수 없는 폰트에 해당한다. + +자모 조합 한글을 구현할 수 있는 몇몇 글꼴을 테스트해보겠다. + +\begin{boxedverbatim} +sa:r@m/ma:da; h@i:xxye; su:bxi; ni/gye; +\end{boxedverbatim} + +\newcommand\teststr{\jamoword{sa:r@m/ma:da; h@i:xxye; su:bxi; ni/gye; +}} + +\newcommand\testfont[1]{% + \begingroup + \begin{adjustwidth}{2em}{2em} + \adhochangulfont[\fontfeatureoption]{#1}\teststr + \end{adjustwidth} + \endgroup +} + +함초롬 바탕 \testfont{HCR Batang LVT} + +은 바탕 \testfont{UnBatang} + +본명조 또는 Noto Serif CJK \testfont{Noto Serif CJK KR} + +나눔명조옛한글 \testfont{NanumMyeongjo-YetHangul.ttf} + +KoPubWorld 바탕 \testfont{KoPubWorldBatangMedium} + +함초롬 돋움 \testfont{HCR Dotum LVT} + +본고딕 또는 Noto Sans CJK \testfont{Noto Sans CJK KR} + +나눔바른고딕옛한글 \testfont{NanumBarunGothic-YetHangul.ttf} + +맑은 고딕 \testfont{Malgun Gothic} + +KoPubWorld 돋움 \testfont{KoPubWorldDotumMedium} + +\medskip + +옛한글을 무리없이 표현하는 것은 현재 이 정도인 것 같다. +각 폰트는 특정한 문자에 대해서 약간의 차이를 보이기도 한다. 참고로 이 문서에서는 +본문과 옛한글에 Noto Serif CJK KR을 사용하였다. + +\hologo{LuaTeX}으로 컴파일하는 경우에는 위에 든 폰트들, 즉 \texttt{Script Hangul} 속성을 +가진 폰트만 사용 가능하다. \hologo{LuaTeX}과 이 패키지의 관계에 대해서 +\pageref{sec:luatex}페이지를 참고하라. + +\ifXeTeX + +\bigskip + +한글 자모 영역의 글리프를 가지고 있는 글꼴이 있다. 성조표지를 잘 처리하지 못하는 경우가 있고 옛한글 +글자꼴이 반듯하지 않지만 어쨌든 글자가 나오기는 할 것이다. 이것은 \texttt{Script Hangul} 속성을 갖고 +있는 것은 아니며 단지 한글 자모 영역 글리프를 영리하게 배열한 것이다. 방점 없이 테스트해보겠다. + +\medskip + +\renewcommand\teststr{\jamoword{sa/r@m/ma/da h@i/xxye su/bxi ni/gye +}} + +은 자모바탕 \testfont{UnJamoBatang} + +은 돋움 \testfont{UnDotum} + +\medskip +그러나 자모 영역 자면이 있다 하더라도 글리프가 잘 조성되어 있지 않은 글꼴에서는 +다음과 같이 모아쓰기가 되지 않는 형태로 출력된다. 이런 글꼴은 옛한글에 사용할 수 없다. + +\medskip +전주완판본 순L \testfont{TSTJJWanSunL} + +\medskip + +\textbf{현대 한글 음절문자}는 적어도 \hologo{XeLaTeX}에서는 모두 제대로 표현될 것이다. +자모 코드로부터 한글 음절을 (유니코드 표준을 따라) 구성하는 일을 폰트가 아니라 \hologo{XeTeX}이 하고 있음을 짐작할 수 있다.\footnote{이 패키지의 입력 방법으로 \hologo{XeLaTeX} 컴파일하여 만들어진 현대 한글 음절 영역 문자를 pdf로부터 +복사하여 편집기에 붙여넣기하면 자모 코드가 아니라 음절 코드로 들어가는 것을 확인할 수 있다.} +현대 한글만을 표기하려 한다면 폰트의 제약이 줄어든다고 하겠다. + +\begin{boxedverbatim} +o/dvx/vn ja/ey a jo/sen/vi dog/rib/gug/im/goa +\end{boxedverbatim} + +\renewcommand\teststr{\jamoword{o/dvx/vn ja/ey a jo/sen/vi dog/rib/gug/im/goa}} + +백묵 바탕 \testfont{batang.ttf} + +Adobe 명조 \testfont{AdobeMyungjoStd-Medium.otf} + +전주완판본 순L \testfont{TSTJJWanSunL} + +제주한라산 \testfont{JejuHallasan.ttf} + +\fi + +\subsection{폰트의 지정} + +특정 언어 패키지나 입력기의 제약 없이 한글 글꼴을 지정하는 것만으로 +현대 한글과 옛한글을 모두 표현할 수 있다는 것이 \pkg{pmhanguljamo}의 장점이다. +다만 \koTeX\ 없이는 글자 사이의 행나눔이나 양끝맞추기 등 한글 문장 식자에 꼭 필요한 몇 가지 기능이 구현되지 +않을 것이므로 이런 점은 감안하여야 한다. 대체로 몇 자 정도의 한글을 넣어야 하는 때에 유용하리라 본다. + +\koTeX\ 패키지와 함께 쓸 때와 그렇지 않을 때를 나누어서 간단히 사용법을 보이겠다. + +\subsubsection{\koTeX\ 문서} +만약 \koTeX\ (\pkg{xetexko} 또는 \pkg{luatexko})과 함께 사용하는 경우라면 본문 한글 글꼴을 +다음과 같이 지정한다. + +\texttt{[Script=Hangul]} \emph{옵션을 반드시 주어야 한다}는 점을 기억하자.\footnote{이것은 +폰트가 가지고 있는 오픈타입 속성을 활성화하여 자모 한글을 제대로 출력하도록 지정하는 역할을 한다. 자모 한글을 +처리하는 기능을 가지고 있지 않은 글꼴에서는 아무 역할도 하지 않고 컴파일 시 콘솔에 경고 메시지를 보일 것이다.}% +\textsuperscript{, }\footnote{\hologo{LuaTeX}에서는 약간의 +추가 옵션이 더 필요할 수 있다. 이 문서의 이후 \texttt{[Script=Hangul]}을 주라고 하는 때에 +모두 동일하다. \pageref{sec:luatex}페이지의 부록 B를 보라.\label{fn:fontoption}} + +\begin{boxedverbatim} +\setmainhangulfont{Noto Serif CJK KR}[Script=Hangul] +\end{boxedverbatim} + +본문과 폰트를 달리 쓰려 한다면 \cmda{\jamoword} 또는 \env{jamotext} 범위에 다음과 같이 임시로 한글 글꼴을 적용한다. + +\begin{boxedverbatim} +\hangulfontspec[Script=Hangul]{HCR Batang LVT} +\end{boxedverbatim} + +\cmda{\adhochangulfont} 명령은 이와 동일한 명령이다. 이 폰트의 적용 범위를 설정하거나 하는 것은 문서작성자에게 맡겨져 있다. + +\subsubsection{\koTeX 이 아닐 때} + +\koTeX\ 문서가 아닐 때는 \pkg{fontspec} 패키지를 이용한다. main font를 위의 글꼴 중의 하나로 하거나(이 때에도 \texttt{[Script=Hangul]} 옵션을 반드시 지정하여야 한다.), +\cmda{\newfontfamily}로 글꼴 명령을 만들어 쓰거나, +아니면 한글이 필요한 부분에만 \cmda{\fontspec}으로 글꼴을 지정해주는 것으로 될 것이다. +\fref{fig:sample}\는 \pkg{article} 문서의 한 예이다.\footnote{폰트에 부여하는 +옵션에 관하여 각주~\ref{fn:fontoption}\을 볼 것.} + +\bigskip + +\pkg{polyglossia}와 함께 사용하는 것도 잘 된다.\footnote{\pkg{polyglossia}는 \XeLaTeX 에서만 사용 가능하다.} +다음은 이 경우의 한 설정 방법이다. +(이 보기에서는 한국어를 other language로 설정하고 있는데 만약 main language로 설정한다면 +\env{korean} 환경 안이 아니라도 한글 폰트가 적용된다.) +\pkg{polyglossia}를 사용하여 \env{korean} 환경에서 +쓰게 되면 한국어 조판에 필요한 상당한 지원이 이루어진다. + +\begin{boxedverbatim} +\documentclass{article} +\usepackage{polyglossia} +\setmainlanguage{english} +\setotherlanguage{korean} +\newfontfamily\hangulfont{UnBatang}[Script=Hangul] +\usepackage{pmhanguljamo} + +\begin{document} +\begin{korean} +\jamoword{han/gug/e/rvr han/gvr/ro} +\end{korean} +\end{document} +\end{boxedverbatim} + +만약에 \env{korean} 환경이 시작되면 그 안에서는 (무조건) pmjamo 입력 모드가 되도록 하려면 +다음 코드를 preamble에 두면 된다. + +\begin{boxedverbatim} +\usepackage{etoolbox} +\apptocmd\korean{\begin{jamotext}}{}{} +\pretocmd\endkorean{\end{jamotext}}{}{} +\end{boxedverbatim} + +이제 다음과 같이 간단히 입력할 수 있다. + +\begin{verbatim} +\begin{korean} +na/ras/mar/ss@/mi +\end{korean} +\end{verbatim} + +그러나 위의 처방은 이 환경 안의 모든 로마자가 한글이라는 확신이 있을 때만 적용해야 할 것이다. +\env{korean} 환경 안에서 로마자를 입력해야 할 일이 있을지 모르기 때문이다. + +\begin{figure} +\centering +\begin{boxedminipage}{\dimexpr\textwidth-2.5cm\relax} +\begin{verbatim} +\documentclass{article} +\usepackage{fontspec} +\newfontfamily\hngljmfont{HCR Batang LVT}[Script=Hangul] +\usepackage{pmhanguljamo} +\newcommand*\jmhangul[1]{% + \begingroup + \hngljmfont\jamoword{#1}% + \endgroup +} + +\begin{document} +Say `Hello' in Korean, +\jmhangul{an/nyex/ha/sey/yo}. +\end{document} +\end{verbatim} +\end{boxedminipage} +\caption{article에서 pmhanguljamo을 쓰는 예}\label{fig:sample} +\end{figure} + +\section{贅辭} + +이 패키지를 만들게 된 사연이 이러하다. +Kubuntu 리눅스에서 옛한글이 사용되는 문서를 작성할 일이 있었다. \texttt{fcitx} 입력기가 기본으로 설치되어 있었는데 +옛한글 입력이 되는 입력기를 설정하는 문제로 골머리를 썩이는 경험을 하게 된 것이다. +세벌식 자판 배열은 이미 잊은 지 오래. \texttt{nabi}는 크롬이나 +QT에서 뭔가 이상하게 동작하거나 아예 한글 입력이 안 되거나\ldots\ldots. +\LaTeX\ 문서인데 굳이 입력기가 필요한가 생각이 들어 간단히 로마자 대응 입력(transliteration)으로 한글과 옛한글을 +입력하도록 하면 이 문제로 시간낭비하지 않아도 되지 않을까 싶어 시작하게 된 일이었다. +(그리고 입력기 설치보다 더 많은 시간과 \jamoword{ke/xpi/}--\footnote{이 표기를 +이태준 (1940), \ccnm{文章講話} (경성 종로, 文章社), p.~23에서 보았다. `\jamotextcmd{pxi}'가 +아니라 `\jamotextcmd{xpi}'이다. 부록의 \fref{fig:mun} 참조. +인쇄 상태로 미루어보면 `\jamotextcmd{xpi}'자 활자가 있었던 것 같지는 않고 `피'를 식자한 후에 왼편에 +조그마한 고리를 달아 인쇄한 것으로 보인다.}% +를 소비하였다.) + +옛한글 입력과 관련하여, Mac OS에서는 구름 입력기가 있더라. 한글 Windows 10은 시스템 자체에 +옛한글 입력기가 있는 것 같고 여전히 새나루나 날개셋도 있다. +그러나 어떤 것이든 시스템 설정을 바꾸거나 새로운 앱을 설치하거나 해야 하는 것으로 귀찮음을 감수할 수밖에 없다. + +만들어놓고 보니 아예 한글 입력 자체가 불가능한 상황, +즉 시스템 설정을 건드릴 수도 없고 새로운 프로그램을 설치할 수도 없거나 +한글 입력기 자체가 없거나, +서버에 접속하여 문서를 작성하는 상황이라도 한글과 옛한글을 포함한 문서를 작성할 수 있게 되었다. +\emph{실용적으로 쓸 일이 있을까} 싶기는 하지만 버리기도 아까워서 기능을 보완하고 정리해두기로 하였다. + +이 ``한글 대응 입력'' 방식이라는 것은 나름 그 유래가 있다. \href{https://www.yudit.org/}{Yudit}이라는 편집기의 +옛한글 입력 방식이 그러하고 \pkg{frktex}에서도 역시 이런 식으로 한글을 입력했다. +한글 로마자 입력기(워드 프로세서에 내장된 것도 있고 시스템 입력기의 입력 방식 중의 하나인 경우도 있다)들은 +특히 \texttt{eu}, \texttt{eo} 모음 때문에 너무나 많은 키를 눌러야 해서 내가 그리 좋아하지 않았지만. + +그리고 옛한글 입력기가 있다 하더라도 두벌식 옛한글 입력이 필연적으로 겪게 되는 음절 경계의 문제는 피할 수 없다. +모음과 모음 사이에 최대 6개의 자음이 올 수 있는 조건에서 음절 경계의 판별을 완전히 자동화하는 것은 +불가능하다고 생각한다. 이 패키지에서도 그런 문제를 고려하여 처음부터 음절 경계를 입력하도록 +하였다. 약간의 번거로움은 피할 수 없지만 그 때문에 구현이 아주 간단해졌고 예외 처리를 위한 +고민을 해소할 수 있었다. +이와 관련하여 종성을 대문자로 입력하는 방안(Yudit 방식)을 유력하게 고려하였지만 쉬프트 누르기를 싫어하는 +나는 이를 채택하지 않았다. ``쉬프트를 누르느니 슬래시를 한 번 치고 말겠다.'' + +\bigskip + +이 패키지를 만들다보니 참 세상 편해졌다는 생각을 안 할 수가 없었다. +Expl3는 내가 원하는 일을 너무나 간단하게 구현할 수 있게 해주었다. \hologo{XeTeX}, \hologo{LuaTeX} 엔진의 유니코드 처리 기능은 한글 사용자에게 참 많은 혜택을 주었다고 생각한다. +십수 년 전에 옛한글 폰트와 구현을 만들려고 했던 여러 시도를 기억하는 입장에서는 당시 고민했던 문제가 말끔하게 +해결되어 있는 현재 상황이 믿어지지 않을 정도이다. +모든 한글을 잘 표현하는 좋은 폰트를 가지게 된 것은 무엇보다 반가운 일이다. 그런 폰트가 더 많아지기를 바란다. + + + +\section{변경 이력} + +\textbullet\ v0.1 (2020/01/17): 첫 릴리스. + +\textbullet\ v0.1.1 (2020/01/18): 호환자모 `\jmcc{@}' 입력 버그 수정. + +\textbullet\ v0.1.2 (2020/01/18): \hologo{LuaTeX} 컴파일 관련 수정. 문서 갱신. + +\textbullet\ v0.2.0 (2020/01/19): \texttt{pmhanguljamo}로 명칭 변경. + +\textbullet\ v0.2.1 (2020/01/20): \verb|\ColonMark| bug fix. thanks to yihoze. + +%%% APPENDICES +\ExplSyntaxOn +\int_new:N \l_appsec_int +\newcounter{tmpa} +\NewDocumentCommand \appsec {} +{ + \int_gincr:N \l_appsec_int + \int_to_Alph:n { \l_appsec_int } +} + +\ExplSyntaxOff + + +\newpage + +\section*{부록 \appsec. 이 문서 컴파일에 필요한 폰트} +\addcontentsline{toc}{section}{\string\qquad 부록} + +이 문서의 한글과 한자 부분에 다음과 같은 폰트를 사용하였다. +모두 설치되어 있어야 컴파일할 수 있다. + +\begin{description} \firmlist +\item[Noto CJK] Noto Serif CJK, Noto Sans CJK, Noto Sans Mono CJK 폰트. \href{https://www.google.com/get/noto/help/cjk/}{Google Noto CJK}. +Adobe사의 \href{https://source.typekit.com/source-han-serif/kr/}{본명조(Source Han Serif)}\cntrdot \href{https://github.com/adobe-fonts/source-han-sans/tree/release/}{본고딕(Source Han Sans)}과 거의 같다. +\item[함초롬 LVT] 함초롬 바탕 LVT, 함초롬 돋움 LVT. 한글과컴퓨터 \& 한국텍학회. \href{http://wiki.ktug.org/wiki/wiki.php/%ED%95%A8%EC%B4%88%EB%A1%AC%EC%B2%B4LVT}{KTUG:함초롬체 LVT}. +\item[나눔 옛한글] 나눔명조 옛한글, 나눔바른고딕 옛한글. \href{https://hangeul.naver.com/2014/archaicword}{네이버 한글한글아름답게}. +\item[KoPubWorld] KoPubWorld 바탕, KoPubWorld 돋움. \href{http://www.kopus.org/biz/electronic/font.aspx}{한국출판인회의}. +\item[맑은 고딕] Windows 8 이후 한글 Windows 폰트. 마이크로소프트. +\item[은 글꼴] 은 바탕 \TeX\,Live 배포 서체. +\end{description} + +\ifXeTeX +\hologo{XeTeX}으로 컴파일하는 상황에서는 다음 폰트들이 더 사용되었다. + +\begin{description} \firmlist +\item[은 글꼴] 은 자모바탕, 은 돋움. +\item[백묵 글꼴] 백묵 바탕. \TeX\,Live 배포 서체. +\item[전주완판본체] 전주완판본 순L. \href{http://www.jeonju.go.kr/index.9is?contentUid=9be517a75cfc1850015d0becebbf4672}{전주시청}. +\item[제주서체] 제주한라산. \href{https://www.jeju.go.kr/jeju/symbol/font/hallasan.htm}{제주특별자치도}. +\item[Adobe 명조] Adobe Reader 배포 서체. +\end{description} +\fi + +\section*{부록 \appsec. \hologo{LuaLaTeX} 컴파일을 위한 주석}\label{sec:luatex} + +\hologo{LuaLaTeX}으로 컴파일하는 경우를 위한 메모. + +우선 LuaHB\TeX 의 \LaTeX\ 포맷을 이용하는 것이 좋다. +\pkg{harfbuzz} 라이브러리를 활용하므로 더 바람직한 결과를 얻을 수 있을 것으로 기대한다. +이 패키지는 LuaHB\TeX\ 1.11.2를 기준으로 테스트하였다. \TeX\,Live 2019에 있는 1.10에서의 +올바른 동작은 보장하지 않는다. 이 때에는 \hologo{XeTeX}을 쓰도록 하라. + +폰트 설정 시에 옵션으로 다음을 부여한다. 아래 \texttt{RawFeature} 부분은 LuaHB\TeX 이 +아니면 에러를 토할 것이다. +\begin{verbatim} +[Script=Hangul,RawFeature={mode=harf}] +\end{verbatim} +이 설정은 \pkg{luatexko}와 함께 쓰는 경우든 아니든 필요하다. + +\hologo{LuaTeX}에서 이 패키지와 함께 사용할 수 있는 폰트는 \texttt{Script Hangul} 속성을 가진 폰트로 +제한된다. 이 속성을 가지지 않은 일반적인 폰트로는 자모 입력으로부터 한글 음절 문자를 얻어낼 수 없는 +것으로 보인다. \ref{sec:font}절에서 어떤 폰트가 사용가능한지 확인할 수 있다. + +\section*{부록 \appsec. 예제} + +훈민정음 어제 서문을 입력한 예를 보여두겠다. + +\begin{boxedverbatim} +\begin{jamotext} +世syeyx;宗joq/御ex;製jyeyx;訓hun;民min/正jyeq;音fvm/ + +na/ras;mar:ss@/mi; 中dyuq/國guig;ei; dar/a; +文mun/字jj@x;oa;ro; se/rv s@/m@s/di; a/ni;h@r/ss@i; +i;ren jyen/c@;ro; e/rin; 百b@ig;姓syeq;i; ni/rv/go;jye; horf; bai; +i/sye;do; m@/c@m;nai: jey bdv;dvr; si/re; pye/di; +mod:h@rf no;mi; ha/ni;ra;. + +nai; i;r@r; 爲uix;h@;ya; e:yes/bi; ne/gye; +sai;ro; sv;mvr; ye/dvrb; 字jj@x;r@r; m@iq/g@;no/ni; +sa:r@m/ma:da; h@i:xxye; su:bxi; ni/gye; +nar;ro; bsu;mey; +便bbyen/安fan/kvi; h@/go;jye; h@rf sd@/r@/mi;ni/ra;. +\end{jamotext} +\end{boxedverbatim} + +\begin{quote} +\begin{jamotext} +世syeyx;宗joq/御ex;製jyeyx;訓hun;民min/正jyeq;音fvm/ + +na/ras;mar:ss@/mi; 中dyuq/國guig;ei; dar/a; +文mun/字jj@x;oa;ro; se/rv s@/m@s/di; a/ni;h@r/ss@i; +i;ren jyen/c@;ro; e/rin; 百b@ig;姓syeq;i; ni/rv/go;jye; horf; bai; i/sye;do; +m@/c@m;nai: jey bdv;dvr; si/re; pye/di; mod:h@rf no;mi; ha/ni;ra;. + +nai; i;r@r; 爲uix;h@;ya; e:yes/bi; ne/gye; +sai;ro; sv;mvr; ye/dvrb; 字jj@x;r@r; m@iq/g@;no/ni; +sa:r@m/ma:da; h@i:xxye; su:bxi; ni/gye; +nar;ro; bsu;mey; +便bbyen/安fan/kvi; h@/go;jye; h@rf sd@/r@/mi;ni/ra;. +\end{jamotext} +\end{quote} + +\section*{부록 \appsec. 유니코드의 한글} + +이 글에서 사용한 다음 용어를 설명한다. + +\begin{description} \firmlist +\item[한글 자모] 유니코드 블럭 \textsf{[U+1100]}--\textsf{[U+11FF]}에 정의된 한글 자모(\emph{Hangul Jamo}). +\item[한글 자모 확장 A] 유니코드 블럭 \textsf{[U+A960]}--\textsf{[U+A97C]}에 정의된 한글 자모(\emph{Hangul Jamo Extended-A}). +\item[한글 자모 확장 B] 유니코드 블럭 \textsf{[U+D780]}--\textsf{[U+D7FB]}에 정의된 한글 자모(\emph{Hangul Jamo Extended-B}). +\item[한글 음절 문자] 유니코드 블럭 \textsf{[U+AC00]}--\textsf{[U+D7A3]}에 정의되어 있는, 한글 음절 문자(\emph{Hangul Syllables}. Precomposed syllables). 여기에 정의되어 있는 11,172개의 음절 문자는 한글 자모의 조합으로 구성할 수 있어야 하고, 이 문자 각각을 완성형 음절 문자로 간주할 수 있다. 한글 폰트는 이 영역의 글리프만을 가지고 있는 경우가 많고 현대 한국어 문자 생활에서 이 글자만으로 대부분 충족된다. +\item[한글 호환 자모] 유니코드 블럭 \textsf{[U+3131]}--\textsf{[U+318E]}에 정의되어 있는 한글 자모(\emph{Hangul Compatibility Jamo}). KS X 1001:1998 표준과의 호환을 위하여 마련된 영역인데 여기에 나오는 한글 자모는 조합에 활용하지 않으며 각 자모를 독립된 문자로 간주한다. +\end{description} + +\paragraph*{완성형과 조합형} +1980년대와 90년대의 이른바 \href{https://namu.wiki/w/%EC%A1%B0%ED%95%A9%ED%98%95%20%EC%99%84%EC%84%B1%ED%98%95%20%EB%85%BC%EC%9F%81}{조합형\cntrdot 완성형 논쟁}은 +한글 전산화, 한글 코드의 표준 제정을 둘러싼 논쟁이었다. +유니코드 2.0 이후 이것은 더이상 `논쟁'이 아니게 되었다. 오늘날 `완성형'이란 +한글 표현에 한글 음절 문자 영역의 코드를 사용한다는 의미에 가깝고, `조합형'이란 한글 자모 코드를 사용하여 한글을 +표현하는 것을 의미하게 되었다. +예를 들어 ``한글과 텍''이라는 문자를 음절 문자 코드로 표현하면 +\begin{verbatim} +[D55C] [AE00] [ACFC] [0020] [AC4D] +\end{verbatim} +처럼 되는데 이것을 자모 조합 코드로 표현하면 +\begin{verbatim} +[1112] [1161] [11AB] % 한 +[1100] [1173] [11AF] % 글 +[1100] [116A] % 과 +[0020] % space +[1110] [1166] [11A8] % 텍 +\end{verbatim} +로 된다. 특히 자음은 초성과 중성에 서로 다른 코드가 할당되어 있어서 +이를 두고 ``첫가끝(LVT)'' 코드\footnote{LVT라는 것은 +leading consonant, vowel, trailing consonant의 첫 자를 딴 것이다.}% +라고 부르기도 한다. +자모 조합 코드는 음절 문자 코드에 비하여 몇 배 이상의 정보량을 요구하는 단점이 있으나 +(UTF-8로 인코딩하면 그 격차는 더 벌어진다. UTF-8의 3바이트면 한글 음절 문자 한 자를 +표현할 수 있지만 초중종성이 모두 있는 글자라면 무려 9바이트가 필요하다.) +음절 문자로는 표현할 수 없는 한글을 기록하기 위해서는 이 방법밖에 없다. +그래서 이른바 `옛한글'을 첫가끝 코드로 표현하는 것이다. + +\paragraph*{폰트 기술의 발전} +코드가 그렇게 할당되었다 하더라도 이를 출력(표시)하는 것은 또다른 문제이다. +폰트라는 관점에서 생각하였을 때 +한글 음절 영역 코드라면 각 코드에 글리프를 할당하면 되므로 비교적 간단한 편이고 +이것이면 문자 생활에 큰 불편이 없기 때문에 대부분의 한글 폰트가 이런 정도의 기능만을 가지고 있다.\footnote{유니코드의 한글 +음절 영역 문자 11,172자를 모두 자면으로 갖춘 폰트가 등장한 것도 실은 오랜 일이 아니다. +그 전에는 소위 완성형 한글이라 불리는 2350자 글리프를 갖춘 것도 많았다. +그런데 생각해보면 우리의 문자 생활이 과연 만자 정도를 필요로 하는가? 아마 수천 자 +안팎이면 거의 문제가 없을 것이라 생각한다. 음절 문자도 충분히 많은 수이다.} +그런데 자모 조합의 경우에는 여러 코드를 조합하여 +이를 한 음절로 또는 한 음절처럼 표현하는 능력을 폰트가 갖추고 있어야 한다. +이 글의 본문에서 간간이 ``\texttt{Script Hangul} 속성을 갖춘 글꼴''이라는 표현을 썼는데 +자모 조합 코드로부터 한글 음절을 식자하는 것이 가능한 폰트를 말하는 것이었다. +GSUB/GPOS라는 트루타입 오픈의 속성을 이용하여 +이것이 가능하게 된 것은 21세기 들어서의 일이다. 이것을 거의 최초로 가능하게 하였던 +글꼴인 ``은 바탕''\footnote{이를 실험하고 구현한 신정식, 박원규 제씨의 기여는 기억할 가치가 있다.}의 역사적 의미는 +실로 적지 않다 하겠다. 그 후로 함초롬, 본명조와 같은 좋은 폰트들이 많아졌고, +이제 우리는 고품위의 ``한글 표현에 제약이 없는'' 훌륭한 자유 폰트를 여럿 가지게 되었다. + +\paragraph*{텍 엔진의 발전} +이와 더불어 \TeX 에는 \hologo{XeTeX} (그리고 \hologo{LuaTeX})의 새로운 +시대가 열렸다. 유니코드를 자유롭게 다룰 수 있게 되었다. + +\bigskip + +이 간단한 패키지는 이러한 기술적 발전을 그 배경으로 하고 있다. + +\paragraph*{여담: 두벌식과 세벌식} +이 문제는 키보드 자판 배열 디자인에 관한 문제이고 여기서 다루는 것과 직접 관련이 있지는 않다. +그러나 가끔 첫가끝 코드와 세벌식을 혼동하는 경우가 있어 여기 간략히 언급하기로 한다. +어쨌든 세벌식은 초성과 종성에 다른 키를 할당하는 것이고 첫가끝 코드는 초성과 종성에 다른 코드를 +할당하는 것이니 연관이 없다고 할 수도 없겠다. + +세벌식을 선호하는 사람들이 가끔 하는 말 중에 ``한글 창제 원리에 맞다''는 것이 있다. 키보드는 익숙함의 +문제가 더 큰 것이라서 어떤 것이 더 좋다거나 나쁘다거나 말하는 것이 큰 의미가 없다고 생각하지만 +이 말에 대해서는 생각해볼 것이 있다. 아마도 초/중/종성을 구분하여 입력하는 것이, 초성과 중성, 종성을 +합하여 한 글자를 이룬다는 것과 상통한다는 말인 듯하다. +그런데 훈민정음에서는 ``무릇 글자는 모름지기 어울려서 소리가 된다''고 하고 있는 한편, +``종성에는 초성자를 다시 사용한다''고도 하고 있다. 이 소위 終聲復用初聲의 원리를 키보드에 (억지로) +적용하면 ``종성 입력에는 초성 키를 다시 사용한다''라고 못할 것은 무엇인가? +즉 두벌식이냐 세벌식이냐와 훈민정음 창제 원리는 아무 상관이 없는 것이다. + +내가 생각할 때 세벌식의 가장 큰 장점은 첫가끝 코드와 키보드의 입력 키를 ``직결''시킬 +수 있다는 점일 듯하다. 코드가 다르면 다른 키를 누른다는 것이다. +매우 안심이 된다. 입력기를 설계하는 입장에서도 세벌식이라면 첫가끝 (자모 코드) 입력을 +더 편하게 구현할 수 있을 것 같다. +그러나 사실상 현대 문자 생활에서 첫가끝 코드를 쓰는 일이 거의 없으므로 이 장점이 크게 부각되지 +못한 측면이 있다. + +여기까지 쓰고 보니 소위 ``직결식 글꼴''에도 생각이 미치는데 현재 알려진 직결식 글꼴이란 것은 +한글 자모 코드를 쓰는 것이 아니라 그저 폰트에서 영문자 알파벳이 놓일 위치에 한글을 가져다둔 것일 +뿐이라 별로 언급할 필요를 느끼지 못한다. 다만 공병우 박사가 생전에 이 직결 글꼴의 아이디어로 +한글 문자생활을 했다는 이야기가 흥미롭다. + +\section*{부록 \appsec. \ccnm{문장강화}의 한 페이지} + +\begin{figure}[hp] +\centering +\includegraphics[width=9cm]{munjangganghwa} +\caption{이태준의 \ccnm{문장강화}의 한 페이지}\label{fig:mun} +\end{figure} + +%\printindex + +\end{document} \ No newline at end of file diff --git a/language/korean/pmhanguljamo/pmhanguljamo.sty b/language/korean/pmhanguljamo/pmhanguljamo.sty new file mode 100644 index 0000000000..a491e5cdc7 --- /dev/null +++ b/language/korean/pmhanguljamo/pmhanguljamo.sty @@ -0,0 +1,630 @@ +%% `file: pmhanguljamo.sty +%% +%% Poorman's Hangul Jamo Input Method. +%% +%% (C) 2020 Kangsoo Kim +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Kangsoo Kim. +%% +%% This work consists of the file pmhanguljamo.sty +%% and the documentation files pmhanguljamo-doc.tex and pmhanguljamo-doc.pdf. +%% +\RequirePackage{expl3,xparse} +\ProvidesExplPackage + {pmhanguljamo} + {2020/01/20} + {v0.2.1} + {Poorman's Hangul Jamo Input Method} + +\NewDocumentCommand \jamotextcmd { m } +{ + \tl_set:Nn \l_tmpa_tl { #1 / } + \regex_replace_all:nnN { / } { |/ } \l_tmpa_tl + \regex_replace_all:nnN { ; } { ;/ } \l_tmpa_tl + \regex_replace_all:nnN { : } { :/ } \l_tmpa_tl + + \exp_args:Nno \regex_split:nnN { / } { \l_tmpa_tl } \l_tmpa_seq + + \seq_map_function:NN \l_tmpa_seq \build_syl:n +} + +\tl_new:N \l_cho_tl +\tl_new:N \l_jun_tl +\tl_new:N \l_jon_tl +\bool_new:N \l_jj_bool +\seq_new:N \l_inputword_seq +\seq_new:N \l_inputpar_seq + +\NewDocumentEnvironment { jamotext } { +b } +{ + \seq_set_split:Nnn \l_inputpar_seq { \par } { #1 } + \seq_indexed_map_function:NN \l_inputpar_seq \jamo_word:nn +}{} + +\cs_new:Npn \jamo_word:nn #1 #2 +{ + \jamoword { #2 } + \int_compare:nT { #1 < \seq_count:N \l_inputpar_seq } + { \par } +} + +\NewDocumentCommand \jamoword { m } +{ + \seq_set_split:Nnn \l_inputword_seq { ~ } { #1 } + \seq_indexed_map_inline:Nn \l_inputword_seq + { + \jamotextcmd { ##2 } + \int_compare:nT { ##1 < \seq_count:N \l_inputword_seq } + { \space } + } +} + +\cs_new:Npn \build_syl:n #1 +{ + \bool_set_false:N \l_jj_bool + \tl_clear:N \l_cho_tl + \tl_clear:N \l_jun_tl + \tl_clear:N \l_jon_tl + \build_syl_fn:n #1 \q_recursion_tail \q_recursion_stop +} + +\cs_new:Npn \build_syl_fn:n #1 +{ + \quark_if_recursion_tail_stop_do:nn { #1 } + { + \exp_args:Nnx \regex_match:nnTF { [A-Z] } { \l_cho_tl } + { + \tl_reverse:N \l_cho_tl + \tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_cho_tl } + \tl_reverse:N \l_tmpb_tl %%% remove trailing | + \exp_args:Nx \jmcc { \l_tmpb_tl } + } + { + \tl_reverse:N \l_jon_tl + \tl_set:Nx \l_tmpa_tl { \tl_head:N \l_jon_tl } + \tl_set:Nx \l_tmpb_tl { \tl_tail:N \l_jon_tl } + \tl_reverse:N \l_tmpb_tl + + \exp_args:NNx \prop_item:Nn \c_cho_prop { \l_cho_tl } + \exp_args:NNx \prop_item:Nn \c_jung_prop { \l_jun_tl } + \exp_args:NNx \prop_item:Nn \c_jong_prop { \l_tmpb_tl } + \exp_args:NNx \prop_item:Nn \c_jong_prop { \l_tmpa_tl } + } + } + + \regex_match:nnTF { [a-z;:@|] } { #1 } + { + \str_case:nnTF { #1 } + { + { a } { \tl_put_right:Nn \l_jun_tl { #1 } } + { e } { \tl_put_right:Nn \l_jun_tl { #1 } } + { o } { \tl_put_right:Nn \l_jun_tl { #1 } } + { u } { \tl_put_right:Nn \l_jun_tl { #1 } } + { v } { \tl_put_right:Nn \l_jun_tl { #1 } } + { i } { \tl_put_right:Nn \l_jun_tl { #1 } } + { y } { \tl_put_right:Nn \l_jun_tl { #1 } } + { @ } { \tl_put_right:Nn \l_jun_tl { #1 } } + } + { + \int_compare:nT { \tl_count:N \l_cho_tl == 0 } + { \tl_put_right:Nn \l_cho_tl { x } } + \bool_set_true:N \l_jj_bool + } + { + \bool_if:NTF \l_jj_bool + { + \tl_put_right:Nn \l_jon_tl { #1 } + } + { + \tl_put_right:Nn \l_cho_tl { #1 } + } + } + } + { + \regex_match:nnTF { [A-Z] } { #1 } + { + \tl_put_right:Nn \l_cho_tl { #1 } + } + { + #1 + } + } + + \build_syl_fn:n +} + +\NewDocumentCommand \jmcc { m } +{ + \prop_item:Nn \c_compjamo_prop { #1 } +} + +\NewDocumentCommand \ColonMark {} { : } +\NewDocumentCommand \SemiColonMark {} { ; } +\NewDocumentCommand \SlashMark {} { / } + +%%%%%%%%% DICTIONARIES +\prop_const_from_keyval:Nn \c_cho_prop +{ + g = \char"1100, + gg = \char"1101, + n = \char"1102, + d = \char"1103, + dd = \char"1104, + r = \char"1105, + m = \char"1106, + b = \char"1107, + bb = \char"1108, + s = \char"1109, + ss = \char"110A, + x = \char"110B, + j = \char"110C, + jj = \char"110D, + c = \char"110E, + k = \char"110F, + t = \char"1110, + p = \char"1111, + h = \char"1112, + ng = \char"1113, + nn = \char"1114, + nd = \char"1115, + nb = \char"1116, + dg = \char"1117, + rn = \char"1118, + rr = \char"1119, + rh = \char"111A, + rx = \char"111B, + mb = \char"111C, + mx = \char"111D, + bg = \char"111E, + bn = \char"111F, + bd = \char"1120, + bs = \char"1121, + bsg = \char"1122, + bsd = \char"1123, + bsb = \char"1124, + bss = \char"1125, + bsj = \char"1126, + bj = \char"1127, + bc = \char"1128, + bt = \char"1129, + bp = \char"112A, + bx = \char"112B, + bbx = \char"112C, + sg = \char"112D, + sn = \char"112E, + sd = \char"112F, + sr = \char"1130, + sm = \char"1131, + sb = \char"1132, + sbg = \char"1133, + sss = \char"1134, + sq = \char"1135, + sj = \char"1136, + sc = \char"1137, + sk = \char"1138, + st = \char"1139, + sp = \char"113A, + sh = \char"113B, + sl = \char"113C, + ssl = \char"113D, + slr = \char"113E, + sslr = \char"113F, + z = \char"1140, + xg = \char"1141, + xd = \char"1142, + xm = \char"1143, + xb = \char"1144, + xs = \char"1145, + xz = \char"1146, + xx = \char"1147, + xj = \char"1148, + xc = \char"1149, + xt = \char"114A, + xp = \char"114B, + q = \char"114C, + jx = \char"114D, + jl = \char"114E, + jjl = \char"114F, + jlr = \char"1150, + jjlr = \char"1151, + ck = \char"1152, + ch = \char"1153, + cl = \char"1154, + clr = \char"1155, + pb = \char"1156, + px = \char"1157, + hh = \char"1158, + f = \char"1159, +%%% Extended-A + dm = \char"A960, + db = \char"A961, + ds = \char"A962, + dj = \char"A963, + rg = \char"A964, + rgg = \char"A965, + rd = \char"A966, + rdd = \char"A967, + rm = \char"A968, + rb = \char"A969, + rbb = \char"A96A, + rbx = \char"A96B, + rs = \char"A96C, + rj = \char"A96D, + rk = \char"A96E, + mg = \char"A96F, + md = \char"A970, + ms = \char"A971, + bst = \char"A972, + bk = \char"A973, + bh = \char"A974, + ssb = \char"A975, + xr = \char"A976, + xh = \char"A977, + jjh = \char"A978, + tt = \char"A979, + ph = \char"A97A, + hs = \char"A97B, + ff = \char"A97C, +%%% Choseong Filler + w = \char"115F +} + +\prop_const_from_keyval:Nn \c_jung_prop +{ + a = \char"1161, + ay = \char"1162, + ya = \char"1163, + yay = \char"1164, + e = \char"1165, + ey = \char"1166, + ye = \char"1167, + yey = \char"1168, + o = \char"1169, + oa = \char"116A, + oay = \char"116B, + oy = \char"116C, + yo = \char"116D, + u = \char"116E, + ue = \char"116F, + uey = \char"1170, + uy = \char"1171, + yu = \char"1172, + v = \char"1173, + vi = \char"1174, + i = \char"1175, + ao = \char"1176, + au = \char"1177, + yao = \char"1178, + yayo = \char"1179, + eo = \char"117A, + eu = \char"117B, + ev = \char"117C, + yeo = \char"117D, + yeu = \char"117E, + oe = \char"117F, + oey = \char"1180, + oyey = \char"1181, + oo = \char"1182, + ou = \char"1183, + yoya = \char"1184, + yoyay = \char"1185, + yoye = \char"1186, + yoo = \char"1187, + yoi = \char"1188, + ua = \char"1189, + uay = \char"118A, + uev = \char"118B, + uyey = \char"118C, + uu = \char"118D, + yua = \char"118E, + yue = \char"118F, + yuey = \char"1190, + yuye = \char"1191, + yuyey = \char"1192, + yuu = \char"1193, + yui = \char"1194, + vu = \char"1195, + vv = \char"1196, + viu = \char"1197, + ia = \char"1198, + iya = \char"1199, + io = \char"119A, + iu = \char"119B, + iv = \char"119C, + i@ = \char"119D, + @ = \char"119E, + @e = \char"119F, + @u = \char"11A0, + @i = \char"11A1, + @@ = \char"11A2, +%% extended-b + oye = \char"D7B0, + ou = \char"D7B1, + yoa = \char"D7B2, + yoay = \char"D7B3, + yoe = \char"D7B4, + uye = \char"D7B5, + uii = \char"D7B6, + yuay = \char"D7B7, + yuo = \char"D7B8, + va = \char"D7B9, + ve = \char"D7BA, + vey = \char"D7BB, + vo = \char"D7BC, + iyao = \char"D7BD, + iyay = \char"D7BE, + iye = \char"D7BF, + iyey = \char"D7C0, + @iu = \char"D7C1, + iyo = \char"D7C2, + iyu = \char"D7C3, + ii = \char"07C4, + @a = \char"D7C5, + @ey = \char"D7C6, +%% for avoiding errors, + ai = \char"1162, + yai = \char"1164, + ei = \char"1166, + yei = \char"1168, + oi = \char"116C, + ui = \char"1171, + oai = \char"116B, + uei = \char"1170, + vy = \char"1174 +} + +\prop_const_from_keyval:Nn \c_jong_prop +{ + g = \char"11A8, + gg = \char"11A9, + gs = \char"11AA, + n = \char"11AB, + nj = \char"11AC, + nh = \char"11AD, + d = \char"11AE, + r = \char"11AF, + rg = \char"11B0, + rm = \char"11B1, + rb = \char"11B2, + rs = \char"11B3, + rt = \char"11B4, + rp = \char"11B5, + rh = \char"11B6, + m = \char"11B7, + b = \char"11B8, + bs = \char"11B9, + s = \char"11BA, + ss = \char"11BB, + x = \char"11BC, + j = \char"11BD, + c = \char"11BE, + k = \char"11BF, + t = \char"11C0, + p = \char"11C1, + h = \char"11C2, + gr = \char"11C3, + gsg = \char"11C4, + ng = \char"11C5, + nd = \char"11C6, + ns = \char"11C7, + nz = \char"11C8, + nt = \char"11C9, + dg = \char"11CA, + dr = \char"11CB, + rgs = \char"11CC, + rn = \char"11CD, + rd = \char"11CE, + rdh = \char"11CF, + rr = \char"11D0, + rmg = \char"11D1, + rms = \char"11D2, + rbs = \char"11D3, + rbh = \char"11D4, + rbx = \char"11D5, + rss = \char"11D6, + rz = \char"11D7, + rk = \char"11D8, + rf = \char"11D9, + mg = \char"11DA, + mr = \char"11DB, + mb = \char"11DC, + ms = \char"11DD, + mss = \char"11DE, + mz = \char"11DF, + mc = \char"11E0, + mh = \char"11E1, + mx = \char"11E2, + br = \char"11E3, + bp = \char"11E4, + bh = \char"11E5, + bx = \char"11E6, + sg = \char"11E7, + sd = \char"11E8, + sr = \char"11E9, + sb = \char"11EA, + z = \char"11EB, + qg = \char"11EC, + qgg = \char"11ED, + qq = \char"11EE, + qk = \char"11EF, + q = \char"11F0, + qs = \char"11F1, + qz = \char"11F2, + pb = \char"11F3, + px = \char"11F4, + hn = \char"11F5, + hr = \char"11F6, + hm = \char"11F7, + hb = \char"11F8, + f = \char"11F9, +%% extended-b + ds = \char"D7D0, + dsg = \char"D7D1, + dj = \char"D7D2, + dc = \char"D7D3, + dt = \char"D7D4, + rgg = \char"D7D5, + rgh = \char"D7D6, + rrz = \char"D7D7, + rmh = \char"D7D8, + rbd = \char"D7D9, + rbp = \char"D7DA, + rq = \char"D7DB, + rqh = \char"D7DC, + rx = \char"D7DD, + mn = \char"D7DE, + mnn = \char"D7DF, + mm = \char"D7E0, + mbs = \char"D7E1, + mj = \char"D7E2, + bd = \char"D7E3, + brp = \char"D7E4, + bm = \char"D7E5, + bb = \char"D7E6, + bsd = \char"D7E7, + bj = \char"D7E8, + bc = \char"D7E9, + sm = \char"D7EA, + sbx = \char"D7EB, + ssg = \char"D7EC, + ssd = \char"D7ED, + sz = \char"D7EE, + sj = \char"D7EF, + sc = \char"D7F0, + st = \char"D7F1, + sh = \char"D7F2, + zb = \char"D7F3, + zbx = \char"D7F4, + qm = \char"D7F5, + qh = \char"D7F6, + jb = \char"D7F7, + jbb = \char"D7F8, + jj = \char"D7F9, + ps = \char"D7FA, + pt = \char"D7FB, +%% tone markers + ; = \char"302E, + : = \char"302F, + | = {} +} + +\prop_const_from_keyval:Nn \c_compjamo_prop +{ + G = \char"3131, + GG = \char"3132, + GS = \char"3133, + N = \char"3134, + NJ = \char"3135, + NH = \char"3136, + D = \char"3137, + DD = \char"3138, + R = \char"3139, + RG = \char"313A, + RM = \char"313B, + RB = \char"313C, + RS = \char"313D, + RT = \char"313E, + RP = \char"313F, + RH = \char"3140, + M = \char"3141, + B = \char"3142, + BB = \char"3143, + BS = \char"3144, + S = \char"3145, + SS = \char"3146, + X = \char"3147, + J = \char"3148, + JJ = \char"3149, + C = \char"314A, + K = \char"314B, + T = \char"314C, + P = \char"314D, + H = \char"314E, + A = \char"314F, + AY = \char"3150, + AI = \char"3150, + YA = \char"3151, + YAY = \char"3152, + YAI = \char"3152, + E = \char"3153, + EY = \char"3154, + EI = \char"3154, + YE = \char"3155, + YEY = \char"3156, + YEI = \char"3156, + O = \char"3157, + OA = \char"3158, + OAY = \char"3159, + OAI = \char"3159, + OY = \char"315A, + OI = \char"315A, + YO = \char"315B, + U = \char"315C, + UE = \char"315E, + UEY = \char"315E, + UEI = \char"315E, + UY = \char"315F, + UI = \char"315F, + YU = \char"3160, + V = \char"3161, + VI = \char"3162, + VY = \char"3162, + I = \char"3163, + NN = \char"3165, + ND = \char"3166, + NS = \char"3167, + NZ = \char"3168, + RGS = \char"3169, + RD = \char"316A, + RBS = \char"316B, + RZ = \char"316C, + RF = \char"316D, + MB = \char"316E, + MS = \char"316F, + MZ = \char"3170, + MX = \char"3171, + BG = \char"3172, + BD = \char"3173, + BSG = \char"3174, + BSD = \char"3175, + BJ = \char"3176, + BT = \char"3177, + BX = \char"3178, + BBX = \char"3179, + SG = \char"317A, + SN = \char"317B, + SD = \char"317C, + SB = \char"317D, + SJ = \char"317E, + Z = \char"317F, + XX = \char"3180, + Q = \char"3181, + QS = \char"3182, + QZ = \char"3183, + PX = \char"3184, + HH = \char"3185, + F = \char"3186, + YOYA = \char"3187, + YOYAY = \char"3188, + YOI = \char"3189, + YUYE = \char"318A, + YUYEY = \char"318B, + YUI = \char"318C, + W = \char"318D, + WI = \char"318E, + @ = \char"318D, + @I = \char"318E +} + +\endinput + -- cgit v1.2.3