OSDN Git Service

ltjs*.cls: added option "xreal" (patch NTSS for "better" optical scaling)
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 26 Mar 2016 10:31:15 +0000 (19:31 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 26 Mar 2016 10:31:15 +0000 (19:31 +0900)
doc/ltjsclasses.pdf
src/ltjsarticle.cls
src/ltjsbook.cls
src/ltjsclasses.dtx
src/ltjskiyou.cls
src/ltjspf.cls
test/test22-ltjs-mag.tex [new file with mode: 0644]

index 92be24b..62ff4a9 100644 (file)
Binary files a/doc/ltjsclasses.pdf and b/doc/ltjsclasses.pdf differ
index 95376f0..992b8d9 100644 (file)
 \DeclareOption{landscape}{\@landscapetrue}
 \newif\if@slide
 \@slidefalse
-\newdimen\ltjs@mpt \ltjs@mpt=1\p@
-\DeclareOption{slide}{\@slidetrue\ltjs@mpt=3.58318\p@\@landscapetrue\@titlepagetrue}
-\DeclareOption{8pt} {\ltjs@mpt=.83333\p@}% 1.2^(-1)
-\DeclareOption{9pt} {\ltjs@mpt=.91287\p@}% 1.2^(-0.5}
-\DeclareOption{10pt}{\ltjs@mpt=1\p@}
-\DeclareOption{11pt}{\ltjs@mpt=1.0954\p@}% 1.2^0.5
-\DeclareOption{12pt}{\ltjs@mpt=1.2\p@}
-\DeclareOption{14pt}{\ltjs@mpt=1.44\p@}
-\DeclareOption{17pt}{\ltjs@mpt=1.728\p@}
-\DeclareOption{20pt}{\ltjs@mpt=2\p@}
-\DeclareOption{21pt}{\ltjs@mpt=2.0736\p@}
-\DeclareOption{25pt}{\ltjs@mpt=2.48832\p@}
-\DeclareOption{30pt}{\ltjs@mpt=2.98598\p@}
-\DeclareOption{36pt}{\ltjs@mpt=3.58318\p@}
-\DeclareOption{43pt}{\ltjs@mpt=4.29982\p@}
-\DeclareOption{12Q} {\ltjs@mpt=.92308\p@}% 1pt*12Q/13Q
-\DeclareOption{14Q} {\ltjs@mpt=1.07692\p@}% 1pt*14Q/13Q
-\DeclareOption{10ptj}{\ltjs@mpt=1.08547\p@}% 1pt*10bp/13Q
-\DeclareOption{10.5ptj}{\ltjs@mpt=1.13974\p@}
-\DeclareOption{11ptj}{\ltjs@mpt=1.19402\p@}
-\DeclareOption{12ptj}{\ltjs@mpt=1.30256\p@}
+\def\ltjs@magscale{1}
+\DeclareOption{slide}{\@slidetrue\def\ltjs@magscale{3.58318}\@landscapetrue\@titlepagetrue}
+\DeclareOption{8pt} {\def\ltjs@magscale{.83333}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\ltjs@magscale{.91287}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\ltjs@magscale{1}}
+\DeclareOption{11pt}{\def\ltjs@magscale{1.0954}}% 1.2^0.5
+\DeclareOption{12pt}{\def\ltjs@magscale{1.2}}
+\DeclareOption{14pt}{\def\ltjs@magscale{1.44}}
+\DeclareOption{17pt}{\def\ltjs@magscale{1.728}}
+\DeclareOption{20pt}{\def\ltjs@magscale{2}}
+\DeclareOption{21pt}{\def\ltjs@magscale{2.0736}}
+\DeclareOption{25pt}{\def\ltjs@magscale{2.48832}}
+\DeclareOption{30pt}{\def\ltjs@magscale{2.98598}}
+\DeclareOption{36pt}{\def\ltjs@magscale{3.58318}}
+\DeclareOption{43pt}{\def\ltjs@magscale{4.29982}}
+\DeclareOption{12Q} {\def\ltjs@magscale{.92308}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\ltjs@magscale{1.07692}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\ltjs@magscale{1.08547}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\ltjs@magscale{1.13974}}
+\DeclareOption{11ptj}{\def\ltjs@magscale{1.19402}}
+\DeclareOption{12ptj}{\def\ltjs@magscale{1.30256}}
+\newif\if@ltjs@mag@xreal
+\@ltjs@mag@xrealfalse
+\DeclareOption{xreal}{\@ltjs@mag@xrealtrue}
+\DeclareOption{noxreal}{\@ltjs@mag@xrealfalse}
+\DeclareOption{real}{\@ltjs@mag@xrealfalse}
 \hour\time \divide\hour by 60\relax
 \@tempcnta\hour \multiply\@tempcnta 60\relax
 \minute\time \advance\minute-\@tempcnta
 \DeclareOption{mingoth}{\mingothtrue}
 \DeclareOption{ptexjis}{\ptexjistrue}
 \DeclareOption{jis}{\jisfonttrue}
-\newif\ifpapersize
-\papersizefalse
-\DeclareOption{papersize}{\papersizetrue}
 \newif\if@english
 \@englishfalse
 \DeclareOption{english}{\@englishtrue}
   \setlength\paperwidth {\@tempdima}
 \fi
 \if@slide\def\n@baseline{13}\else\def\n@baseline{16}\fi
+\newdimen\ltjs@mpt
+\ltjs@mpt=\ltjs@magscale\p@
 \ifdim\ltjs@mpt<.92\p@ % 8pt, 9pt 指定時
   \def\n@baseline{15}%
 \fi
 \ifdim\ltjs@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
 \ifdim\ltjs@mpt=1.2\p@    \renewcommand{\@ptsize}{2}\else
 \renewcommand{\@ptsize}{-20}\fi\fi
+\if@ltjs@mag@xreal
+  \RequirePackage{type1cm}
+  \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+  \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+  \begingroup\catcode`\%=12\relax
+  \directlua{
+    function luatexja.round_pt(a)
+      local s = luatexja.print_scaled(math.floor(0.5+a*65536))
+      return (s:match('%.0$')) and s:sub(1,-3) or s
+    end
+  }
+  \endgroup
+  \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+     \def\@tempa{#1}\def\@tempb{#2}%
+     \ifx\@tempb\@empty
+        \edef\@tempb{ scaled\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*1000))
+        }}%
+     \else
+        \dimen@\@tempb\relax
+        \edef\@tempb{ at\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*tex.getdimen('dimen@')))
+        }sp}%
+     \fi
+     \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}
+  }
+  \let\ltjs@orig@get@external@font=\get@external@font
+  \def\get@external@font{%
+    \edef\f@size{\directlua{%
+      tex.sprint(luatexja.round_pt(\f@size/\ltjs@magscale))}}%
+    \ltjs@orig@get@external@font
+    \begingroup
+      \edef\@tempa{\external@font\space at\space at}%
+      \expandafter\ltjs@magnify@external@font\@tempa\@nil
+    \expandafter\endgroup\@tempa
+  }
+\fi
 \setlength{\@tempdima}{\paperwidth}
 \setlength{\@tempdimb}{\paperheight}
 \iftombow
index 4ffd205..f9212f4 100644 (file)
 \DeclareOption{landscape}{\@landscapetrue}
 \newif\if@slide
 \@slidefalse
-\newdimen\ltjs@mpt \ltjs@mpt=1\p@
-\DeclareOption{slide}{\@slidetrue\ltjs@mpt=3.58318\p@\@landscapetrue\@titlepagetrue}
-\DeclareOption{8pt} {\ltjs@mpt=.83333\p@}% 1.2^(-1)
-\DeclareOption{9pt} {\ltjs@mpt=.91287\p@}% 1.2^(-0.5}
-\DeclareOption{10pt}{\ltjs@mpt=1\p@}
-\DeclareOption{11pt}{\ltjs@mpt=1.0954\p@}% 1.2^0.5
-\DeclareOption{12pt}{\ltjs@mpt=1.2\p@}
-\DeclareOption{14pt}{\ltjs@mpt=1.44\p@}
-\DeclareOption{17pt}{\ltjs@mpt=1.728\p@}
-\DeclareOption{20pt}{\ltjs@mpt=2\p@}
-\DeclareOption{21pt}{\ltjs@mpt=2.0736\p@}
-\DeclareOption{25pt}{\ltjs@mpt=2.48832\p@}
-\DeclareOption{30pt}{\ltjs@mpt=2.98598\p@}
-\DeclareOption{36pt}{\ltjs@mpt=3.58318\p@}
-\DeclareOption{43pt}{\ltjs@mpt=4.29982\p@}
-\DeclareOption{12Q} {\ltjs@mpt=.92308\p@}% 1pt*12Q/13Q
-\DeclareOption{14Q} {\ltjs@mpt=1.07692\p@}% 1pt*14Q/13Q
-\DeclareOption{10ptj}{\ltjs@mpt=1.08547\p@}% 1pt*10bp/13Q
-\DeclareOption{10.5ptj}{\ltjs@mpt=1.13974\p@}
-\DeclareOption{11ptj}{\ltjs@mpt=1.19402\p@}
-\DeclareOption{12ptj}{\ltjs@mpt=1.30256\p@}
+\def\ltjs@magscale{1}
+\DeclareOption{slide}{\@slidetrue\def\ltjs@magscale{3.58318}\@landscapetrue\@titlepagetrue}
+\DeclareOption{8pt} {\def\ltjs@magscale{.83333}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\ltjs@magscale{.91287}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\ltjs@magscale{1}}
+\DeclareOption{11pt}{\def\ltjs@magscale{1.0954}}% 1.2^0.5
+\DeclareOption{12pt}{\def\ltjs@magscale{1.2}}
+\DeclareOption{14pt}{\def\ltjs@magscale{1.44}}
+\DeclareOption{17pt}{\def\ltjs@magscale{1.728}}
+\DeclareOption{20pt}{\def\ltjs@magscale{2}}
+\DeclareOption{21pt}{\def\ltjs@magscale{2.0736}}
+\DeclareOption{25pt}{\def\ltjs@magscale{2.48832}}
+\DeclareOption{30pt}{\def\ltjs@magscale{2.98598}}
+\DeclareOption{36pt}{\def\ltjs@magscale{3.58318}}
+\DeclareOption{43pt}{\def\ltjs@magscale{4.29982}}
+\DeclareOption{12Q} {\def\ltjs@magscale{.92308}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\ltjs@magscale{1.07692}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\ltjs@magscale{1.08547}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\ltjs@magscale{1.13974}}
+\DeclareOption{11ptj}{\def\ltjs@magscale{1.19402}}
+\DeclareOption{12ptj}{\def\ltjs@magscale{1.30256}}
+\newif\if@ltjs@mag@xreal
+\@ltjs@mag@xrealfalse
+\DeclareOption{xreal}{\@ltjs@mag@xrealtrue}
+\DeclareOption{noxreal}{\@ltjs@mag@xrealfalse}
+\DeclareOption{real}{\@ltjs@mag@xrealfalse}
 \hour\time \divide\hour by 60\relax
 \@tempcnta\hour \multiply\@tempcnta 60\relax
 \minute\time \advance\minute-\@tempcnta
 \DeclareOption{mingoth}{\mingothtrue}
 \DeclareOption{ptexjis}{\ptexjistrue}
 \DeclareOption{jis}{\jisfonttrue}
-\newif\ifpapersize
-\papersizefalse
-\DeclareOption{papersize}{\papersizetrue}
 \newif\if@english
 \@englishfalse
 \DeclareOption{english}{\@englishtrue}
   \setlength\paperwidth {\@tempdima}
 \fi
 \if@slide\def\n@baseline{13}\else\def\n@baseline{16}\fi
+\newdimen\ltjs@mpt
+\ltjs@mpt=\ltjs@magscale\p@
 \ifdim\ltjs@mpt<.92\p@ % 8pt, 9pt 指定時
   \def\n@baseline{15}%
 \fi
 \ifdim\ltjs@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
 \ifdim\ltjs@mpt=1.2\p@    \renewcommand{\@ptsize}{2}\else
 \renewcommand{\@ptsize}{-20}\fi\fi
+\if@ltjs@mag@xreal
+  \RequirePackage{type1cm}
+  \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+  \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+  \begingroup\catcode`\%=12\relax
+  \directlua{
+    function luatexja.round_pt(a)
+      local s = luatexja.print_scaled(math.floor(0.5+a*65536))
+      return (s:match('%.0$')) and s:sub(1,-3) or s
+    end
+  }
+  \endgroup
+  \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+     \def\@tempa{#1}\def\@tempb{#2}%
+     \ifx\@tempb\@empty
+        \edef\@tempb{ scaled\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*1000))
+        }}%
+     \else
+        \dimen@\@tempb\relax
+        \edef\@tempb{ at\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*tex.getdimen('dimen@')))
+        }sp}%
+     \fi
+     \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}
+  }
+  \let\ltjs@orig@get@external@font=\get@external@font
+  \def\get@external@font{%
+    \edef\f@size{\directlua{%
+      tex.sprint(luatexja.round_pt(\f@size/\ltjs@magscale))}}%
+    \ltjs@orig@get@external@font
+    \begingroup
+      \edef\@tempa{\external@font\space at\space at}%
+      \expandafter\ltjs@magnify@external@font\@tempa\@nil
+    \expandafter\endgroup\@tempa
+  }
+\fi
 \setlength{\@tempdima}{\paperwidth}
 \setlength{\@tempdimb}{\paperheight}
 \iftombow
