5 \NeedsTeXFormat{LaTeX2e}
6 \ProvidesPackage{lltjp-geometry}[2014/11/23 Patch to geometry for LuaTeX-ja with vertical writing mode]
7 \RequirePackage{ifluatex}
9 \newif\if@ltj@@geometry@tate
10 \@ltj@@geometry@tatefalse
12 \@ltj@@geometry@tatetrue
14 \global \setbox \@begindvibox
15 \vbox{\yoko\unvbox \@begindvibox #1}%
19 \RequirePackage{filehook}
21 \AtBeginOfPackageFile{geometry}{%
22 \edef\Gm@ltj@topskip{\the\topskip}
23 \edef\Gm@ltj@headsep{\the\headsep}
24 \edef\Gm@ltj@footskip{\the\footskip}
26 \AtEndOfPackageFile{geometry}{%
28 \ifnum\ltjgetparameter{direction}=3 \@ltj@@geometry@tatetrue\fi
30 \if@ltj@@geometry@tate
32 % `h', `v' は「水平」「垂直」を意味するが:
33 % ユーザー側では「紙の物理的な水平方向」「物理的な垂直方向」を,
34 % しかしパッケージ内部処理では「字送り方向」「行送り方向」を表す.
35 % そのため,key-value interface 内で h, v の交換を行う必要がある.
37 \define@key{Gm}{vdivide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}}%
38 \define@key{Gm}{hdivide}{\Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
39 \define@key{Gm}{divide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}%
40 \Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
41 \define@key{Gm}{vmargin}{\Gm@branch{#1}{tmargin}{bmargin}}%
42 \define@key{Gm}{hmargin}{\Gm@branch{#1}{lmargin}{rmargin}}%
43 \define@key{Gm}{margin}{\Gm@branch{#1}{tmargin}{lmargin}%
44 \Gm@branch{#1}{bmargin}{rmargin}}%
45 \define@key{Gm}{headsep}{\Gm@defbylen{ltj@headsep}{#1}}%
46 \define@key{Gm}{footskip}{\Gm@defbylen{ltj@footskip}{#1}}%
47 \define@key{Gm}{vmarginratio}{\edef\Gm@hmarginratio{#1}}%
48 \define@key{Gm}{hmarginratio}{\edef\Gm@vmarginratio{#1}}%
50 % \@mparswitch は傍注の出力位置を左右ページで変えるスイッチだが,
51 % geometry.sty はこれを左右ページのレイアウトを変えるか否かの判定にも使っている.
52 % 縦組クラスの場合は \@mparswitch は常に偽でないとおかしなことになるので
53 % \@mparswitch -> \Gm@ltj@layoutswitch と名称変更する.
55 \newif\ifGm@ltj@layoutswitch
56 \let\Gm@ltj@layoutswitch\@mparswitch
58 \define@key{Gm}{twoside}[true]{\Gm@doifelse{twoside}{#1}%
59 {\@twosidetrue\Gm@ltj@layoutswitchtrue}{\@twosidefalse\Gm@ltj@layoutswitchfalse}}%
60 \define@key{Gm}{asymmetric}[true]{\Gm@doifelse{asymmetric}{#1}%
61 {\@twosidetrue\Gm@ltj@layoutswitchfalse}{}}%
63 \def\Gm@Dhratio{2:3}% = top:bottom default
64 \def\Gm@Dvratio{1:1}% = left:right default for oneside
65 \def\Gm@Dvratiotwo{2:3}% = inner:outer default for twoside.
69 \Gm@savelength{paperwidth}%
70 \Gm@savelength{paperheight}%
71 \Gm@savelength{textwidth}%
72 \Gm@savelength{textheight}%
73 \Gm@savelength{evensidemargin}%
74 \Gm@savelength{oddsidemargin}%
75 \Gm@savelength{topmargin}%
76 \Gm@savelength{headheight}%
77 %\Gm@savelength{headsep}%
78 \Gm@savelength{topskip}%
79 %\Gm@savelength{footskip}%
80 \Gm@savelength{baselineskip}%
81 \Gm@savelength{marginparwidth}%
82 \Gm@savelength{marginparsep}%
83 \Gm@savelength{columnsep}%
84 \Gm@savelength{hoffset}%
85 \Gm@savelength{voffset}
86 \Gm@savelength{Gm@layoutwidth}%
87 \Gm@savelength{Gm@layoutheight}%
88 \Gm@savelength{Gm@layouthoffset}%
89 \Gm@savelength{Gm@layoutvoffset}%
90 \Gm@saveboolean{@twocolumn}%
91 \Gm@saveboolean{@twoside}%
92 \Gm@saveboolean{Gm@ltj@layoutswitch}%
93 \Gm@saveboolean{@reversemargin}}%
97 \def\Gm@pageframe@cmd{\vb@xt@\z@}
99 \def\Gm@pageframe@cmd{\vb@xt@\z@\bgroup\yoko\aftergroup\egroup}
101 \renewcommand*{\Gm@pageframes}{%
104 \vb@xt@\z@{\vskip-1\Gm@truedimen in\vskip\Gm@layoutvoffset%
105 \hb@xt@\z@{\hskip-1\Gm@truedimen in\hskip\Gm@layouthoffset%
106 \vb@xt@\Gm@layoutheight{%
108 \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,1,-3,3)\hfil\Gm@cropmark(1,1,3,3)}%
110 \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,-1,-3,-3)\hfil\Gm@cropmark(1,-1,3,-3)}}%
117 \let\@themargin\oddsidemargin
119 \let\@themargin\evensidemargin
122 \moveright\@themargin%
124 \vskip\topmargin\vb@xt@\z@{\vss\Gm@hrule}%
125 \vskip\headheight\vb@xt@\z@{\vss\Gm@hruled}%
126 \vskip\headsep\vb@xt@\z@{\vss\Gm@hrule}%
127 \if@reversemargin\vb@xt@\z@{%
128 \vss\vb@xt@\z@{\vss\Gm@hrule}%
129 \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hrule}%
132 \hb@xt@\textwidth{\llap{\Gm@vrule}\hfil\Gm@vrule}%
133 \vb@xt@\z@{\vss\Gm@hruled}%
134 \unless\if@reversemargin\vb@xt@\z@{%
135 \vskip\marginparsep\vb@xt@\z@{\vss\Gm@hrule}%
136 \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hruled}%
138 \vskip\footskip\vb@xt@\z@{\vss\Gm@hruled}%
142 \def\Gm@detall#1#2#3#4{%
145 \let\Gm@mratio\Gm@hmarginratio
146 \edef\Gm@Dmratio{\if@twoside\Gm@Dhratiotwo\else\Gm@Dhratio\fi}%
148 \let\Gm@mratio\Gm@vmarginratio
149 \edef\Gm@Dmratio{\Gm@Dvratio}%
152 \ifx\Gm@tmargin\@undefined\else\advance\@tempcnta4\relax\fi
153 \ifGm@hbody\advance\@tempcnta2\relax\fi
154 \ifx\Gm@bmargin\@undefined\else\advance\@tempcnta1\relax\fi
157 \ifx\Gm@rmargin\@undefined\else\advance\@tempcnta4\relax\fi
158 \ifGm@vbody\advance\@tempcnta2\relax\fi
159 \ifx\Gm@lmargin\@undefined\else\advance\@tempcnta1\relax\fi
164 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
166 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
168 \Gm@detiiandiii{#2}{#3}{#4}%
170 \ifx\Gm@mratio\@undefined
172 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
174 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
176 \setlength\@tempdimc{\@nameuse{Gm@#4}}%
177 \Gm@detiiandiii{#2}{#3}{#4}%
178 \expandafter\let\csname Gm@#2\endcsname\@undefined
179 \Gm@defbylen{#4}{\@tempdimc}%
181 \Gm@setbyratio[f]{#1}{#4}{#3}%
183 \Gm@detiv{#2}{#3}{#4}{#2}%
184 \or\Gm@detiiandiii{#2}{#3}{#4}%
185 \or\Gm@detiv{#2}{#2}{#4}{#3}%
187 \ifx\Gm@mratio\@undefined
189 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
191 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
193 \setlength\@tempdimc{\@nameuse{Gm@#3}}%
194 \Gm@detiiandiii{#2}{#4}{#3}%
195 \expandafter\let\csname Gm@#2\endcsname\@undefined
196 \Gm@defbylen{#3}{\@tempdimc}%
198 \Gm@setbyratio[b]{#1}{#3}{#4}%
200 \Gm@detiv{#2}{#3}{#4}{#2}%
201 \or\Gm@detiv{#2}{#3}{#4}{#2}%
202 \or\Gm@detiv{#2}{#2}{#3}{#4}%
203 \or\Gm@warning{Over-specification in `#1'-direction.%
204 ^^J\@spaces `#2' (\@nameuse{Gm@#2}) is ignored}%
205 \Gm@detiv{#2}{#3}{#4}{#2}%
208 \ifnum\Gm@cnth<4\let\Gm@tmargin\@undefined\fi
209 \ifodd\Gm@cnth\else\let\Gm@bmargin\@undefined\fi
210 \ifnum\Gm@cntv<4\let\Gm@rmargin\@undefined\fi
211 \ifodd\Gm@cntv\else\let\Gm@lmargin\@undefined\fi
213 \let\Gm@hscale\@undefined
214 \let\Gm@width\@undefined
215 \let\Gm@textwidth\@undefined
218 \let\Gm@vscale\@undefined
219 \let\Gm@height\@undefined
220 \let\Gm@textheight\@undefined
223 \def\Gm@adjustpaper{%
224 \ifdim\paperwidth>\p@\else
225 \PackageError{geometry}{%
226 \string\paperwidth\space(\the\paperwidth) too short}{%
227 Set a paper type (e.g., `a4paper').}%
229 \ifdim\paperheight>\p@\else
230 \PackageError{geometry}{%
231 \string\paperheight\space(\the\paperheight) too short}{%
232 Set a paper type (e.g., `a4paper').}%
235 \setlength\@tempdima{\paperwidth}%
236 \setlength\paperwidth{\paperheight}%
237 \setlength\paperheight{\@tempdima}%
240 \setlength\Gm@layoutwidth{\paperheight}%
241 \setlength\Gm@layoutheight{\paperwidth}%
245 \ifx\Gm@width\@undefined
246 \ifx\Gm@hscale\@undefined
247 \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
249 \Gm@defbylen{width}{\Gm@hscale\Gm@layoutwidth}%
252 \ifx\Gm@textwidth\@undefined\else
253 \setlength\@tempdima{\Gm@textwidth}%
255 \advance\@tempdima\Gm@wd@mp
258 \addtolength\@tempdima{\headheight}%
259 \addtolength\@tempdima{\headsep}%
262 \addtolength\@tempdima{\footskip}%
264 \edef\Gm@width{\the\@tempdima}%
268 \ifx\Gm@height\@undefined
269 \ifx\Gm@vscale\@undefined
270 \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
272 \Gm@defbylen{height}{\Gm@vscale\Gm@layoutheight}%
275 \setlength\topskip\Gm@ltj@topskip
276 \ifx\Gm@lines\@undefined\else
277 \setlength\maxdepth{1\Cht}%
278 \setbox\z@=\hbox{\tate% next \ifdim must be executed in tate dir.
279 \ifdim\topskip<\ht\tstrutbox
281 \global\topskip\ht\tstrutbox
282 \PackageWarningNoLine{lltjp-geometry}%
283 {do not worry about `\noexpand\topskip was changed ...'\MessageBreak
285 \PackageWarningNoLine{lltjp-geometry}%
286 {\noexpand\topskip was changed from \the\@tempdima\space
289 \setlength\@tempdima{\baselineskip}%
290 \multiply\@tempdima\Gm@lines
291 \addtolength\@tempdima{\topskip}%
292 \addtolength\@tempdima{-\baselineskip}%
293 \edef\Gm@textheight{\the\@tempdima}%
295 \ifx\Gm@textheight\@undefined\else
296 \edef\Gm@height{\Gm@textheight}%
300 \def\Gm@adjustmp{%%%% TODO %%%%%%%
302 \@tempdimb\marginparwidth
303 \advance\@tempdimb\marginparsep
310 \Gm@even@mp\@tempdimb
315 \Gm@even@mp\@tempdimb
319 \Gm@even@mp\@tempdimb
327 \addtolength\Gm@layoutwidth{-\Gm@bindingoffset}%
330 \Gm@detall{h}{width}{tmargin}{bmargin}%
331 \Gm@detall{v}{height}{lmargin}{rmargin}%
332 \setlength\textwidth{\Gm@width}%
333 \setlength\textheight{\Gm@height}%
334 \setlength\headsep{\Gm@ltj@headsep}%
335 \setlength\footskip{\Gm@ltj@footskip}%
336 \setlength\topmargin{\Gm@tmargin}%
337 \setlength\oddsidemargin{\Gm@lmargin}%
338 \addtolength\oddsidemargin{-1\Gm@truedimen in}%
339 \ifGm@ltj@layoutswitch
340 \setlength\evensidemargin{\Gm@rmargin}%
341 \addtolength\evensidemargin{-1\Gm@truedimen in}%
343 \evensidemargin\oddsidemargin
345 \advance\oddsidemargin\Gm@bindingoffset
346 \addtolength\topmargin{-1\Gm@truedimen in}%
348 \addtolength\textwidth{-\headheight}%
349 \addtolength\textwidth{-\headsep}%
351 \addtolength\topmargin{-\headheight}%
352 \addtolength\topmargin{-\headsep}%
355 \addtolength\textwidth{-\footskip}%
358 \advance\textwidth-\Gm@wd@mp
360 \advance\headsep\Gm@wd@mp
362 \advance\footskip\Gm@wd@mp
366 \setlength\@tempdima{\textheight}%
367 \addtolength\@tempdima{-\topskip}%
369 \@tempcntb\baselineskip
370 \divide\@tempcnta\@tempcntb
371 \setlength\@tempdimb{\baselineskip}%
372 \multiply\@tempdimb\@tempcnta
373 \advance\@tempdima-\@tempdimb
374 \multiply\@tempdima\tw@
375 \ifdim\@tempdima>\baselineskip
376 \addtolength\@tempdimb{\baselineskip}%
378 \addtolength\@tempdimb{\topskip}%
379 \textheight\@tempdimb
381 \advance\oddsidemargin\Gm@layoutvoffset%
382 \advance\evensidemargin\Gm@layoutvoffset%
383 \advance\topmargin\Gm@layouthoffset%
384 \addtolength\Gm@layoutheight{\Gm@bindingoffset}%
385 }% end of \Gm@@process
388 \def\Gm@logcontent#1{%
389 *geometry* verbose mode - [ #1 ] result:^^J%
390 \ifGm@pass * pass: disregarded the geometry package!^^J%
392 * driver: \if\Gm@driver<none>\else\Gm@driver\fi^^J%
393 * paper: \ifx\Gm@paper\@undefined<default>\else\Gm@paper\fi^^J%
394 * layout: \ifGm@layout<custom>\else<same size as paper>\fi^^J%
396 * layout(width,height): (\the\Gm@layoutwidth,\the\Gm@layoutheight)^^J%
398 * layoutoffset:(h,v)=(\the\Gm@layouthoffset,\the\Gm@layoutvoffset)^^J%
399 \@ifundefined{Gm@lines}{}{* lines: \Gm@lines^^J}%
400 \@ifundefined{Gm@hmarginratio}{}{* hratio: \Gm@hmarginratio^^J}%
401 \@ifundefined{Gm@vmarginratio}{}{* vratio: \Gm@vmarginratio^^J}%
402 \ifdim\Gm@bindingoffset=\z@\else
403 * bindingoffset: \the\Gm@bindingoffset^^J\fi
405 \Gm@showbool{landscape}%
406 \Gm@showbool{includehead}%
407 \Gm@showbool{includefoot}%
408 \Gm@showbool{includemp}%
409 \if@twoside twoside\space\fi%
410 \ifGm@ltj@layoutswitch\else\if@twoside asymmetric\space\fi\fi%
411 \Gm@showbool{heightrounded}%
412 \ifx\Gm@truedimen\@empty\else truedimen\space\fi%
413 \Gm@showbool{showframe}%
414 \Gm@showbool{showcrop}%
416 * h-part:(L,W,R)=(\Gm@lmargin, \Gm@height, \Gm@rmargin)^^J%
417 * v-part:(T,H,B)=(\Gm@tmargin, \Gm@width, \Gm@bmargin)^^J%
419 \Gm@showdim{\paperwidth}%
420 \Gm@showdim{\paperheight}%
421 \Gm@showdim{\textwidth}%
422 \Gm@showdim{\textheight}%
423 \Gm@showdim{\oddsidemargin}%
424 \Gm@showdim{\evensidemargin}%
425 \Gm@showdim{\topmargin}%
426 \Gm@showdim{\headheight}%
427 \Gm@showdim{\headsep}%
428 \Gm@showdim{\topskip}%
429 \Gm@showdim{\footskip}%
430 \Gm@showdim{\marginparwidth}%
431 \Gm@showdim{\marginparsep}%
432 \Gm@showdim{\columnsep}%
433 * \string\skip\string\footins=\the\skip\footins^^J%
434 \Gm@showdim{\hoffset}%
435 \Gm@showdim{\voffset}%
437 * \string\@twocolumn\if@twocolumn true\else false\fi^^J%
438 * \string\@twoside\if@twoside true\else false\fi^^J%
439 * \string\@mparswitch\if@mparswitch true\else false\fi^^J%
440 * \string\@reversemargin\if@reversemargin true\else false\fi^^J%
441 * (1in=72.27pt=25.4mm, 1cm=28.453pt)^^J}%
446 \ProcessOptionsKV[c]{Gm}%
448 \ProcessOptionsKV[p]{Gm}%