OSDN Git Service

gh #3
[luatex-ja/luatexja.git] / src / patches / lltjcore.sty
1 %
2 % lltjcore.sty: derived from plcore.dtx in pLaTeX.
3 %
4
5 \NeedsTeXFormat{LaTeX2e}
6 \ProvidesPackage{lltjcore}[2023-02-26 Patch to LaTeX2e Kernel for LuaTeX-ja]
7 \RequirePackage{etoolbox}
8
9 %%% expl3
10 \RequirePackage{expl3}
11 \ExplSyntaxOn
12 \cs_set_eq:NN \platex_direction_yoko: \yoko
13 \cs_set_eq:NN \platex_direction_tate: \tate
14 \cs_set_eq:NN \platex_direction_dtou: \dtou
15 \cs_set_eq:NN \platex_direction_utod: \utod % LuaTeX-ja specific
16 \prg_new_conditional:Npnn \platex_if_box_yoko:N #1 { p, T, F, TF }
17   { \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 4 \scan_stop:
18       \prg_return_true: \else: \prg_return_false: \fi: }
19 \prg_new_conditional:Npnn \platex_if_box_utod:N #1 { p, T, F, TF }
20   { \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 11 \scan_stop:
21       \prg_return_true: \else: \prg_return_false: \fi: }
22 \prg_new_eq_conditional:NNn \platex_if_box_tate_math:N \platex_if_box_utod:N { p, T, F, TF }
23 \prg_new_conditional:Npnn \platex_if_box_tate_nomath:N #1 { p, T, F, TF }
24   { \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 3 \scan_stop:
25       \prg_return_true: \else: \prg_return_false: \fi: }
26 \prg_new_conditional:Npnn \platex_if_box_tate:N #1 { p, T, F, TF }
27   { \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 3 \scan_stop:
28       \prg_return_true:
29     \else: \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 11 \scan_stop: % utod
30       \prg_return_true:
31     \else
32       \prg_return_false:
33     \fi: \fi:}
34 \prg_new_conditional:Npnn \platex_if_box_dtou:N #1 { p, T, F, TF }
35   { \if_int_compare:w \ltjgetparameter{boxdir}{#1} = 1 \scan_stop:
36       \prg_return_true: \else: \prg_return_false: \fi: }
37 \prg_new_conditional:Npnn \platex_if_direction_yoko: { p, T, F, TF }
38   { \if_int_compare:w \ltjgetparameter{direction} = 4 \scan_stop:
39       \prg_return_true: \else: \prg_return_false: \fi: }
40 \prg_new_conditional:Npnn \platex_if_direction_utod: { p, T, F, TF }
41   { \if_int_compare:w \ltjgetparameter{direction} = 11 \scan_stop:
42       \prg_return_true: \else: \prg_return_false: \fi: }
43 \prg_new_eq_conditional:NNn
44   \platex_if_direction_tate_math: \platex_if_direction_utod: { p, T, F, TF }
45 \prg_new_conditional:Npnn \platex_if_direction_tate_nomath: { p, T, F, TF }
46   { \if_int_compare:w \ltjgetparameter{direction} = 3 \scan_stop:
47       \prg_return_true: \else: \prg_return_false: \fi: }
48 \prg_new_conditional:Npnn \platex_if_direction_tate: { p, T, F, TF }
49   { \if_int_compare:w \ltjgetparameter{direction} = 3 \scan_stop:
50       \prg_return_true:
51     \else: \if_int_compare:w \ltjgetparameter{direction} = 11 \scan_stop: % utod
52       \prg_return_true:
53     \else
54       \prg_return_false:
55     \fi: \fi:}
56 \prg_new_conditional:Npnn \platex_if_direction_dtou: { p, T, F, TF }
57   { \if_int_compare:w \ltjgetparameter{direction} = 1 \scan_stop:
58       \prg_return_true: \else: \prg_return_false: \fi: }
59 \ExplSyntaxOff
60
61 \def\cleardoublepage{\clearpage\if@twoside
62   \ifodd\c@page
63     \ifnum\ltjgetparameter{direction}=3
64       \hbox{}\thispagestyle{empty}\newpage
65       \if@twocolumn\hbox{}\newpage\fi
66     \fi
67   \else
68     \ifnum\ltjgetparameter{direction}=4
69       \hbox{}\thispagestyle{empty}\newpage
70       \if@twocolumn\hbox{}\newpage\fi
71     \fi
72   \fi\fi}
73
74 \patchcmd\@vtryfc{\global\setbox\@outputbox\vbox{}}
75   {\global\setbox\@outputbox\vbox{%
76      \unless\ifnum\ltjgetparameter{direction}=4
77        \primitive\everypar{}\hskip\z@\fi
78   }}{}{}
79
80 \newif\iftombow \tombowfalse
81 \newif\iftombowdate \tombowdatetrue
82 \newdimen\@tombowwidth
83 \setlength{\@tombowwidth}{.1\p@}
84 \newbox\@TL\newbox\@Tl
85 \newbox\@TC
86 \newbox\@TR\newbox\@Tr
87 \newbox\@BL\newbox\@Bl
88 \newbox\@BC
89 \newbox\@BR\newbox\@Br
90 \newbox\@CL
91 \newbox\@CR
92 \font\@bannerfont=file:lmmono9-regular.otf % cmtt9 in pLaTeX
93 \newtoks\@bannertoken
94 \@bannertoken{}
95 \def\maketombowbox{%
96   \setbox\@TL\hbox to\z@{\yoko\hss
97       \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@
98       \vrule height10mm width\@tombowwidth depth\z@
99       \iftombowdate
100         \raise4pt\hbox to\z@{\hskip5mm\@bannerfont\the\@bannertoken\hss}%
101       \fi}%
102   \setbox\@Tl\hbox to\z@{\yoko\hss
103       \vrule width10mm height\@tombowwidth depth\z@
104       \vrule height\dimexpr 10mm+\@tombowbleed\relax  width\@tombowwidth depth\z@}%
105   \setbox\@TC\hbox{\yoko
106       \vrule width10mm height\@tombowwidth depth\z@
107       \vrule height10mm width\@tombowwidth depth\z@
108       \vrule width10mm height\@tombowwidth depth\z@}%
109   \setbox\@TR\hbox to\z@{\yoko
110       \vrule height10mm width\@tombowwidth depth\z@
111       \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@\hss}%
112   \setbox\@Tr\hbox to\z@{\yoko
113       \vrule height\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth depth\z@
114       \vrule width10mm height\@tombowwidth depth\z@\hss}%
115   \setbox\@BL\hbox to\z@{\yoko\hss
116       \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@
117       \vrule depth10mm width\@tombowwidth height\z@}%
118   \setbox\@Bl\hbox to\z@{\yoko\hss
119       \vrule width10mm depth\@tombowwidth height\z@
120       \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@}%
121   \setbox\@BC\hbox{\yoko
122       \vrule width10mm depth\@tombowwidth height\z@
123       \vrule depth10mm width\@tombowwidth height\z@
124       \vrule width10mm depth\@tombowwidth height\z@}%
125   \setbox\@BR\hbox to\z@{\yoko
126       \vrule depth10mm width\@tombowwidth height\z@
127       \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@\hss}%
128   \setbox\@Br\hbox to\z@{\yoko
129       \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@
130       \vrule width10mm depth\@tombowwidth height\z@\hss}%
131   \setbox\@CL\hbox to\z@{\yoko\hss
132       \vrule width10mm height.5\@tombowwidth depth.5\@tombowwidth
133       \vrule height10mm depth10mm width\@tombowwidth}%
134   \setbox\@CR\hbox to\z@{\yoko
135       \vrule height10mm depth10mm width\@tombowwidth
136       \vrule height.5\@tombowwidth depth.5\@tombowwidth width10mm\hss}%
137 }
138 \def\@outputtombow{%
139   \iftombow
140   \vbox to\z@{\kern-\@tombowbleed\relax
141     \boxmaxdepth\maxdimen
142       \moveleft\@tombowbleed\vbox to\@@paperheight{%
143           \color@begingroup
144           \@tombowcolor
145       \setbox\z@\hbox to\@@paperwidth{\hskip\@tombowbleed\relax
146          \copy\@TL\hfill\copy\@TC\hfill\copy\@TR\hskip\@tombowbleed}
147       \ht\z@=\z@\dp\z@=\z@\box\z@%
148       \kern\@tombowbleed
149       \setbox\z@\hbox to\@@paperwidth{\copy\@Tl\hfill\copy\@Tr}%
150       \ht\z@=\z@\dp\z@=\z@\box\z@%
151       \vfill
152       \setbox\z@\hbox to\@@paperwidth{\copy\@CL\hfill\copy\@CR}%
153       \ht\z@=\z@\dp\z@=\z@\box\z@%
154       \vfill
155       \setbox\z@\hbox to\@@paperwidth{\copy\@Bl\hfill\copy\@Br}%
156       \ht\z@=\z@\dp\z@=\z@\box\z@
157       \kern\@tombowbleed
158       \setbox\z@\hbox to\@@paperwidth{\hskip\@tombowbleed\relax
159          \copy\@BL\hfill\copy\@BC\hfill\copy\@BR\hskip\@tombowbleed}%
160       \ht\z@=\z@\dp\z@=\z@\box\z@%
161       \kern\dimexpr10mm%
162       \color@endgroup
163     }\vss
164   }%
165   \fi
166 }
167 \def\@tombowcolor{\normalcolor}
168 \def\@tombowbleed{3mm}
169 \def\@tombowreset@@paper{%
170    \@@topmargin \topmargin % only for compatibility
171    \iftombow
172      \@@paperwidth\dimexpr\paperwidth+2\dimexpr\@tombowbleed\relax
173      \@@paperheight\dimexpr\paperheight+10mm+2\dimexpr\@tombowbleed\relax
174      \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax
175    \fi
176 }
177 \newdimen\@@paperheight
178 \newdimen\@@paperwidth
179 \newdimen\@@topmargin % not used by LuaTeX-ja; only to avoid existing codes
180 \patchcmd\@outputpage{\begingroup\let\protect\noexpand}{% tate direction
181 \begingroup
182   \ifnum\ltjgetparameter{direction}=4\else
183     \dimen\z@\textwidth \textwidth\textheight \textheight\dimen\z@
184   \fi
185   \let \protect \noexpand
186 }{}{}
187 \patchcmd\@outputpage{% supply \yoko
188     \set@typeset@protect
189     \aftergroup \endgroup
190 }{%
191     \yoko \set@typeset@protect
192     \aftergroup \endgroup
193 }{}{}
194 \patchcmd\@outputpage{\let\@thefoot\@oddfoot\let\@themargin\oddsidemargin}{% tate direction
195   \let\@thefoot\@oddfoot
196   \ifnum\ltjgetparameter{direction}=3 \let\@themargin\evensidemargin
197   \else\let\@themargin\oddsidemargin\fi
198 }{}{}
199 \patchcmd\@outputpage{\let\@thefoot\@evenfoot\let\@themargin\evensidemargin}{% tate direction
200   \let\@thefoot\@evenfoot
201   \ifnum\ltjgetparameter{direction}=3 \let\@themargin\oddsidemargin
202   \else\let\@themargin\evensidemargin\fi
203 }{}{}
204
205 % 将来は shipout hook で書き直したい
206 \patchcmd\@outputpage{\vskip\topmargin}{\vskip\topmargin\iftombow\vskip1in\fi}{}{}
207 \patchcmd\@outputpage{\reset@font}{\@tombowreset@@paper\reset@font}{}{}
208 \patchcmd\@outputpage{\@begindvi}{\@begindvi\@outputtombow}{}{}
209
210 %
211 \pretocmd\@floatboxreset{\pltx@save@float@dir}{}{}
212 \patchcmd\@endfloatbox{\outer@nobreak}{\outer@nobreak\pltx@check@float@dir}{}{}
213 \def\pltx@save@float@dir{%
214   \edef\pltx@float@dir@first{\ltjgetparameter{direction}}}
215 \def\pltx@check@float@dir{%
216   \ifx\pltx@float@dir@first\@undefined\else
217     \ifnum\ltjgetparameter{direction}=\pltx@float@dir@first\else
218       \pltx@err@float@dir
219     \fi
220   \fi}
221 \def\pltx@err@float@dir{%
222   \@latex@error{Direction change inside float!?\MessageBreak
223     Use \noexpand\layoutcaption provided in \string\usepackage{lltjext}}\@ehc}
224 %%% Remove extra xkanjiskip
225 \renewcommand\@makefnmark{%
226   \unless\ifnum\ltjgetparameter{direction}=3
227     \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}%
228   \else\hbox{\yoko \@textsuperscript{\normalfont\@thefnmark}}\fi}
229 \begingroup
230 \@ifpackageloaded{hyperref}
231   {\ifdefined\real@setref\def\ltj@setrefprefix{real}\else\def\ltj@setrefprefix{}\fi}
232   {\def\ltj@setrefprefix{}}
233 \expandafter\gdef\csname \ltj@setrefprefix @setref\endcsname#1#2#3{%
234   \ifx#1\relax
235     \protect\G@refundefinedtrue
236     \nfss@text{\reset@font\bfseries ??}%
237     \@latex@warning{Reference `#3' on page \thepage \space
238               undefined}%
239   \else
240     \expandafter#2#1\protect\@setref@{}% change \null to \protect\@setref@{}
241   \fi}
242 \gdef\@setref@{\ifhmode\spacefactor\@m\fi}
243 \endgroup
244 \if@compatibility\else
245 \def\verb{\relax\ifmmode\hbox\else\leavevmode\vadjust{}\fi
246   \bgroup
247     \verb@eol@error \let\do\@makeother \dospecials
248     \verbatim@font\@noligs
249     \language\l@nohyphenation
250     \@ifstar\@sverb\@verb}
251 \fi
252 \patchcmd{\do@noligs}{\kern\z@}{\vadjust{}}{}{} % reported by p_typo
253 \gdef\@stopfield{%
254   \inhibitglue\@tempskipa\lastskip\unskip
255   \hskip\@tempskipa\color@endgroup\egroup}
256 \pretocmd{\footnote}{\inhibitglue}{}{}
257 \pretocmd{\footnotemark}{\inhibitglue}{}{}
258 \def\@ltj@process@makefnmark#1{%
259   \unless\ifnum\ltjgetparameter{direction}=3 #1%
260   \else\hbox to\z@{\hskip-.25\zw\raise.9\zh#1\hss}\fi%
261 }%
262 \ifdefined\@kernel@process@makefnmark %% 2022-06-01 latex-lab?
263   \let\ltj@orig@kernel@process@makefnmark=\@kernel@process@makefnmark
264   \def\@kernel@process@makefnmark#1{\ltj@orig@kernel@process@makefnmark{\@ltj@process@makefnmark#1}}
265 \else
266   \patchcmd{\@footnotemark}{\@makefnmark}{\@ltj@process@makefnmark\@makefnmark}{}{}
267 \fi
268 \long\def\@iiiparbox#1#2[#3]#4#5{%
269   \leavevmode
270   \@pboxswfalse
271   \setlength\@tempdima{#4}%
272   \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
273     \ifx\relax#2\else
274       \setlength\@tempdimb{#2}%
275       \edef\@parboxto{to\the\@tempdimb}%
276     \fi
277     \if#1b\vbox
278     \else\if #1t\vtop
279     \else\ifmmode\vcenter
280     \else\@pboxswtrue\null$\vcenter% !!!
281     \fi\fi\fi
282     \@parboxto{\let\hss\vss\let\unhbox\unvbox
283        \csname bm@#3\endcsname}%
284     \if@pboxsw \m@th$\null\fi% !!!
285   \@end@tempboxa}
286 \DeclareRobustCommand\underline[1]{%
287   \relax
288   \ifmmode\@@underline{#1}%
289   \else \leavevmode\null$\@@underline{\hbox{#1}}\m@th$\null\relax\fi}
290
291 \newif\iffnfixbottom
292 \newif\ifltj@ftn@unvboxed
293 %%% @makecol
294 \def\pltx@adjust@wd@outputbox{%
295   \unless\ifnum\ltjgetparameter{direction}=4
296     \vbox{\primitive\everypar{}\hskip\z@}%
297    \fi}
298 \patchcmd\@makecol{\vskip -\dimen@\@textbottom}%
299   {\pltx@adjust@wd@outputbox
300    \vskip -\dimen@
301    \ifltj@ftn@unvboxed\iffnfixbottom\else\@textbottom\fi\else\@textbottom\fi}{}{}
302 \patchcmd\@makecol{\vskip\skip\footins}{\iffnfixbottom\vskip\z@\@plus.0001fil\fi\vskip\skip\footins}{}{}
303 \patchcmd\@makecol{\ifvoid\footins}{\ifvoid\footins\ltj@ftn@unvboxedfalse}{}{}
304 \patchcmd\@makecol{\setbox\@outputbox \vbox}{\ltj@ftn@unvboxedtrue\setbox\@outputbox \vbox}{}{}
305 \let\ltj@orig@makecol=\@makecol
306
307 \patchcmd\@makespecialcolbox{\@textbottom}{\ifltj@ftn@unvboxed\iffnfixbottom\else\@textbottom\fi\else\@textbottom\fi}{}{}
308
309 \def\@gnewline #1{%
310   \ifvmode
311     \@nolnerr
312   \else
313     \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
314     % \null は \break の効果が行頭禁則文字で打ち消されないために必要
315   \ignorespaces
316 \fi}
317
318
319 %%%%%% tabular (platex/#43) \@tabclassz
320 \def\ltj@sharp{\relax\pltx@next@inhibitglue\ltjfakeboxbdd\ignorespaces\@sharp\unskip\ltjfakeboxbdd}
321 \def\@tabclassz{%
322   \ifcase\@lastchclass
323     \@acolampacol
324   \or
325     \@ampacol
326   \or
327   \or
328   \or
329     \@addamp
330   \or
331     \@acolampacol
332   \or
333     \@firstampfalse\@acol
334   \fi
335   \edef\@preamble{%
336     \@preamble{%
337       \ifcase\@chnum
338         \hfil\hskip1sp\ltj@sharp\hfil
339       \or
340         \hskip1sp\ltj@sharp\hfil
341       \or
342         \hfil\hskip1sp\ltj@sharp
343       \fi}}}
344 \patchcmd\@classv{%
345    \ignorespaces\@sharp
346 }{%
347    \everypar\expandafter{\the\everypar\ltjfakeboxbdd}\ignorespaces\@sharp\unskip
348 }{}{}
349 \patchcmd{\@tabular}{\leavevmode}{\leavevmode\null}{}{}
350 \apptocmd{\endtabular}{\null}{}{}
351 \expandafter \let \csname endtabular*\endcsname = \endtabular
352
353 %%%%%% tabbing (platex/#53)
354 \patchcmd\@startline{\strut}{\strut\inhibitglue}{}{}
355 \def\ltj@unhbox@curfield{\ltjfakeboxbdd\unhbox\@curfield\ltjfakeboxbdd}
356 %\patchcmd\@contfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{}
357 \patchcmd\@addfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{}
358 \endinput