index 7a1b55f..fe2caa3 100644 (file)
@@ -22,7 +22,7 @@
 %  -----------------------------------------
 %
 % \fi
-% \CheckSum{5121}
+% \CheckSum{5201}
 %% \CharacterTable
 %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
 %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
 % [2003-04-18] 12Qオプションを追加しました。
 %
 %    \begin{macrocode}
-\newdimen\ltjs@mpt \ltjs@mpt=1\p@
-\DeclareOption{slide}{\@slidetrue\ltjs@mpt=3.58318\p@\@landscapetrue\@titlepagetrue}
-\DeclareOption{8pt} {\ltjs@mpt=.83333\p@}% 1.2^(-1)
-\DeclareOption{9pt} {\ltjs@mpt=.91287\p@}% 1.2^(-0.5}
-\DeclareOption{10pt}{\ltjs@mpt=1\p@}
-\DeclareOption{11pt}{\ltjs@mpt=1.0954\p@}% 1.2^0.5
-\DeclareOption{12pt}{\ltjs@mpt=1.2\p@}
-\DeclareOption{14pt}{\ltjs@mpt=1.44\p@}
-\DeclareOption{17pt}{\ltjs@mpt=1.728\p@}
-\DeclareOption{20pt}{\ltjs@mpt=2\p@}
-\DeclareOption{21pt}{\ltjs@mpt=2.0736\p@}
-\DeclareOption{25pt}{\ltjs@mpt=2.48832\p@}
-\DeclareOption{30pt}{\ltjs@mpt=2.98598\p@}
-\DeclareOption{36pt}{\ltjs@mpt=3.58318\p@}
-\DeclareOption{43pt}{\ltjs@mpt=4.29982\p@}
-\DeclareOption{12Q} {\ltjs@mpt=.92308\p@}% 1pt*12Q/13Q
-\DeclareOption{14Q} {\ltjs@mpt=1.07692\p@}% 1pt*14Q/13Q
-\DeclareOption{10ptj}{\ltjs@mpt=1.08547\p@}% 1pt*10bp/13Q
-\DeclareOption{10.5ptj}{\ltjs@mpt=1.13974\p@}
-\DeclareOption{11ptj}{\ltjs@mpt=1.19402\p@}
-\DeclareOption{12ptj}{\ltjs@mpt=1.30256\p@}
+\def\ltjs@magscale{1}
+\DeclareOption{slide}{\@slidetrue\def\ltjs@magscale{3.58318}\@landscapetrue\@titlepagetrue}
+\DeclareOption{8pt} {\def\ltjs@magscale{.83333}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\ltjs@magscale{.91287}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\ltjs@magscale{1}}
+\DeclareOption{11pt}{\def\ltjs@magscale{1.0954}}% 1.2^0.5
+\DeclareOption{12pt}{\def\ltjs@magscale{1.2}}
+\DeclareOption{14pt}{\def\ltjs@magscale{1.44}}
+\DeclareOption{17pt}{\def\ltjs@magscale{1.728}}
+\DeclareOption{20pt}{\def\ltjs@magscale{2}}
+\DeclareOption{21pt}{\def\ltjs@magscale{2.0736}}
+\DeclareOption{25pt}{\def\ltjs@magscale{2.48832}}
+\DeclareOption{30pt}{\def\ltjs@magscale{2.98598}}
+\DeclareOption{36pt}{\def\ltjs@magscale{3.58318}}
+\DeclareOption{43pt}{\def\ltjs@magscale{4.29982}}
+\DeclareOption{12Q} {\def\ltjs@magscale{.92308}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\ltjs@magscale{1.07692}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\ltjs@magscale{1.08547}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\ltjs@magscale{1.13974}}
+\DeclareOption{11ptj}{\def\ltjs@magscale{1.19402}}
+\DeclareOption{12ptj}{\def\ltjs@magscale{1.30256}}
+%    \end{macrocode}
+%
+% \paragraph{オプティカルサイズの補正}
+% [2016-03-26 LTJ] |xreal|オプション指定時には,本文のフォントサイズが10pt以外の場合に
+% オプティカルサイズの補正を行うためにNFSSにパッチを当てます。
+% 現在の|ltjsclasses|ではこのパッチ当ては標準では行いませんが,
+% 将来どうなるかわからないので|real|, |noxreal|で無効化することができるようにしました。
+%
+%    \begin{macrocode}
+\newif\if@ltjs@mag@xreal
+\@ltjs@mag@xrealfalse
+\DeclareOption{xreal}{\@ltjs@mag@xrealtrue}
+\DeclareOption{noxreal}{\@ltjs@mag@xrealfalse}
+\DeclareOption{real}{\@ltjs@mag@xrealfalse}
 %    \end{macrocode}
 %
