5 \NeedsTeXFormat{LaTeX2e}
6 \ProvidesPackage{lltjp-geometry}[2015/01/01 Patch to geometry for LuaTeX-ja with vertical writing mode]
7 \RequirePackage{ifluatex}
9 \ifdefined\if@ltj@@geometry@tate\expandafter\endinput\fi
10 \newif\if@ltj@@geometry@tate
11 \@ltj@@geometry@tatefalse
13 \@ltj@@geometry@tatetrue
15 \global \setbox \@begindvibox
16 \vbox{\yoko\unvbox \@begindvibox #1}%
20 \RequirePackage{filehook}
21 \newif\ifGm@ltj@layoutswitch
22 \let\orig@PackageWarningNoLine=\PackageWarningNoLine
23 \ifdefined\ifGm@swap@papersize\else\newif\ifGm@swap@papersize\fi
25 \AtBeginOfPackageFile{geometry}{%
26 \edef\Gm@ltj@topskip{\the\topskip}
27 \edef\Gm@ltj@headsep{\the\headsep}
28 \edef\Gm@ltj@footskip{\the\footskip}
30 \ifnum\ltjgetparameter{direction}=3 \@ltj@@geometry@tatetrue\fi
32 \if@ltj@@geometry@tate
33 \let\PackageWarningNoLine\@gobbletwo% 警告抑止
36 \AtEndOfPackageFile{geometry}{%
37 \let\PackageWarningNoLine=\orig@PackageWarningNoLine
38 \if@ltj@@geometry@tate
39 \let\PackageWarningNoLine=\orig@PackageWarningNoLine
43 % * pTeX, LuaTeX ともに truedimen が正しく動作しない
44 % * pTeX resetpaper が正しく動作しない
46 % `h', `v' は「水平」「垂直」を意味するが:
47 % ユーザー側では「紙の物理的な水平方向」「物理的な垂直方向」を,
48 % しかしパッケージ内部処理では「字送り方向」「行送り方向」を表す.
49 % そのため,key-value interface 内で h, v の交換を行う必要がある.
51 % twoside 指定時は,lmargin は小口側,rmargin はノド側の余白を指す.
52 % また,bindingoffset 偶数ページを右に,奇数ページを左にずらす.
53 \define@key{Gm}{hdivide}{\Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
55 \define@key{Gm}{vscale}{\Gm@hbodytrue\edef\Gm@hscale{#1}}%
56 \define@key{Gm}{hscale}{\Gm@vbodytrue\edef\Gm@vscale{#1}}%
57 \define@key{Gm}{vdivide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}}%
58 \define@key{Gm}{divide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}%
59 \Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
60 \define@key{Gm}{vmargin}{\Gm@branch{#1}{tmargin}{bmargin}}%
61 \define@key{Gm}{hmargin}{\Gm@branch{#1}{lmargin}{rmargin}}%
62 \define@key{Gm}{margin}{\Gm@branch{#1}{tmargin}{lmargin}%
63 \Gm@branch{#1}{bmargin}{rmargin}}%
64 \define@key{Gm}{headsep}{\Gm@defbylen{ltj@headsep}{#1}}%
65 \define@key{Gm}{footskip}{\Gm@defbylen{ltj@footskip}{#1}}%
66 \let\KV@Gm@foot\KV@Gm@footskip
67 \define@key{Gm}{vmarginratio}{\edef\Gm@hmarginratio{#1}}%
68 \define@key{Gm}{hmarginratio}{\edef\Gm@vmarginratio{#1}}%
69 \define@key{Gm}{nohead}[true]{\Gm@doifelse{nohead}{#1}%
70 {\Gm@setlength\headheight\z@\Gm@defbylen{ltj@headsep}\z@}{}}%
71 \define@key{Gm}{nofoot}[true]{\Gm@doifelse{nofoot}{#1}%
72 {\Gm@defbylen{ltj@footskip}\z@}{}}%
73 \define@key{Gm}{noheadfoot}[true]{\Gm@doifelse{noheadfoot}{#1}%
74 {\Gm@setlength\headheight\z@\Gm@defbylen{ltj@headsep}\z@
75 \Gm@defbylen{ltj@footskip}\z@}{}}%
77 % \@mparswitch は傍注の出力位置を左右ページで変えるスイッチだが,
78 % geometry.sty はこれを左右ページのレイアウトを変えるか否かの判定にも使っている.
79 % 縦組クラスの場合は \@mparswitch は常に偽でないとおかしなことになるので
80 % \@mparswitch -> \Gm@ltj@layoutswitch と名称変更する.
82 \let\Gm@ltj@layoutswitch\@mparswitch
84 \define@key{Gm}{twoside}[true]{\Gm@doifelse{twoside}{#1}%
85 {\@twosidetrue\Gm@ltj@layoutswitchtrue}{\@twosidefalse\Gm@ltj@layoutswitchfalse}}%
86 \define@key{Gm}{asymmetric}[true]{\Gm@doifelse{asymmetric}{#1}%
87 {\@twosidetrue\Gm@ltj@layoutswitchfalse}{}}%
89 % includemp 指定時は,\headsep (if reversemp || twocolumn) や,
90 % \footskip (if !reversemp || twocolumn) を傍注幅だけ増加させる.
93 \def\Gm@Dhratio{2:3}% = top:bottom default
94 \def\Gm@Dvratio{1:1}% = left:right default for oneside
95 \def\Gm@Dvratiotwo{3:2}% = inner:outer default for twoside.
97 % geometry.sty ロード時に landscape オプションが指定されていた場合,
98 % それによって用紙サイズの縦横が入れ替わってしまっているので補正する.
99 \setlength\@tempdima{\paperwidth}%
100 \setlength\paperwidth{\paperheight}%
101 \setlength\paperheight{\@tempdima}%
106 \Gm@savelength{paperwidth}%
107 \Gm@savelength{paperheight}%
108 \Gm@savelength{textwidth}%
109 \Gm@savelength{textheight}%
110 \Gm@savelength{evensidemargin}%
111 \Gm@savelength{oddsidemargin}%
112 \Gm@savelength{topmargin}%
113 \Gm@savelength{headheight}%
114 %\Gm@savelength{headsep}%
115 \Gm@savelength{topskip}%
116 %\Gm@savelength{footskip}%
117 \Gm@savelength{baselineskip}%
118 \Gm@savelength{marginparwidth}%
119 \Gm@savelength{marginparsep}%
120 \Gm@savelength{columnsep}%
121 \Gm@savelength{hoffset}%
122 \Gm@savelength{voffset}
123 \Gm@savelength{Gm@layoutwidth}%
124 \Gm@savelength{Gm@layoutheight}%
125 \Gm@savelength{Gm@layouthoffset}%
126 \Gm@savelength{Gm@layoutvoffset}%
127 \Gm@saveboolean{@twocolumn}%
128 \Gm@saveboolean{@twoside}%
129 \Gm@saveboolean{Gm@ltj@layoutswitch}%
130 \Gm@saveboolean{@reversemargin}}%
134 \def\Gm@pageframe@cmd{\vb@xt@\z@}
136 \def\Gm@pageframe@cmd{\vb@xt@\z@\bgroup\yoko\aftergroup\egroup}
138 \renewcommand*{\Gm@pageframes}{%
141 \vb@xt@\z@{\vskip-1\Gm@truedimen in\vskip\Gm@layoutvoffset%
142 \hb@xt@\z@{\hskip-1\Gm@truedimen in\hskip\Gm@layouthoffset%
143 \vb@xt@\Gm@layoutheight{%
145 \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,1,-3,3)\hfil\Gm@cropmark(1,1,3,3)}%
147 \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,-1,-3,-3)\hfil\Gm@cropmark(1,-1,3,-3)}}%
154 \let\@themargin\oddsidemargin
156 \let\@themargin\evensidemargin
159 \moveright\@themargin%
161 \vskip\topmargin\vb@xt@\z@{\vss\Gm@hrule}%
162 \vskip\headheight\vb@xt@\z@{\vss\Gm@hruled}%
163 \vskip\headsep\vb@xt@\z@{\vss\Gm@hrule}%
164 \if@reversemargin\vb@xt@\z@{%
165 \vss\vb@xt@\z@{\vss\Gm@hrule}%
166 \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hrule}%
169 \hb@xt@\textwidth{\llap{\Gm@vrule}\hfil\Gm@vrule}%
170 \vb@xt@\z@{\vss\Gm@hruled}%
171 \unless\if@reversemargin\vb@xt@\z@{%
172 \vskip\marginparsep\vb@xt@\z@{\vss\Gm@hrule}%
173 \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hruled}\vss%
175 \vskip\footskip\vb@xt@\z@{\vss\Gm@hruled}%
179 \def\Gm@detall#1#2#3#4{%
182 \let\Gm@mratio\Gm@hmarginratio
183 \edef\Gm@Dmratio{\Gm@Dhratio}%
185 \let\Gm@mratio\Gm@vmarginratio
186 \edef\Gm@Dmratio{\if@twoside\Gm@Dvratiotwo\else\Gm@Dvratio\fi}%
189 \ifx\Gm@tmargin\@undefined\else\advance\@tempcnta4\relax\fi
190 \ifGm@hbody\advance\@tempcnta2\relax\fi
191 \ifx\Gm@bmargin\@undefined\else\advance\@tempcnta1\relax\fi
194 \ifx\Gm@lmargin\@undefined\else\advance\@tempcnta4\relax\fi
195 \ifGm@vbody\advance\@tempcnta2\relax\fi
196 \ifx\Gm@rmargin\@undefined\else\advance\@tempcnta1\relax\fi
201 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
203 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
205 \Gm@detiiandiii{#2}{#3}{#4}%
207 \ifx\Gm@mratio\@undefined
209 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
211 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
213 \setlength\@tempdimc{\@nameuse{Gm@#4}}%
214 \Gm@detiiandiii{#2}{#3}{#4}%
215 \expandafter\let\csname Gm@#2\endcsname\@undefined
216 \Gm@defbylen{#4}{\@tempdimc}%
218 \Gm@setbyratio[f]{#1}{#4}{#3}%
220 \Gm@detiv{#2}{#3}{#4}{#2}%
221 \or\Gm@detiiandiii{#2}{#3}{#4}%
222 \or\Gm@detiv{#2}{#2}{#4}{#3}%
224 \ifx\Gm@mratio\@undefined
226 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
228 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
230 \setlength\@tempdimc{\@nameuse{Gm@#3}}%
231 \Gm@detiiandiii{#2}{#4}{#3}%
232 \expandafter\let\csname Gm@#2\endcsname\@undefined
233 \Gm@defbylen{#3}{\@tempdimc}%
235 \Gm@setbyratio[b]{#1}{#3}{#4}%
237 \Gm@detiv{#2}{#3}{#4}{#2}%
238 \or\Gm@detiv{#2}{#3}{#4}{#2}%
239 \or\Gm@detiv{#2}{#2}{#3}{#4}%
240 \or\Gm@warning{Over-specification in `#1'-direction.%
241 ^^J\@spaces `#2' (\@nameuse{Gm@#2}) is ignored}%
242 \Gm@detiv{#2}{#3}{#4}{#2}%
245 \ifnum\Gm@cnth<4\let\Gm@tmargin\@undefined\fi
246 \ifodd\Gm@cnth\else\let\Gm@bmargin\@undefined\fi
247 \ifnum\Gm@cntv<4\let\Gm@lmargin\@undefined\fi
248 \ifodd\Gm@cntv\else\let\Gm@rmargin\@undefined\fi
250 \let\Gm@hscale\@undefined
251 \let\Gm@width\@undefined
252 \let\Gm@textwidth\@undefined
255 \let\Gm@vscale\@undefined
256 \let\Gm@height\@undefined
257 \let\Gm@textheight\@undefined
260 \def\Gm@adjustpaper{%
261 \ifdim\paperwidth>\p@\else
262 \PackageError{geometry}{%
263 \string\paperwidth\space(\the\paperwidth) too short}{%
264 Set a paper type (e.g., `a4paper').}%
266 \ifdim\paperheight>\p@\else
267 \PackageError{geometry}{%
268 \string\paperheight\space(\the\paperheight) too short}{%
269 Set a paper type (e.g., `a4paper').}%
272 \setlength\@tempdima{\paperwidth}%
273 \setlength\paperwidth{\paperheight}%
274 \setlength\paperheight{\@tempdima}%
277 \setlength\Gm@layoutwidth{\paperheight}%
278 \setlength\Gm@layoutheight{\paperwidth}%
282 \ifx\Gm@width\@undefined
283 \ifx\Gm@hscale\@undefined
284 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
286 \Gm@defbylen{width}{\Gm@hscale\Gm@layoutwidth}%
289 \ifx\Gm@textwidth\@undefined\else
290 \setlength\@tempdima{\Gm@textwidth}%
292 \advance\@tempdima\Gm@wd@mp
295 \addtolength\@tempdima{\headheight}%
296 \addtolength\@tempdima{\headsep}%
299 \addtolength\@tempdima{\footskip}%
301 \edef\Gm@width{\the\@tempdima}%
305 \ifx\Gm@height\@undefined
306 \ifx\Gm@vscale\@undefined
307 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
309 \Gm@defbylen{height}{\Gm@vscale\Gm@layoutheight}%
312 \setlength\topskip\Gm@ltj@topskip
313 \ifx\Gm@lines\@undefined\else
314 \setlength\maxdepth{1\Cht}%
315 \setbox\z@=\hbox{\tate% next \ifdim must be executed in tate dir.
316 \ifdim\topskip<\ht\tstrutbox
318 \global\topskip\ht\tstrutbox
319 \PackageWarningNoLine{lltjp-geometry}%
320 {do not worry about `\noexpand\topskip was changed ...'\MessageBreak
322 \PackageWarningNoLine{lltjp-geometry}%
323 {\noexpand\topskip was changed from \the\@tempdima\space
326 \setlength\@tempdima{\baselineskip}%
327 \multiply\@tempdima\Gm@lines
328 \addtolength\@tempdima{\topskip}%
329 \addtolength\@tempdima{-\baselineskip}%
330 \edef\Gm@textheight{\the\@tempdima}%
332 \ifx\Gm@textheight\@undefined\else
333 \edef\Gm@height{\Gm@textheight}%
339 \@tempdimb\marginparwidth
340 \advance\@tempdimb\marginparsep
349 \addtolength\Gm@layoutheight{-\Gm@bindingoffset}%
352 \Gm@detall{h}{width}{tmargin}{bmargin}%
353 \Gm@detall{v}{height}{lmargin}{rmargin}%
354 \setlength\textwidth{\Gm@width}%
355 \setlength\textheight{\Gm@height}%
356 \setlength\headsep{\Gm@ltj@headsep}%
357 \setlength\footskip{\Gm@ltj@footskip}%
358 \setlength\topmargin{\Gm@tmargin}%
359 \setlength\oddsidemargin{\Gm@lmargin}%
360 \addtolength\oddsidemargin{-1\Gm@truedimen in}%
361 \ifGm@ltj@layoutswitch
362 \setlength\evensidemargin{\Gm@rmargin}%
363 \addtolength\evensidemargin{-1\Gm@truedimen in}%
365 \evensidemargin\oddsidemargin
367 \advance\evensidemargin\Gm@bindingoffset
368 \addtolength\topmargin{-1\Gm@truedimen in}%
370 \addtolength\textwidth{-\headheight}%
371 \addtolength\textwidth{-\headsep}%
373 \addtolength\topmargin{-\headheight}%
374 \addtolength\topmargin{-\headsep}%
377 \addtolength\textwidth{-\footskip}%
380 \advance\textwidth-\Gm@wd@mp
382 \advance\headsep.5\Gm@wd@mp
383 \advance\footskip.5\Gm@wd@mp
384 \else\if@reversemargin
385 \advance\headsep\Gm@wd@mp
387 \advance\footskip\Gm@wd@mp
391 \setlength\@tempdima{\textheight}%
392 \addtolength\@tempdima{-\topskip}%
394 \@tempcntb\baselineskip
395 \divide\@tempcnta\@tempcntb
396 \setlength\@tempdimb{\baselineskip}%
397 \multiply\@tempdimb\@tempcnta
398 \advance\@tempdima-\@tempdimb
399 \multiply\@tempdima\tw@
400 \ifdim\@tempdima>\baselineskip
401 \addtolength\@tempdimb{\baselineskip}%
403 \addtolength\@tempdimb{\topskip}%
404 \textheight\@tempdimb
406 \advance\oddsidemargin\Gm@layoutvoffset%
407 \advance\evensidemargin\Gm@layoutvoffset%
408 \advance\topmargin\Gm@layouthoffset%
409 \addtolength\Gm@layoutheight{\Gm@bindingoffset}%
410 }% end of \Gm@@process
412 \def\Gm@logcontent#1{%
413 *geometry* verbose mode - [ #1 ] result:^^J%
414 \ifGm@pass * pass: disregarded the geometry package!^^J%
416 * driver: \if\Gm@driver<none>\else\Gm@driver\fi^^J%
417 * paper: \ifx\Gm@paper\@undefined<default>\else\Gm@paper\fi^^J%
418 * layout: \ifGm@layout<custom>\else<same size as paper>\fi^^J%
420 * layout(width,height): (\the\Gm@layoutwidth,\the\Gm@layoutheight)^^J%
422 * layoutoffset:(h,v)=(\the\Gm@layouthoffset,\the\Gm@layoutvoffset)^^J%
423 \@ifundefined{Gm@lines}{}{* lines: \Gm@lines^^J}%
424 \@ifundefined{Gm@hmarginratio}{}{* hratio: \Gm@hmarginratio^^J}%
425 \@ifundefined{Gm@vmarginratio}{}{* vratio: \Gm@vmarginratio^^J}%
426 \ifdim\Gm@bindingoffset=\z@\else
427 * bindingoffset: \the\Gm@bindingoffset^^J\fi
429 \Gm@showbool{landscape}%
430 \Gm@showbool{includehead}%
431 \Gm@showbool{includefoot}%
432 \Gm@showbool{includemp}%
433 \if@twoside twoside\space\fi%
434 \ifGm@ltj@layoutswitch\else\if@twoside asymmetric\space\fi\fi%
435 \Gm@showbool{heightrounded}%
436 \ifx\Gm@truedimen\@empty\else truedimen\space\fi%
437 \Gm@showbool{showframe}%
438 \Gm@showbool{showcrop}%
440 * h-part:(L,W,R)=(\Gm@lmargin, \Gm@height, \Gm@rmargin)^^J%
441 * v-part:(T,H,B)=(\Gm@tmargin, \Gm@width, \Gm@bmargin)^^J%
443 \Gm@showdim{\paperwidth}%
444 \Gm@showdim{\paperheight}%
445 \Gm@showdim{\textwidth}%
446 \Gm@showdim{\textheight}%
447 \Gm@showdim{\oddsidemargin}%
448 \Gm@showdim{\evensidemargin}%
449 \Gm@showdim{\topmargin}%
450 \Gm@showdim{\headheight}%
451 \Gm@showdim{\headsep}%
452 \Gm@showdim{\topskip}%
453 \Gm@showdim{\footskip}%
454 \Gm@showdim{\marginparwidth}%
455 \Gm@showdim{\marginparsep}%
456 \Gm@showdim{\columnsep}%
457 * \string\skip\string\footins=\the\skip\footins^^J%
458 \Gm@showdim{\hoffset}%
459 \Gm@showdim{\voffset}%
461 * \string\@twocolumn\if@twocolumn true\else false\fi^^J%
462 * \string\@twoside\if@twoside true\else false\fi^^J%
463 * \string\@mparswitch\if@mparswitch true\else false\fi^^J%
464 * \string\@reversemargin\if@reversemargin true\else false\fi^^J%
465 * (1in=72.27pt=25.4mm, 1cm=28.453pt)^^J}%
470 \ProcessOptionsKV[c]{Gm}%
472 \ProcessOptionsKV[p]{Gm}%