You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
tex-compiler/texmf-dist/tex/xetex/xetexko/xetexko-vertical.sty

177 lines
4.9 KiB

% xetexko-vertical.sty
%
% Copyright (c) 2013-2020 Dohyun Kim <nomos at ktug org>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% 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.3c or later is part of all distributions of LaTeX
% version 2006/05/20 or later.
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else
\ProvidesPackage{xetexko-vertical}
[2020/02/17 v2.23 Vertical environment for XeTeX-ko]
\fi
% do not veticalize headline/footline
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname selectfont\endcsname\relax % plain
\protected\def\verticaltypesetting{%
\dimen@\hsize\hsize\vsize\vsize\dimen@
\edef\plainoutput{\unexpanded{\dimen@\hsize\hsize\vsize\vsize\dimen@}%
\unexpanded\expandafter{\plainoutput}}%
\def\pagebody{\setbox\z@\vbox to\hsize{\boxmaxdepth=\maxdepth
\pagecontents}\xetexko@rotatebox\z@\box\z@}%
\maxdepth\z@ \XK@vertical@spacing}
\else % latex
\protected\def\verticaltypesetting{%
\AtBeginDocument{\XK@vertical@spacing}%
\maxdepth\z@
\dimen@\textwidth
\textwidth\textheight
\textheight\dimen@
\edef\@outputpage{%
\unexpanded{\xetexko@rotatebox\@outputbox\textwidth\textheight}%
\unexpanded\expandafter{\@outputpage}}%
}
\@onlypreamble\verticaltypesetting
\fi
\def\xetexko@rotatebox#1{%
\ifvbox#1\count@\@ne\else\count@\z@\fi
\dimen@\wd#1\dimen@ii\dimexpr\ht#1+\dp#1\relax
\setbox#1\ifnum\count@=\@ne
\vbox to\dimen@\bgroup\hbox to\dimen@ii\bgroup\hfil\else
\hbox to\dimen@ii\bgroup\vbox to\dimen@\bgroup\fi
\wd#1\z@ \ht#1\z@ \dp#1\z@
\special{x:gsave}\special{x:rotate -90}\box#1\special{x:grestore}%
\ifnum\count@=\@ne\egroup\vfil\else\vfil\egroup\hfil\fi\egroup
}
% users can declare vertical EM size, which might be different from 1em.
\newdimen\verticalem
\def\XK@vertical@spacing{%
\ifnum\verticalem > \z@
\def\XK@vert@half@em{.5\verticalem}%
\else
\def\XK@vert@half@em{.5em}%
\fi
\let\xk@horiz@precjkopenparen \precjkopenparen
\let\xk@horiz@precjkcloseparen\precjkcloseparen
\let\xk@horiz@precjkfullstop \precjkfullstop
\ifx\precjkopenparen\relax\else
\def\precjkopenparen {\leavevmode
\ifx\empty\xetexkocharraise\else\raise\xetexkocharraise\fi
\hbox
\ifx\XKdisablecjksymbolspacing\empty
\bgroup
\else
to\XK@vert@half@em \bgroup \hss
\fi
}%
\fi
\ifx\precjkcloseparen\relax\else
\def\precjkcloseparen{\leavevmode
\ifx\empty\xetexkocharraise\else\raise\xetexkocharraise\fi
\hbox
\ifx\XKdisablecjksymbolspacing\empty\else
to\XK@vert@half@em
\fi
\bgroup}%
\fi
\ifx\precjkfullstop\relax\else
\def\precjkfullstop {\leavevmode
\ifx\empty\xetexkocharraise\else\raise\xetexkocharraise\fi
\hbox
\ifx\XKdisablecjksymbolspacing\empty\else
to\XK@vert@half@em
\fi
\bgroup}%
\fi
\spaceskip\XK@vert@half@em plus\XK@vert@half@em\relax
\parindent\XK@vert@half@em \parindent2\parindent
}
\protected\def\vertical#1{%
\setbox\z@\vbox\bgroup
\hsize=#1%
\leftskip\z@
\rightskip\z@
\parindent\z@
\everypar{}%
\XK@vertical@spacing
}
\protected\def\endvertical{%
\egroup
\dimen@\dimexpr\ht\z@+\dp\z@\relax
\dimen@ii\dimexpr\wd\z@-\dp\z@\relax
\setbox\z@\hbox{%
\kern\dimexpr\ht\z@+0.5em\relax
\wd\z@\z@
\ht\z@\z@
\dp\z@\z@
\special{x:gsave}%
\special{x:rotate -90}%
\box\z@
\special{x:grestore}}%
\wd\z@\dimen@
\ht\z@\z@
\dp\z@\z@
\leavevmode
\raise\dimen@ii\box\z@
}
% horizontal box inside vertical typesetting
\protected\def\horizontal#1{%
\setbox\z@\vbox\bgroup
\hsize=#1%
\leftskip \z@
\rightskip\z@
\parindent\z@
\everypar {}%
\spaceskip \fontdimen2\font
plus \fontdimen3\font
minus\fontdimen4\font
\ifdefined\xk@horiz@precjkopenparen
\let\precjkopenparen \xk@horiz@precjkopenparen
\let\precjkcloseparen\xk@horiz@precjkcloseparen
\let\precjkfullstop \xk@horiz@precjkfullstop
\fi
}
\protected\def\endhorizontal{%
\egroup
\dimen@\dimexpr\ht\z@+\dp\z@\relax
\dimen@ii\dimexpr\wd\z@+.5ex\relax
\setbox\z@\hbox\bgroup
\wd\z@\z@\ht\z@\z@\dp\z@\z@
\special{x:gsave}%
\special{x:rotate 90}%
\box\z@
\special{x:grestore}%
\egroup
\wd\z@\dimen@
\ht\z@\dimen@ii
\dp\z@\z@
\fboxsep=-\fboxrule
\leavevmode\lower.5ex\box\z@
}
\protected\def\vertlatin#1{\leavevmode\lower0.5ex\hbox{\latinmarks #1}}
\endinput
%% example:
%\newhangulfontfamily\myvertfont
% [Script=Hangul,Vertical=RotatedGlyphs]
% {HCR Dotum LVT}
%\verticalem=1.05em
%\begin{vertical}{12em}\myvertfont
% 세로쓰기 영역.
% #1 = 세로길이
%\end{vertical}