+%
 % \paragraph{トンボオプション}
 %
 % トンボ(crop marks)を出力します。
 % \paragraph{papersizeスペシャルの利用}
 %
 % |ltjsclasses| では |papersize| オプションの有無に関わらず,
-% PDFのページサイズは適切に設定されます。
-%
-%    \begin{macrocode}
-\newif\ifpapersize
-\papersizefalse
-\DeclareOption{papersize}{\papersizetrue}
-%    \end{macrocode}
+% PDFのページサイズは適切に設定されるので,削除しました。
 %
 % \paragraph{英語化}
 %
 % \item |geometry| 側でオプション |mag| は使えません。
 % \end{itemize}
 %
-% [2016-03-21] |\mag| を使わないように全面的に書き換えました。
+% [2016-03-21 LTJ] |\mag| を使わないように全面的に書き換えました。
 % |\ltjs@mpt| に「拡大率だけ大きくしたpt」の値が格納されます。
 % |bxjscls| と同様に,|\@ptsize| は |10pt|,~|11pt|,~|12pt| オプションが指定された時だけ
 % 従来通り0,~1,~2と設定し,それ以外の場合は$-20$とすることにしました。
 % |\inv@mag| はもはや定義していません。
+%
+% [2016-03-26 LTJ] |\ltjs@magscale| に拡大率を格納した後,それを用いて |ltjs@mpt| を
+% 設定するようにしました。
 %    \begin{macrocode}
