OSDN Git Service

luatexja-ruby
[luatex-ja/luatexja.git] / src / addons / luatexja-ruby.sty
index f3ad648..7c1a939 100644 (file)
@@ -4,7 +4,7 @@
 
 % LaTeX only!
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-ruby}[2015/05/09 v0.22]
+\ProvidesPackage{luatexja-ruby}[2020-10-05 v0.3]
 \RequirePackage{luatexja}
 
 %%------------------
@@ -23,7 +23,7 @@
   \ltj@@set@stack@real{RIPOST}{0}{0x7FFFFFFF}#1 }
 \def\ltj@@set@stack@real#1#2#3{%
   \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1,
-    #2, #3, luatexja.token.scan_word)}}
+    #2, #3, token.scan_word)}}
 
 % ルビ用のキー設定
 \def\ltj@@rkeydef#1{
 \ltj@@rkeydef{fontcmd}%% フォント
 \define@boolkey[ltj]{ruby}{rubysmash}[true]{}
 
+\ltj@@rkeydef{ybaseheight} % 縦組以外 (yoko, utod, dtou)
+\ltj@@rkeydef{tbaseheight} % 縦組
+\define@key[ltj]{ruby}{baseheight}{%
+  \expandafter\def\csname ltj@@rubyip@ybaseheight\endcsname{#1}%
+  \expandafter\def\csname ltj@@rubyip@tbaseheight\endcsname{#1}%
+}
+
+%% これらの値が正のとき,親文字の高さをこの値(\zh 単位)とみなす
 
 %%%%%%%% setkeys の別名
 \protected\def\ltjsetruby{\setkeys[ltj]{ruby}}
       maxmargin = \ltj@safe@dimen{\ltj@@rubyip@maxmargin\zw},
       pre = \ltj@safe@dimen{\ltj@@rubyip@pre#1},
       post = \ltj@safe@dimen{\ltj@@rubyip@post#1},
-      intergap =  \ltj@safe@dimen{\ltj@@rubyip@intergap\zw},
+      intergap =  \ltj@safe@dimen{\ltj@@rubyip@intergap\zh},
       stretch 
         = 262144 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchbol
          + 512 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretcheol
          + \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretch,
       mode 
-        = 2097152 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchruby
+        = (2097152 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchruby
           + \ltj@safe@num{\ltj@@rubyip@mode}
-          + 1048576 * \ifltj@ruby@rubysmash1\else0\fi
+          + 1048576 * \ifltj@ruby@rubysmash1\else0\fi),
+      baseheight = \ltj@safe@dimen{\ifnum\ltjgetparameter{direction}=3
+                     \ltj@@rubyip@tbaseheight\else\ltj@@rubyip@ybaseheight\fi\zh},
     \string}
 }
 %%%
 }
 \def\ltj@@ruby[#1]#2#3{{% #1: option #2: 親文字群,#3: ルビ文字列群,共に| 区切り
   \setkeys[ltj]{ruby}{#1}%
-  \directlua{ruby_tmplist_r = \string{\string}; ruby_tmplist_p = \string{\string}}%
+  \directlua{luatexja.ruby.ruby_tmplist_r = \string{\string};
+       luatexja.ruby.ruby_tmplist_p = \string{\string}}%
   \leavevmode\dimen0=\f@size pt\dimen1=\ltj@@rubyip@size\dimen0%
   % 引数展開,テーブルにセット
   \pxrr@decompbar{#2}{\let\ltj@@ruby@mark\ltj@@ruby@sp\pxrr@res}%
   {\fontsize{\ltj@@rubyip@size\dimen0}\z@\selectfont\ltj@@rubyip@fontcmd\global\dimen1=\zw}%
   \directlua{%
     luatexja.ruby.texiface(\ltj@@ruby@create@table{\dimen1},
-    ruby_tmplist_r, ruby_tmplist_p)}%
+    luatexja.ruby.ruby_tmplist_r, luatexja.ruby.ruby_tmplist_p)}%
 }}
 
 \def\ltj@@ruby@sr#1{%
   \setbox0=\hbox{\fontsize{\dimen1}\z@\ltj@@rubyip@fontcmd\selectfont#1}%
-  \directlua{table.insert(ruby_tmplist_r, luatexja.ruby.cpbox())}%
+  \directlua{table.insert(luatexja.ruby.ruby_tmplist_r, luatexja.ruby.cpbox())}%
 }
 \def\ltj@@ruby@sp#1{%
   \setbox0=\hbox{\selectfont#1}%
-  \directlua{table.insert(ruby_tmplist_p, luatexja.ruby.cpbox())}%
+  \directlua{table.insert(luatexja.ruby.ruby_tmplist_p, luatexja.ruby.cpbox())}%
 }
 
 \protected\def\ltjkenten{\@ifnextchar[\ltj@@kenten{\ltj@@kenten[]}}%]
   \ltjsetparameter{rubypreintrusion={\the\count@,1}, 
     rubypostintrusion={\the\count@,1}}
   \advance\count@1\repeat
-%% 「」
-\ltjsetparameter{rubypreintrusion={`「,1}, 
-  rubypostintrusion={`」,1}}
-%% ,、
-\ltjsetparameter{rubypreintrusion={`,,1}, 
-  rubypostintrusion={`,,1}}
-\ltjsetparameter{rubypreintrusion={`、,1}, 
-  rubypostintrusion={`、,1}}
-%% ・
-\ltjsetparameter{rubypreintrusion={`・,1}, 
-  rubypostintrusion={`・,1}}
+%% カタカナ
+\count@="30A0\loop\relax\ifnum \count@<"3100
+  \ltjsetparameter{rubypreintrusion={\the\count@,1}, 
+    rubypostintrusion={\the\count@,1}}
+  \advance\count@1\repeat
+%% Kana Supplement
+\count@="1B000\loop\relax\ifnum \count@<"1B170
+  \ltjsetparameter{rubypreintrusion={\the\count@,1}, 
+    rubypostintrusion={\the\count@,1}}
+  \advance\count@1\repeat
+%% 開き括弧・閉じ括弧
+\@for\@tmp:=`\‘,`\“,`\〈,`\《,`\「,`\『,`\【,`\〔,`\〖,`\〘,`\〝,`\(,`\[,`\{,`\⦅ \do
+  {\ltjsetparameter{rubypreintrusion={\@tmp,1}}}
+\@for\@tmp:=`\’,`\”,`\〉,`\》,`\」,`\』,`\】,`\〕,`\〗,`\〙,`\〟,`\),`\],`\},`\⦆ \do
+  {\ltjsetparameter{rubypostintrusion={\@tmp,1}}}
+%% 中点類
+\@for\@tmp:=`\・,`\:,`\;,`\―,`\‥,`\…,`〳,`\〴,`\〵,"2014 \do
+  {\ltjsetparameter{rubypreintrusion={\@tmp,1},rubypostintrusion={\@tmp,1}}}
+%% 読点・句点
+\@for\@tmp:=`\、,`\,,`\。,`\. \do
+  {\ltjsetparameter{rubypostintrusion={\@tmp,1}}}
 %% 段落インデント部分
 \ltjsetparameter{rubypreintrusion={-1,1}}
 
   stretchruby={1}{2}{1}, stretch = {1}{2}{1},
   stretchbol={0}{1}{1}, stretcheol={1}{1}{0},
   maxmargin=0.5, size=0.5, intergap=0, rubysmash=false,
-  kenten=\ltjalchar`•, fontcmd=\relax
+  kenten=\ltjalchar`•, fontcmd=\relax, ybaseheight=0.88, tbaseheight=0.5
 }
 
 \endinput