%% %% This is file `zhmCJK.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% zhmCJK.dtx (with options: `package') %% %% This is a generated file. %% %% Copyright (C) 2012 by Leo Liu %% -------------------------------------------------------------------------- %% 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. %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{zhmCJK} [2012/02/06 v0.8 setup CJK fonts dynamically] \def\ifzhm@primitive#1{\begingroup \edef\tempa{\meaning#1}% \edef\tempb{\string#1}% \ifx\tempa\tempb \endgroup} \ifzhm@primitive\eTeXversion\else\endgroup \PackageError{zhmCJK}% {You are not running an eTeX-compatible engine. zhmCJK needs an eTeX-compatible TeX engine}% {If `latex' and `pdflatex' commands fails, try `elatex' or `pdfelatex' command. If all fails, you may need to upgrade your TeX system.} \expandafter\endinput \fi \ifzhm@primitive\luatexversion \PackageError{zhmCJK}% {You are wrongly use lualatex or dvilualatex to compile the file. zhmCJK do not support LuaTeX engine.}% {Use pdflatex or latex+dvipdfmx to compile the file.} \expandafter\endinput \else\endgroup\fi \ifzhm@primitive\XeTeXrevision \PackageError{zhmCJK}% {You are wrongly use xelatex to compile the file. zhmCJK do not support XeTeX engine.}% {You can use xeCJK instead.} \RequirePackage{xeCJK} \expandafter\endinput \else\endgroup\fi \RequirePackage{ifpdf} \RequirePackage{kvoptions} \SetupKeyvalOptions{ family=zhm@opt, prefix=zhm@} \DeclareStringOption[UTF8]{encoding} \DeclareBoolOption[true]{pdffakebold} \DeclareStringOption[0.4]{AutoFakeBold}[0.4] \DeclareStringOption[0]{AutoFakeSlant}[0.167] \ProcessKeyvalOptions* \RequirePackage{CJK} \def\zhm@check@encoding{% \unless\ifcsname CJK@\zhm@encoding @nfssenc\endcsname \PackageError{zhmCJK}% {There is no CJK encoding `\zhm@encoding', please check it over. `UTF8' is used as default encoding.}% {You can use `UTF8', `GBK', `Bg5', `JIS', `KS', etc. Read CJK.txt from CJK package for all valid encodings.} \def\zhm@encoding{UTF8} \fi} \zhm@check@encoding \begingroup \def\zhm@UTF{UTF8} \ifx\zhm@encoding\zhm@UTF\endgroup \@namedef{opt@CJK.sty}{encapsulated} \let\CJK@global\relax \let\CJK@active\relax \let\CJK@local\relax \RequirePackage{CJKutf8} \else\endgroup\fi \RequirePackage{CJKspace} \RequirePackage{CJKpunct} \edef\zhm@nfssenc{\@nameuse{CJK@\zhm@encoding @nfssenc}} \edef\zhm@sfd{\@nameuse{zhm@\zhm@encoding @sfd}} \def\zhm@def@sfd#1#2{\@namedef{zhm@#1@sfd}{#2}} \zhm@def@sfd{UTF8}{Unicode} \zhm@def@sfd{Bg5}{UBig5} \zhm@def@sfd{Bg5+}{UBg5plus} \zhm@def@sfd{JIS}{UJIS} \zhm@def@sfd{KS}{UKS} \zhm@def@sfd{GB}{UGB} \zhm@def@sfd{GBK}{UGBK} \def\zhm@check@sfd{% \unless\ifcsname zhm@\zhm@encoding @sfd\endcsname \PackageError{zhmCJK}% {No SFD file specified for `\zhm@encoding' encoding. Only `UTF8', `Bg5', `Bg5+', `GB', `GBK', `JIS' and `KS' are supported by now.}% {} \def\zhm@sfd{Unicode} \fi} \zhm@check@sfd \AtEndOfPackage{\CJK@makeActive} \AtBeginDocument{\begin{CJK*}{\zhm@encoding}{\CJKfamilydefault}} \AtEndDocument{\clearpage\end{CJK*}} \newcount\zhm@fontnum \ifpdf \def\zhm@pdfliteral#1{\pdfliteral{#1}} \else \def\zhm@pdfliteral#1{\special{pdf:literal #1}} \fi \ifpdf \def\zhm@pdfliteraldirect#1{\pdfliteral direct {#1}} \else \def\zhm@pdfliteraldirect#1{\special{pdf:literal direct #1}} \fi \let\zhm@old@CJKbold\CJKbold \let\zhm@old@CJKnormal\CJKnormal \def\zhm@pdf@CJKbold{% \zhm@pdfliteraldirect{2 Tr \@nameuse{zhm@\CJK@family @embolden} w}% \aftergroup\zhm@pdf@CJKnormal} \def\zhm@pdf@CJKnormal{\zhm@pdfliteraldirect{0 Tr}} \ifzhm@pdffakebold \let\CJKbold\zhm@pdf@CJKbold \let\CJKnormal\zhm@pdf@CJKnormal \fi \def\zhm@zero{0} \def\ifzhm@fakebold{\expandafter\unless\expandafter\ifx \csname zhm@\zhm@fam @embolden\endcsname \zhm@zero} \def\zhm@fakeboldfalse{\@namedef{zhm@\zhm@fam @embolden}{0}} \def\zhm@pdf@CJKslant{% \zhm@pdfliteral{1 0 \@nameuse{zhm@\CJK@family @slant} 1 0 0 cm}% \aftergroup\zhm@pdf@CJKunslant} \def\zhm@pdf@CJKunslant{% \zhm@pdfliteral{1 0 \@nameuse{zhm@\CJK@family @negslant} 1 0 0 cm}} \def\ifzhm@fakeslant{\expandafter\unless\expandafter\ifx \csname zhm@\zhm@fam @slant\endcsname \zhm@zero} \def\zhm@fakeslantfalse{% \@namedef{zhm@\zhm@fam @slant}{0}% \@namedef{zhm@\zhm@fam @negslant}{0}} \def\zhm@DeclareFontShape#1#2#3#4#5#6{% \scantokens{\DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6}}} \DeclareSizeFunction{CJKsl}{\CJK@empty\@font@warning} \ifpdf \def\zhm@mapline#1#2{% \pdfmapline{=zhm#1@\zhm@sfd @ <#2}} \else \def\zhm@mapline#1#2{% \special{pdf:mapline zhm#1@\zhm@sfd @ unicode #2}} \fi \def\zhm@setfontmap#1#2{% \AtBeginDvi{\zhm@mapline{#1}{#2}} \AtBeginDocument{% \@ifpackageloaded{atbegshi}{\AtBeginShipoutFirst{% \zhm@mapline{#1}{#2}}}{}}} \def\zhm@DeclareRealFont#1{ \unless\ifcsname zhm@#1@fontnum\endcsname \global\advance\zhm@fontnum\@ne \ifnum\zhm@fontnum>\@xxxii \PackageError{zhmCJK}% {No more CJK font families can be setup.}% {There are at most 32 families setup by zhmCJK.} \else \expandafter\xdef\csname zhm@#1@fontnum\endcsname{\the\zhm@fontnum} \zhm@setfontmap{\the\zhm@fontnum}{#1} \fi \fi \edef\zhm@tfm{zhm\@nameuse{zhm@#1@fontnum}}} \define@key{zhm}{encoding}{% \edef\zhm@encoding{#1}% \zhm@check@encoding \edef\zhm@nfssenc{\@nameuse{CJK@\zhm@encoding @nfssenc}}% \edef\zhm@sfd{\@nameuse{zhm@\zhm@encoding @sfd}}% \zhm@check@sfd} \define@key{zhm}{AutoFakeBold}% [\ifx\zhm@AutoFakeBold\zhm@zero 0.4\else\zhm@AutoFakeBold \fi]% {\expandafter\xdef\csname zhm@\zhm@fam @embolden\endcsname{#1}} \def\zhm@neg#1{\strip@pt\dimexpr-#1pt\relax} \define@key{zhm}{AutoFakeSlant}% [\ifx\zhm@AutoFakeSlant\zhm@zero 0.167\else\zhm@AutoFakeSlant \fi]% {\expandafter\xdef\csname zhm@\zhm@fam @slant\endcsname{#1}% \expandafter\xdef\csname zhm@\zhm@fam @negslant\endcsname{\zhm@neg{#1}}} \define@key{zhm}{BoldFont}{ \zhm@DeclareRealFont{#1} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{b}{n}{<-> CJK * \zhm@tfm}{} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{bx}{n}{<-> CJK * \zhm@tfm}{} \zhm@fakeboldfalse} \define@key{zhm}{ItalicFont}{ \zhm@DeclareRealFont{#1} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{m}{it}{<-> CJK * \zhm@tfm}{}} \define@key{zhm}{BoldItalicFont}{ \zhm@DeclareRealFont{#1} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{b}{it}{<-> CJK * \zhm@tfm}{} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{bx}{it}% {<-> CJK * \zhm@tfm}{}} \define@key{zhm}{SlantedFont}{ \zhm@DeclareRealFont{#1} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{m}{sl}{<-> CJK * \zhm@tfm}{} \zhm@fakeslantfalse} \define@key{zhm}{BoldSlantedFont}{ \zhm@DeclareRealFont{#1} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{b}{sl}{<-> CJK * \zhm@tfm}{} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{bx}{sl}% {<-> CJK * \zhm@tfm}{}} \def\zhm@newfontfamily#1[#2]#3{ \begingroup \ifcsname zhm@#1@font\endcsname \PackageWarning{zhmCJK}{Redefnition of CJK family `#1'.} \fi \edef\zhm@fam{#1} \expandafter\xdef\csname zhm@#1@font\endcsname{#3} \zhm@DeclareRealFont{#3} \DeclareFontFamily{\zhm@nfssenc}{\zhm@fam}{\hyphenchar\font\m@ne} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{m}{n}{<-> CJK * \zhm@tfm}{} \setkeys{zhm}{% AutoFakeBold=\zhm@AutoFakeBold, AutoFakeSlant=\zhm@AutoFakeSlant} \setkeys{zhm}{#2} \ifzhm@fakebold \zhm@DeclareRealFont{#3} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{bx}{n}% {<-> CJKb * \zhm@tfm}{\CJKbold} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{b}{n}% {<-> CJKb * \zhm@tfm}{\CJKbold} \fi \ifzhm@fakeslant \zhm@DeclareRealFont{#3} \zhm@DeclareFontShape{\zhm@nfssenc}{\zhm@fam}{m}{sl}% {<-> CJKsl * \zhm@tfm}{\zhm@pdf@CJKslant} \fi \endgroup} \newcommand*\setCJKfamilyfont[1]{% \@ifnextchar[%] {\zhm@newfontfamily{#1}}% {\zhm@newfontfamily{#1}[]}} \@onlypreamble\setCJKfamilyfont \newcommand*\setCJKmainfont[2][]{% \zhm@newfontfamily{\CJKrmdefault}[#1]{#2}} \@onlypreamble\setCJKmainfont \let\setCJKromanfont\setCJKmainfont \@onlypreamble\setCJKromanfont \newcommand*\setCJKsansfont[2][]{% \zhm@newfontfamily{\CJKsfdefault}[#1]{#2}} \@onlypreamble\setCJKsansfont \newcommand*\setCJKmonofont[2][]{% \zhm@newfontfamily{\CJKttdefault}[#1]{#2}} \@onlypreamble\setCJKmonofont \providecommand*\CJKrmdefault{rm} \providecommand*\CJKsfdefault{sf} \providecommand*\CJKttdefault{tt} \providecommand*\CJKfamilydefault{\CJKrmdefault} \DeclareRobustCommand\normalfont {\CJKfamily{\CJKfamilydefault}% \usefont\encodingdefault \familydefault \seriesdefault \shapedefault \relax} \let\reset@font\normalfont \DeclareRobustCommand\rmfamily {\not@math@alphabet\rmfamily\mathrm \fontfamily\rmdefault\CJKfamily{\CJKrmdefault}\selectfont} \DeclareRobustCommand\sffamily {\not@math@alphabet\sffamily\mathsf \fontfamily\sfdefault\CJKfamily{\CJKsfdefault}\selectfont} \DeclareRobustCommand\ttfamily {\not@math@alphabet\ttfamily\mathtt \fontfamily\ttdefault\CJKfamily{\CJKttdefault}\selectfont} \endinput %% %% End of file `zhmCJK.sty'.