%# -*- coding:GBK -*-
% CJKmove.sty
%
% �ƶ� CJK �ַ�����ʹ�ù̶�λ�úʹ�С��1em���� bounding box
% ����������ֱ���Ű�ʱ�ַ�ƫ�Ƶ�У�
% �˺��� CJK �� xeCJK ������Ч
%
% ��ߣ�milksea

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{CJKmove}[2008/08/10 ver 0.1]

% frame ѡ���ÿ�� CJK �ַ����߿򣬰���鿴�ַ� bounding box λ��
\newif\if@CJK@framed
\@CJK@framedfalse
\DeclareOption{frame}{\@CJK@framedtrue}
\DeclareOption{noframe}{\@CJK@framedfalse}
\DeclareOption*{%
 \PackageWarning{CJKmove}{Unknown option ��\CurrentOption��}%
}
\ProcessOptions

\ifx\XeTeXinputencoding\undefined
 \RequirePackage{CJK}
\else
 \RequirePackage{xeCJK}
\fi

% \CJK@symbol������ԭ���Ķ���
\let\CJK@symbol\CJKsymbol

% �ƶ��� CJK �ַ�
\def\CJK@moved@symbol#1{%
 \leavevmode
 \vbox to 1em{%
   \vss
   \hbox to 1em{%
     \raise\CJK@movey em\hbox{\kern\CJK@movex em\CJK@symbol{#1}}\hss
   }%
 }%
}

% �ӿ�� CJK �ַ�
\def\CJK@framed@symbol#1{%
 \bgroup
   \fboxsep=0pt
   \fbox{\CJK@symbol{#1}}%
 \egroup
}

% �ӿ����ƶ��� CJK �ַ�
\def\CJK@moveframed@symbol#1{%
 \bgroup
   \fboxsep=0pt
   \fbox{\CJK@moved@symbol{#1}}%
 \egroup
}

% ���ݼӿ�����ѡ���ض��� CJK �ַ�
\if@CJK@framed
 \def\CJKmove{\let\CJKsymbol\CJK@moveframed@symbol}
 \def\CJKnomove{\let\CJKsymbol\CJK@framed@symbol}
\else
 \def\CJKmove{\let\CJKsymbol\CJK@moved@symbol}
 \def\CJKnomove{\let\CJKsymbol\CJK@symbol}
\fi

% ������ַ�������ͬ
\def\CJKpunctsymbol{\expandafter\CJKsymbol}

% �趨ˮƽ���Һ��ֱ���ϵ��ƶ���룬���Ϊ����֣���λ em
\def\setCJKmove#1#2{
 \def\CJK@movex{#1}%
 \def\CJK@movey{#2}%
}
% Ĭ���ƶ���룺SimSun �� vertical ģʽ����
\def\resetCJKmove{%
 \def\CJK@movex{0}%
 \def\CJK@movey{0.4}%
}

% ��ʼ��
\resetCJKmove
\CJKnomove

\endinput


��ѡ�

 frame       ����� CJK �ַ��ӿ�

 noframe     ���ӿ�


�÷���

 \CJKmove                      ���� CJK �ַ��ƶ�ģʽ

 \CJKnomove                    ���� CJK �ַ����ƶ�ģʽ

 \setCJKmove <���x> <���y>   �������� x em������ y em

 \resetCJKmove                 �����ƶ���룬Ĭ��Ϊ���� 0.4em ���� SimSun


ע�����

 ��ͬ�����������Ҫ���ò�ͬ���ƶ����


BUG��

 bounding box �ƺ����Ļ��Dz�׼


TODO��

 ֧�ֲ��ȿ�ġ��ɹ涨��ȺͿ�ƽ�Ƶ� bounding box