OSDN Git Service

luatexja-ruby: add epsilon key for errors in calc.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Fri, 25 Dec 2020 20:26:11 +0000 (05:26 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Fri, 25 Dec 2020 20:26:34 +0000 (05:26 +0900)
src/addons/luatexja-ruby.sty
src/ltj-ruby.lua

index 90dfece..0dacf32 100644 (file)
@@ -4,7 +4,7 @@
 
 % LaTeX only!
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-ruby}[2020-12-24 v0.5]
+\ProvidesPackage{luatexja-ruby}[2020-12-25 v0.51]
 \RequirePackage{luatexja}
 
 %%------------------
 %% attr は sp 単位だが,ユーザーは親文字全角単位で指定
 \ltj@@rkeydef{intergap}
 
+%% epsilon: モノルビ * n にする際に,ルビの方がどれだけ親文字より長い
+%% 状況を許容するか.親文字全角単位.計算誤差を想定.
+\ltj@@rkeydef{epsilon}
+
 \ltj@@rkeydef{kenten}%% 圏点文字
 \ltj@@rkeydef{fontcmd}%% フォント
 \define@boolkey[ltj]{ruby}{rubysmash}[true]{}
 \catcode`\_=11
 \gdef\ltj@@ruby@create@table#1{% #1: ルビ全角
     \string{
+      eps = \ltj@safe@dimen{\ltj@@rubyip@epsilon\zw},
       before_jfmgk = 0, after_jfmgk = 0,
       rubyzw = \ltj@safe@dimen{#1}, 
       maxmargin = \ltj@safe@dimen{\ltj@@rubyip@maxmargin\zw},
   stretchbol={0}{1}{1}, stretcheol={1}{1}{0},
   maxmargin=0.5, size=0.5, intergap=0, rubysmash=false,
   kenten=\textbullet, fontcmd=\relax, ybaseheight=0.88, tbaseheight=0.5,
-  intrude_jfmgk, intrude_kanjiskip, intrude_xkanjiskip
+  intrude_jfmgk, intrude_kanjiskip, intrude_xkanjiskip,
+  epsilon=0.0001,
 }
 
 \endinput
index 34cdc8c..9824ff1 100644 (file)
@@ -278,9 +278,9 @@ function luatexja.ruby.texiface(rst, rtlr, rtlp)
                          'the body (' .. #rtlr .. ' != ' .. #rtlp .. ').',
                          '')
    else
-      local f = true
+      local f, eps = true, rst.eps
       for i = 1,#rtlr do
-         if getfield(rtlr[i], 'width') > getfield(rtlp[i], 'width') then
+         if getfield(rtlr[i], 'width') > getfield(rtlp[i], 'width') + eps then
             f = false; break
          end
       end