+%<*kiyou>
+\def\ltjs@magscale{0.9769230}
+%</kiyou>
+\newdimen\ltjs@mpt
+\ltjs@mpt=\ltjs@magscale\p@
 \ifdim\ltjs@mpt<.92\p@ % 8pt, 9pt 指定時
   \def\n@baseline{15}%
 \fi
 \ifdim\ltjs@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
 \ifdim\ltjs@mpt=1.2\p@    \renewcommand{\@ptsize}{2}\else
 \renewcommand{\@ptsize}{-20}\fi\fi
-%<*kiyou>
-\ltjs@mpt=0.9769230\p@
-%</kiyou>
 %    \end{macrocode}
 %
+% [2016-03-26 LTJ] |xreal|オプションの指定時には,|bxjscls|の|magstyle=xreal|
+% オプションのように,オプティカルの補正を行うためにNFSSにパッチを当てます。
+% パッチの内容は,一部をmiscさんによる「js*.cls 同様の文字サイズ設定を|\mag|によらずに行う方法:試案」
+% (\texttt{http://oku.edu.mie-u.ac.jp/\textasciitilde okumura/texfaq/qa/28416.html})からとりました。
+%
+% パッチを行う際には,計算で数spの誤差が出た時に備え,|type1cm|パッケージを読み込んでおきます。
+%
+%    \begin{macrocode}
+\if@ltjs@mag@xreal
+  \RequirePackage{type1cm}
+  \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+  \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+  \begingroup\catcode`\%=12\relax
+  \directlua{
+    function luatexja.round_pt(a)
+      local s = luatexja.print_scaled(math.floor(0.5+a*65536))
+      return (s:match('%.0$')) and s:sub(1,-3) or s
+    end
+  }
+  \endgroup
+  \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+     \def\@tempa{#1}\def\@tempb{#2}%
+     \ifx\@tempb\@empty
+        \edef\@tempb{ scaled\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*1000))
+        }}%
+     \else
+        \dimen@\@tempb\relax
+        \edef\@tempb{ at\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*tex.getdimen('dimen@')))
+        }sp}%
+     \fi
+     \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}
+  }
+  \let\ltjs@orig@get@external@font=\get@external@font
+  \def\get@external@font{%
+    \edef\f@size{\directlua{%
+      tex.sprint(luatexja.round_pt(\f@size/\ltjs@magscale))}}%
+    \ltjs@orig@get@external@font
+    \begingroup
+      \edef\@tempa{\external@font\space at\space at}%
+      \expandafter\ltjs@magnify@external@font\@tempa\@nil
+    \expandafter\endgroup\@tempa
+  }
+\fi
+%    \end{macrocode}
+%
+%
 % \paragraph{PDFの用紙サイズの設定}
 %
 % \begin{macro}{\pdfpagewidth}
index 2eb075d..4e68d98 100644 (file)
 \DeclareOption{landscape}{\@landscapetrue}
 \newif\if@slide
 \@slidefalse
-\newdimen\ltjs@mpt \ltjs@mpt=1\p@
-\DeclareOption{slide}{\@slidetrue\ltjs@mpt=3.58318\p@\@landscapetrue\@titlepagetrue}
-\DeclareOption{8pt} {\ltjs@mpt=.83333\p@}% 1.2^(-1)
-\DeclareOption{9pt} {\ltjs@mpt=.91287\p@}% 1.2^(-0.5}
-\DeclareOption{10pt}{\ltjs@mpt=1\p@}
-\DeclareOption{11pt}{\ltjs@mpt=1.0954\p@}% 1.2^0.5
-\DeclareOption{12pt}{\ltjs@mpt=1.2\p@}
-\DeclareOption{14pt}{\ltjs@mpt=1.44\p@}
-\DeclareOption{17pt}{\ltjs@mpt=1.728\p@}
-\DeclareOption{20pt}{\ltjs@mpt=2\p@}
-\DeclareOption{21pt}{\ltjs@mpt=2.0736\p@}
-\DeclareOption{25pt}{\ltjs@mpt=2.48832\p@}
-\DeclareOption{30pt}{\ltjs@mpt=2.98598\p@}
-\DeclareOption{36pt}{\ltjs@mpt=3.58318\p@}
-\DeclareOption{43pt}{\ltjs@mpt=4.29982\p@}
-\DeclareOption{12Q} {\ltjs@mpt=.92308\p@}% 1pt*12Q/13Q
-\DeclareOption{14Q} {\ltjs@mpt=1.07692\p@}% 1pt*14Q/13Q
-\DeclareOption{10ptj}{\ltjs@mpt=1.08547\p@}% 1pt*10bp/13Q
-\DeclareOption{10.5ptj}{\ltjs@mpt=1.13974\p@}
-\DeclareOption{11ptj}{\ltjs@mpt=1.19402\p@}
-\DeclareOption{12ptj}{\ltjs@mpt=1.30256\p@}
+\def\ltjs@magscale{1}
+\DeclareOption{slide}{\@slidetrue\def\ltjs@magscale{3.58318}\@landscapetrue\@titlepagetrue}
+\DeclareOption{8pt} {\def\ltjs@magscale{.83333}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\ltjs@magscale{.91287}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\ltjs@magscale{1}}
+\DeclareOption{11pt}{\def\ltjs@magscale{1.0954}}% 1.2^0.5
+\DeclareOption{12pt}{\def\ltjs@magscale{1.2}}
+\DeclareOption{14pt}{\def\ltjs@magscale{1.44}}
+\DeclareOption{17pt}{\def\ltjs@magscale{1.728}}
+\DeclareOption{20pt}{\def\ltjs@magscale{2}}
+\DeclareOption{21pt}{\def\ltjs@magscale{2.0736}}
+\DeclareOption{25pt}{\def\ltjs@magscale{2.48832}}
+\DeclareOption{30pt}{\def\ltjs@magscale{2.98598}}
+\DeclareOption{36pt}{\def\ltjs@magscale{3.58318}}
+\DeclareOption{43pt}{\def\ltjs@magscale{4.29982}}
+\DeclareOption{12Q} {\def\ltjs@magscale{.92308}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\ltjs@magscale{1.07692}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\ltjs@magscale{1.08547}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\ltjs@magscale{1.13974}}
+\DeclareOption{11ptj}{\def\ltjs@magscale{1.19402}}
+\DeclareOption{12ptj}{\def\ltjs@magscale{1.30256}}
+\newif\if@ltjs@mag@xreal
+\@ltjs@mag@xrealfalse
+\DeclareOption{xreal}{\@ltjs@mag@xrealtrue}
+\DeclareOption{noxreal}{\@ltjs@mag@xrealfalse}
+\DeclareOption{real}{\@ltjs@mag@xrealfalse}
 \hour\time \divide\hour by 60\relax
 \@tempcnta\hour \multiply\@tempcnta 60\relax
 \minute\time \advance\minute-\@tempcnta
 \DeclareOption{mingoth}{\mingothtrue}
 \DeclareOption{ptexjis}{\ptexjistrue}
 \DeclareOption{jis}{\jisfonttrue}
-\newif\ifpapersize
-\papersizefalse
-\DeclareOption{papersize}{\papersizetrue}
 \newif\if@english
 \@englishfalse
 \DeclareOption{english}{\@englishtrue}
   \setlength\paperwidth {\@tempdima}
 \fi
 \def\n@baseline{14.897}
+\def\ltjs@magscale{0.9769230}
+\newdimen\ltjs@mpt
+\ltjs@mpt=\ltjs@magscale\p@
 \ifdim\ltjs@mpt<.92\p@ % 8pt, 9pt 指定時
   \def\n@baseline{15}%
 \fi
 \ifdim\ltjs@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
 \ifdim\ltjs@mpt=1.2\p@    \renewcommand{\@ptsize}{2}\else
 \renewcommand{\@ptsize}{-20}\fi\fi
-\ltjs@mpt=0.9769230\p@
+\if@ltjs@mag@xreal
+  \RequirePackage{type1cm}
+  \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+  \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+  \begingroup\catcode`\%=12\relax
+  \directlua{
+    function luatexja.round_pt(a)
+      local s = luatexja.print_scaled(math.floor(0.5+a*65536))
+      return (s:match('%.0$')) and s:sub(1,-3) or s
+    end
+  }
+  \endgroup
+  \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+     \def\@tempa{#1}\def\@tempb{#2}%
+     \ifx\@tempb\@empty
+        \edef\@tempb{ scaled\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*1000))
+        }}%
+     \else
+        \dimen@\@tempb\relax
+        \edef\@tempb{ at\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*tex.getdimen('dimen@')))
+        }sp}%
+     \fi
+     \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}
+  }
+  \let\ltjs@orig@get@external@font=\get@external@font
+  \def\get@external@font{%
+    \edef\f@size{\directlua{%
+      tex.sprint(luatexja.round_pt(\f@size/\ltjs@magscale))}}%
+    \ltjs@orig@get@external@font
+    \begingroup
+      \edef\@tempa{\external@font\space at\space at}%
+      \expandafter\ltjs@magnify@external@font\@tempa\@nil
+    \expandafter\endgroup\@tempa
+  }
+\fi
 \setlength{\@tempdima}{\paperwidth}
 \setlength{\@tempdimb}{\paperheight}
 \iftombow
