summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty')
-rw-r--r--Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty120
1 files changed, 120 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty b/Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty
new file mode 100644
index 00000000000..e85eb526a90
--- /dev/null
+++ b/Master/texmf-dist/doc/support/asymptote-by-example-zh-cn/src/figure-src/CJKmove.sty
@@ -0,0 +1,120 @@
+%# -*- 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 似乎定的还是不准
+
+
+TODO:
+
+ 支持不等宽的、可规定深度和可平移的 bounding box
+