diff options
Diffstat (limited to 'language/korean/cjk-ko/cjkutf8-ko.sty')
-rw-r--r-- | language/korean/cjk-ko/cjkutf8-ko.sty | 466 |
1 files changed, 466 insertions, 0 deletions
diff --git a/language/korean/cjk-ko/cjkutf8-ko.sty b/language/korean/cjk-ko/cjkutf8-ko.sty new file mode 100644 index 0000000000..8d3e943638 --- /dev/null +++ b/language/korean/cjk-ko/cjkutf8-ko.sty @@ -0,0 +1,466 @@ +% cjkutf8-ko.sty +% +% Copyright (c) 2016 Dohyun Kim <nomos at ktug org> +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program in doc/COPYING; if not, write to the Free +% Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, +% MA 02110-1301 USA + +\ProvidesPackage{cjkutf8-ko}[2016/04/04 v1.8 Hangul typesetting on CJKutf8] + +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname eTeXversion\endcsname\relax + \PackageError{cjkutf8-ko} + {e-TeX engine is required} + {Please update your TeX system to the latest distribution} +\endinput\fi + +\newif\if@hangul +\newif\if@hanja +\let\use@josa\empty + +\DeclareOption{hangul}{\@hangultrue} +\DeclareOption{hanja}{\@hanjatrue\@hangultrue} +\DeclareOption{usecjkt1font}{\let\usecjk@@font\empty\@hangultrue} +\DeclareOption{usedotemph}{\let\usedot@mph\empty} +\DeclareOption{nojosa}{\let\use@josa\undefined} +\DeclareOption{truetype}{\let\use@cjk@cmap@\relax} +\DeclareOption*{\expandafter\CJKKO@userfont@option\CurrentOption=\end} +\def\CJKKO@userfont@option#1=#2\end{% + \ifx\empty#2\empty + \PassOptionsToPackage{#1}{CJKutf8} + \else + \def\reserved@a{mj}\def\reserved@b{gt}\def\reserved@c{#1} + \ifx\reserved@a\reserved@c + \edef\CJKKO@mjfont{\CJKKO@removetrailingEQ#2} + \IfFileExists{c70\CJKKO@mjfont.fd}{}{% + \PackageError{cjkutf8-ko}{`c70\CJKKO@mjfont.fd' does not exist}{} + \let\CJKKO@mjfont\undefined + } + \else + \ifx\reserved@b\reserved@c + \edef\CJKKO@gtfont{\CJKKO@removetrailingEQ#2} + \IfFileExists{c70\CJKKO@gtfont.fd}{}{% + \PackageError{cjkutf8-ko}{`c70\CJKKO@gtfont.fd' does not exist}{} + \let\CJKKO@gtfont\undefined + } + \else + \PackageError{cjkutf8-ko} + {Unknown hangul font type: #1} + {Allowed font types are `mj' and `gt'} + \fi + \fi + \fi +} +\def\CJKKO@removetrailingEQ#1={#1} +\ProcessOptions\relax + +\ifx\CJKKO@mjfont\undefined + \IfFileExists{c70nanummj.fd}{\def\CJKKO@mjfont{nanummj}}{ + \def\CJKKO@mjfont{mj} + \ifx\usedot@mph\undefined\else + \def\dotemphraise{1ex} + \def\dotemphchar{\Unicode{"02}{"D9}} + \fi + } +\fi +\ifx\CJKKO@gtfont\undefined + \IfFileExists{c70nanumgt.fd}{\def\CJKKO@gtfont{nanumgt}}{\def\CJKKO@gtfont{mj}} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%% +% font settings +\ifx\usecjk@@font\undefined\else + \PassOptionsToPackage{T1}{CJKutf8} + \RequirePackage{textcomp} + \IfFileExists{t1\CJKKO@mjfont.fd}{\let\rmdefault\CJKKO@mjfont}{} + \IfFileExists{t1\CJKKO@gtfont.fd}{\let\sfdefault\CJKKO@gtfont}{} +\fi + +\RequirePackage{CJKutf8} + +\g@addto@macro\rmfamily{\CJKfamily{\CJKKO@mjfont}} +\g@addto@macro\sffamily{\CJKfamily{\CJKKO@gtfont}} +\g@addto@macro\ttfamily{\CJKfamily{\CJKKO@gtfont}} + +\AtBeginDocument{ + \edef\reserved@a{\familydefault} + \edef\reserved@b{\rmdefault} + \ifx\reserved@a\reserved@b + \CJKfamily{\CJKKO@mjfont} + \g@addto@macro\normalfont{\CJKfamily{\CJKKO@mjfont}} + \if@hangul\ifx\usecjk@@font\undefined + \IfFileExists{t1\CJKKO@mjfont .fd}{% + \CJKKO@hangulspaceglue{t1\CJKKO@mjfont m}% space glue from hangul font + }{} + \fi\fi + \else + \CJKfamily{\CJKKO@gtfont} + \g@addto@macro\normalfont{\CJKfamily{\CJKKO@gtfont}} + \if@hangul\ifx\usecjk@@font\undefined + \IfFileExists{t1\CJKKO@gtfont .fd}{% + \CJKKO@hangulspaceglue{t1\CJKKO@gtfont m}% space glue from hangul font + }{} + \fi\fi + \fi + \let\reset@font\normalfont +} + +\def\CJKKO@hangulspaceglue#1{\@ifclassloaded{minimal}{}{% + \bgroup + \@for\reserved@a:=,\small,\footnotesize,\large,\Large,\LARGE\do{% + \reserved@a + \font\x=#1 at \f@size\p@ + \fontdimen2\font=\fontdimen2\x + \fontdimen3\font=.5\fontdimen2\x + \fontdimen4\font=.3333\fontdimen2\x + \fontdimen7\font=\fontdimen7\x }% + \egroup }} + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% dotemph +% Users can redefine \dotemphchar and \dotemphraise +\ifx\usedot@mph\undefined + \def\dotemph{\PackageError{cjkutf8-ko} + {To enable \string\dotemph, package option [usedotemph] is required} + {CJKfntef.sty will be automatically loaded if [usedotemph] option is given}} +\else + % CJKglue should be skip only. seems to do with \LA@CJKglue in CJKulem.sty + \RequirePackage{ulem}[2000/05/26] + \addto@hook\UL@hook{\let\CJKglue\HangulGlue} + \RequirePackage{CJKfntef} + \normalem % users should declare \ULforem to enable underlining for \emph + \ifx\dotemphraise\undefined \def\dotemphraise{0.5ex}\fi + \ifx\dotemphchar\undefined \def\dotemphchar{\bfseries\Unicode{"02}{"D9}}\fi + % user command: dotemph + \DeclareRobustCommand*\dotemph{% + \CJKunderanysymbol{-\dotemphraise}{\dotemphchar}} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%% +% start CJK env +\def\HangulGlue{\hskip0pt plus.1ex minus.01em } +\def\HangulPenalty{\ifnum\lastpenalty=\z@ \penalty50 \fi} +\def\CJKglue{\HangulPenalty\HangulGlue} +\def\CJKpostmathglue{\HangulPenalty\hskip.25ex plus.1ex minus.05ex } +\CJKspace +\CJK@envStart{}{UTF8}{\CJKKO@mjfont} +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%% +% italic correction after cjk +\edef\maybe@ic@{% + \unexpanded{% + \let\CJKKO@wasCJK\undefined + \ifnum\lastkern=\@ne + \unkern\unkern + \let\CJKKO@wasCJK\empty + \fi + }% + \unexpanded\expandafter{\maybe@ic@ + \ifx\CJKKO@wasCJK\empty + \CJK@CJK + \CJKKO@check@next@tok@ + \let\CJKKO@wasCJK\undefined + \fi + }% +} + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% CJKscale: scale CJK char size +\def\CJKscale#1{% + \ifx\usecjk@@font\undefined + \def\CJK@scale{#1}% + \else + \PackageError{cjkutf8-ko} + {\string\CJKscale\space is not allowed} + {\string\CJKscale\space cannot be used with option [usecjkt1font]} + \fi} +\@onlypreamble\CJKscale +\def\cancelCJKscale{\let\CJK@scale\undefined} +\@onlypreamble\cancelCJKscale +\AtBeginDocument{ + \ifx\usecjk@@font\undefined + \ifx\CJK@scale\undefined\else + % redefine \CJK@empty + \def\CJK@empty#1{% + \@tempdimb \f@size\p@ + \@tempdimb\CJK@scale\@tempdimb %%% inserted + \ifx\optional@arg \@empty + \else + \expandafter\ifx + \csname CJK@\mandatory@arg/\f@size/\the\@tempdimb\endcsname \relax + \@tempdimb \optional@arg\@tempdimb + #1{Font\space shape\space `\curr@fontshape'\space + will\space be\MessageBreak + scaled\space to\space size\space \the\@tempdimb}% + \expandafter + \gdef\csname CJK@\mandatory@arg/\f@size/\the\@tempdimb\endcsname{}% + \fi + \fi + \edef\external@font{% + \mandatory@arg\CJK@plane\space at \the\@tempdimb}% + \xdef\font@name{% + \csname \curr@fontshape/\f@size/\CJK@plane\endcsname}% + \expandafter\global\expandafter\let + \csname \CJK@curr@fontshape\expandafter\endcsname + \csname \curr@fontshape\endcsname} + \if@hangul % hangul is main language + % scale space glue + \@ifclassloaded{minimal}{}{% + \bgroup + \@for\reserved@a:=,\small,\footnotesize,\large,\Large,\LARGE\do{% + \fontdimen2\font=\CJK@scale\fontdimen2\font + \fontdimen3\font=\CJK@scale\fontdimen3\font + \fontdimen4\font=\CJK@scale\fontdimen4\font + \fontdimen7\font=\CJK@scale\fontdimen7\font} + \egroup + } + % scale parindent, footnotesep, footins + \parindent\CJK@scale\parindent + \footnotesep\CJK@scale\footnotesep + \skip\footins=\CJK@scale\skip\footins plus6pt minus3pt + % scale linespread + \@tempdima\baselinestretch\p@ + \@tempdima\CJK@scale\@tempdima + \edef\reserved@a{\strip@pt\@tempdima} + \expandafter\expandafter\expandafter\linespread\expandafter{\reserved@a} + \selectfont + \fi + \fi\fi +} + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% insert CJKglue before opening ascii and letter +\def\CJK@ignorespaces{% + \ifnum\lastkern=\@ne + \spacefactor\@m % was normal cjk, so sf=1000 + \expandafter\expandafter\expandafter\CJKKO@check@next@tok + \fi} +\def\CJKKO@check@next@tok{\futurelet\@let@token\CJKKO@check@next@tok@} +\def\CJKKO@check@next@tok@{% + \ifx\@let@token(\CJKglue\else + \ifx\@let@token`\CJKglue\else + \ifx\@let@token[\CJKglue\else + \ifx\@let@token<\CJKglue\else + \ifx\@let@token\{\CJKglue\else + \ifcat\noexpand\@let@token\CJKKO@catcodeXI + \CJKglue + \fi\fi\fi\fi\fi\fi} + +\begingroup + \catcode`\A=11 \global\let\CJKKO@catcodeXI=A +\endgroup + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% allow break after ascii (except opening) and before cjk +%%% not a good solution. but... +\sfcode16=998 % t1 `` +\sfcode40=998 % ( +\sfcode60=998 % < +\sfcode91=998 % [ +\sfcode92=998 % ot1 `` +\sfcode96=998 % ` +\sfcode102=998 % oms { +\sfcode123=998 % t1 { +\def\CJK@testLastCJK{% + \global\CJK@false + \ifnum\lastkern=\@ne + \global \CJK@true + %%% inserted + \else + \ifhmode + \ifnum\lastkern=\tw@\else + \ifnum\lastskip=\z@ % last node is not space (?) + \ifnum\lastpenalty=\z@ % last node is not penalty (?) + \ifnum\spacefactor=998 \else % last char is not opening ascii + \ifx\CJK@plane\undefined\else + \CJK@testPostPunct{\CJK@@@enc}{\CJK@plane}{\CJK@gtemp}% + \fi + \ifCJK@ + \global\CJK@false + \else % this char is not closing cjk + \ifnum\lastnodetype=10 \CJKpostmathglue % after math-off + \else \CJKglue \fi + \fi + \fi\fi\fi\fi\fi + %%% end of inserted + \fi} + +%%%%%%%%%%%%%%%%%%%%%%%%% +% half-width puncts +\def\CJKKO@XXX@plane{30} +\def\CJKKO@FF@plane{ff} +\DeclareRobustCommand\CJKpunctsymbol[1]{% + \ifx\CJK@plane\CJKKO@XXX@plane + \ifcase#1\CJKsymbol{#1}% 3000 + \or \CJKKO@normal@punct{#1}% 3001 + \or \CJKKO@normal@punct{#1}% 3002 + \or \CJKsymbol{#1}% 3003 + \or \CJKsymbol{#1}% 3004 + \or \CJKsymbol{#1}% 3005 + \or \CJKsymbol{#1}% 3006 + \or \CJKsymbol{#1}% 3007 + \or \CJKKO@opening@punct{#1}% 3008 + \or \CJKKO@normal@punct{#1}% 3009 + \or \CJKKO@opening@punct{#1}% 300A + \or \CJKKO@normal@punct{#1}% 300B + \or \CJKKO@opening@punct{#1}% 300C + \or \CJKKO@normal@punct{#1}% 300D + \or \CJKKO@opening@punct{#1}% 300E + \or \CJKKO@normal@punct{#1}% 300F + \or \CJKKO@opening@punct{#1}% 3010 + \or \CJKKO@normal@punct{#1}% 3011 + \or \CJKsymbol{#1}% 3012 + \or \CJKsymbol{#1}% 3013 + \or \CJKKO@opening@punct{#1}% 3014 + \or \CJKKO@normal@punct{#1}% 3015 + \or \CJKKO@opening@punct{#1}% 3016 + \or \CJKKO@normal@punct{#1}% 3017 + \or \CJKKO@opening@punct{#1}% 3018 + \or \CJKKO@normal@punct{#1}% 3019 + \or \CJKKO@opening@punct{#1}% 301A + \or \CJKKO@normal@punct{#1}% 301B + \else \CJKsymbol{#1}% + \fi + \else + \ifx\CJK@plane\CJKKO@FF@plane + \ifnum#1="08 \CJKKO@opening@punct{#1}% FF08 + \else\ifnum#1="09 \CJKKO@normal@punct{#1}% FF09 + \else \CJKsymbol{#1}% + \fi\fi + \else + \CJKsymbol{#1}% + \fi + \fi} +\def\CJKKO@opening@punct#1{\leavevmode\hbox to.5em{\hss\CJKsymbol{#1}}} +\def\CJKKO@normal@punct#1{\leavevmode\hbox to.5em{\CJKsymbol{#1}\hss}} +\AtBeginDocument{ + \DeclareUnicodeCharacter{00B7} + {\leavevmode\kern.25em \Unicode{0}{"B7}\hskip.25em\relax} +} + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% lowercjkchar: eg, \lowercjkchar{-0.1em} +%%% do NOT use unit ex; hangul subfonts may not have x-height +\def\lowercjkchar#1{% + \ifx\usecjk@@font\undefined + \def\CJK@charlower{#1}% + \else + \PackageError{cjkutf8-ko} + {\string\lowercjkchar\space is not allowed} + {\string\lowercjkchar\space cannot be used with option [usecjkt1font]} + \fi} +\let\lowerCJKchar\lowercjkchar +\@onlypreamble\lowercjkchar \@onlypreamble\lowerCJKchar +\def\cancellowercjkchar{\let\CJK@charlower\undefined} +\let\cancellowerCJKchar\cancellowercjkchar +\@onlypreamble\cancellowercjkchar \@onlypreamble\cancellowerCJKchar +\AtBeginDocument{ + \ifx\usecjk@@font\undefined + \ifx\CJK@charlower\undefined\else + \DeclareRobustCommand{\CJKsymbol}[1]{% + \leavevmode\lower\CJK@charlower\hbox{% inserted + \symbol{#1}% + \ifCJK@bold@ + \hbox to \CJKboldshift{\hss\symbol{#1}}% + \hbox to \CJKboldshift{\hss\symbol{#1}}% + \fi + }% inserted + } + \fi\fi +} + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% nanummj has no hanja : texlive only +\def\CJKKO@mjdefault{nanummj} +\ifx\CJKKO@mjfont\CJKKO@mjdefault + \RequirePackage{cjkutf8-nanummjhanja} +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% auto-josa, light version +\RequirePackage{cjkutf8-josa} + +%%%%%%%%%%%%%%%%%%%%%%%%% +% hangul captions, labels, and spacing +\RequirePackage{kolabels-utf} +\if@hangul + \AtBeginDocument{\RequirePackage{konames-utf}} + \linespread{1.3888} + \footnotesep=1.3888\footnotesep + \skip\footins=1.3888\skip\footins plus6pt minus3pt + \frenchspacing +\fi + +%\ifx\usecjk@@font\undefined +% \CJKscale{0.95} +% \lowercjkchar{-0.07em} +%\fi + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% use pdftex's pdfgentounicode +\ifpdf + \ifx\pdfgentounicode\undefined\else + \ifx\use@cjk@cmap@\relax\else + \InputIfFileExists{glyphtounicode}{% + \let\CJK@addcmap\@gobble + \pdfgentounicode\@ne + }{} + \fi + \fi +\fi + +%%%%%%%%%%%%%%%%%%%%%%%%% +%%% \makeindex in memoir class clashed with this package. +%%% cause: memoir appempts to write index entries to a file +%%% at the end of document without protecting active characters. +%%% spotted by Juho Lee. thanks to him. +%\AtEndDocument{\CJK@makeInactive} +%%% still conflicts with package verbments. +%%% so now we make utf8 characters robust. +\count@"C2 \loop + \uccode\count@\count@ + \lccode\count@\count@ + \begingroup + \lccode`\~\count@ + \lowercase{\endgroup + \protected\edef~{\unexpanded\expandafter{~}}} +\ifnum\count@<"F4 \advance\count@\@ne \repeat +% then we have to care about hyperref bookmarks. +\ifx\pdfstringdefPreHook\undefined + \let\pdfstringdefPreHook\empty +\fi +\g@addto@macro\pdfstringdefPreHook{% + \count@"C2 \loop + \begingroup + \lccode`\~\count@ + \lowercase{\endgroup + \edef~{\unexpanded\expandafter{~}}}% + \ifnum\count@<"F4 \advance\count@\@ne \repeat + % and dotemph as well + \let\dotemph\@firstofone +} +% protect against lowercase +\count@"80 \loop + \uccode\count@\count@ + \lccode\count@\count@ +\ifnum\count@<"BF \advance\count@\@ne \repeat + +%%% ignore variation selectors for korean hanja +\DeclareUnicodeCharacter{FE00}{} +\DeclareUnicodeCharacter{FE01}{} +\DeclareUnicodeCharacter{FE02}{} + +\endinput |