index f260392..9ce09dc 100644 (file)
 \DeclareOption{landscape}{\@landscapetrue}
 \newif\if@slide
 \@slidefalse
-\newdimen\ltjs@mpt \ltjs@mpt=1\p@
-\DeclareOption{slide}{\@slidetrue\ltjs@mpt=3.58318\p@\@landscapetrue\@titlepagetrue}
-\DeclareOption{8pt} {\ltjs@mpt=.83333\p@}% 1.2^(-1)
-\DeclareOption{9pt} {\ltjs@mpt=.91287\p@}% 1.2^(-0.5}
-\DeclareOption{10pt}{\ltjs@mpt=1\p@}
-\DeclareOption{11pt}{\ltjs@mpt=1.0954\p@}% 1.2^0.5
-\DeclareOption{12pt}{\ltjs@mpt=1.2\p@}
-\DeclareOption{14pt}{\ltjs@mpt=1.44\p@}
-\DeclareOption{17pt}{\ltjs@mpt=1.728\p@}
-\DeclareOption{20pt}{\ltjs@mpt=2\p@}
-\DeclareOption{21pt}{\ltjs@mpt=2.0736\p@}
-\DeclareOption{25pt}{\ltjs@mpt=2.48832\p@}
-\DeclareOption{30pt}{\ltjs@mpt=2.98598\p@}
-\DeclareOption{36pt}{\ltjs@mpt=3.58318\p@}
-\DeclareOption{43pt}{\ltjs@mpt=4.29982\p@}
-\DeclareOption{12Q} {\ltjs@mpt=.92308\p@}% 1pt*12Q/13Q
-\DeclareOption{14Q} {\ltjs@mpt=1.07692\p@}% 1pt*14Q/13Q
-\DeclareOption{10ptj}{\ltjs@mpt=1.08547\p@}% 1pt*10bp/13Q
-\DeclareOption{10.5ptj}{\ltjs@mpt=1.13974\p@}
-\DeclareOption{11ptj}{\ltjs@mpt=1.19402\p@}
-\DeclareOption{12ptj}{\ltjs@mpt=1.30256\p@}
+\def\ltjs@magscale{1}
+\DeclareOption{slide}{\@slidetrue\def\ltjs@magscale{3.58318}\@landscapetrue\@titlepagetrue}
+\DeclareOption{8pt} {\def\ltjs@magscale{.83333}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\ltjs@magscale{.91287}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\ltjs@magscale{1}}
+\DeclareOption{11pt}{\def\ltjs@magscale{1.0954}}% 1.2^0.5
+\DeclareOption{12pt}{\def\ltjs@magscale{1.2}}
+\DeclareOption{14pt}{\def\ltjs@magscale{1.44}}
+\DeclareOption{17pt}{\def\ltjs@magscale{1.728}}
+\DeclareOption{20pt}{\def\ltjs@magscale{2}}
+\DeclareOption{21pt}{\def\ltjs@magscale{2.0736}}
+\DeclareOption{25pt}{\def\ltjs@magscale{2.48832}}
+\DeclareOption{30pt}{\def\ltjs@magscale{2.98598}}
+\DeclareOption{36pt}{\def\ltjs@magscale{3.58318}}
+\DeclareOption{43pt}{\def\ltjs@magscale{4.29982}}
+\DeclareOption{12Q} {\def\ltjs@magscale{.92308}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\ltjs@magscale{1.07692}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\ltjs@magscale{1.08547}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\ltjs@magscale{1.13974}}
+\DeclareOption{11ptj}{\def\ltjs@magscale{1.19402}}
+\DeclareOption{12ptj}{\def\ltjs@magscale{1.30256}}
+\newif\if@ltjs@mag@xreal
+\@ltjs@mag@xrealfalse
+\DeclareOption{xreal}{\@ltjs@mag@xrealtrue}
+\DeclareOption{noxreal}{\@ltjs@mag@xrealfalse}
+\DeclareOption{real}{\@ltjs@mag@xrealfalse}
 \hour\time \divide\hour by 60\relax
 \@tempcnta\hour \multiply\@tempcnta 60\relax
 \minute\time \advance\minute-\@tempcnta
 \DeclareOption{mingoth}{\mingothtrue}
 \DeclareOption{ptexjis}{\ptexjistrue}
 \DeclareOption{jis}{\jisfonttrue}
