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.
177 lines
4.9 KiB
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}
|
|
|
|
|