-\newif\ifpapersize
-\papersizefalse
-\DeclareOption{papersize}{\papersizetrue}
 \newif\if@english
 \@englishfalse
 \DeclareOption{english}{\@englishtrue}
   \setlength\paperwidth {\@tempdima}
 \fi
 \def\n@baseline{14.554375}
+\newdimen\ltjs@mpt
+\ltjs@mpt=\ltjs@magscale\p@
 \ifdim\ltjs@mpt<.92\p@ % 8pt, 9pt 指定時
   \def\n@baseline{15}%
 \fi
 \ifdim\ltjs@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
 \ifdim\ltjs@mpt=1.2\p@    \renewcommand{\@ptsize}{2}\else
 \renewcommand{\@ptsize}{-20}\fi\fi
+\if@ltjs@mag@xreal
+  \RequirePackage{type1cm}
+  \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+  \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+  \begingroup\catcode`\%=12\relax
+  \directlua{
+    function luatexja.round_pt(a)
+      local s = luatexja.print_scaled(math.floor(0.5+a*65536))
+      return (s:match('%.0$')) and s:sub(1,-3) or s
+    end
+  }
+  \endgroup
+  \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+     \def\@tempa{#1}\def\@tempb{#2}%
+     \ifx\@tempb\@empty
+        \edef\@tempb{ scaled\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*1000))
+        }}%
+     \else
+        \dimen@\@tempb\relax
+        \edef\@tempb{ at\directlua{%
+          tex.sprint(math.floor(0.5+\ltjs@magscale*tex.getdimen('dimen@')))
+        }sp}%
+     \fi
+     \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}
+  }
+  \let\ltjs@orig@get@external@font=\get@external@font
+  \def\get@external@font{%
+    \edef\f@size{\directlua{%
+      tex.sprint(luatexja.round_pt(\f@size/\ltjs@magscale))}}%
+    \ltjs@orig@get@external@font
+    \begingroup
+      \edef\@tempa{\external@font\space at\space at}%
+      \expandafter\ltjs@magnify@external@font\@tempa\@nil
+    \expandafter\endgroup\@tempa
+  }
+\fi
 \setlength{\@tempdima}{\paperwidth}
 \setlength{\@tempdimb}{\paperheight}
 \iftombow
diff --git a/test/test22-ltjs-mag.tex b/test/test22-ltjs-mag.tex
new file mode 100644 (file)
index 0000000..4fa3941
--- /dev/null
@@ -0,0 +1,16 @@
+\documentclass[14pt,xreal]{ltjsarticle}
+\usepackage{type1cm}
+\makeatletter
+\def\R#1{{#1\typeout{\string#1: \fontname\font}}}
+\begin{document}
+
+\R\tiny
+\R\scriptsize
+\R\footnotesize
+\R\small
+\R\normalsize
+\R\large
+\R\Large
+\R\LARGE
+\R\huge
+\end{document}