adjustbox.sty (34406B)
1 %% Copyright (C) 2011-2012 by Martin Scharrer <martin@scharrer-online.de> 2 %% ---------------------------------------------------------------------- 3 %% This work may be distributed and/or modified under the 4 %% conditions of the LaTeX Project Public License, either version 1.3 5 %% of this license or (at your option) any later version. 6 %% The latest version of this license is in 7 %% http://www.latex-project.org/lppl.txt 8 %% and version 1.3 or later is part of all distributions of LaTeX 9 %% version 2005/12/01 or later. 10 %% 11 %% This work has the LPPL maintenance status `maintained'. 12 %% 13 %% The Current Maintainer of this work is Martin Scharrer. 14 %% 15 %% This work consists of the files adjustbox.dtx, adjustbox.ins 16 %% and the derived file adjustbox.sty. 17 %% 18 \ProvidesPackage{adjustbox}[% 19 2012/05/21 20 v1.0 21 Adjusting TeX boxes (trim, clip, ...)] 22 \RequirePackage{xkeyval} 23 \RequirePackage{adjcalc} 24 \def\adjbox@fam{adjbox} 25 \DeclareOptionX<Adjbox>{export}{\def\adjbox@fam{Gin}} 26 \DeclareOptionX<Adjbox>{Export}{\AtEndOfPackage{\let\includegraphics\adjincludegraphics}} 27 \DeclareOptionX<Adjbox>{patch}{% 28 \PackageWarning{adjustbox}{% 29 The 'patch' option is now deprecated.\MessageBreak 30 Use the new \string\adjustimage\space or \string\adjincludegraphics\space macros instead% 31 \@gobble 32 }% 33 } 34 \DeclareOptionX<Adjbox>{minimal}{\let\adjustbox@minimal\endinput} 35 \DeclareOptionX<Adjbox>{pgfmath}{\AtEndOfPackage{\RequirePackage{pgf}\adjcalcset{pgfmath}}} 36 \DeclareOptionX<Adjbox>{calc}{\AtEndOfPackage{\RequirePackage{calc}\adjcalcset{calc}}} 37 \DeclareOptionX<Adjbox>{etex}{\AtEndOfPackage{\adjcalcset{etex}}} 38 \DeclareOptionX<Adjbox>{defaultunit}{\AtEndOfPackage{\adjcalcset{defaultunit={#1}}}} 39 \DeclareOptionX<Adjbox>{pgf}{\PassOptionsToPackage{pgf}{trimclip}} 40 \DeclareOptionX<Adjbox>{PGF}{\PassOptionsToPackage{pgf}{trimclip}\AtEndOfPackage{\RequirePackage{pgf}\adjcalcset{pgfmath}}} 41 \DeclareOptionX*{% 42 \IfFileExists{tc-\CurrentOption.def}{% 43 \PassOptionsToPackage\CurrentOption{trimclip}% 44 }{% 45 \PassOptionsToPackage\CurrentOption{graphicx}% 46 }% 47 } 48 \ProcessOptionsX*<Adjbox>\relax 49 \RequirePackage{trimclip} 50 \RequirePackage{graphicx}[1999/02/16] 51 \RequirePackage{collectbox}[2012/05/17] 52 \@ifpackagelater{collectbox}{2012/05/17}{}{% 53 \let\@Collectbox\@collectbox 54 } 55 \newcommand*\adjustboxset{% 56 \@ifstar 57 {\adjbox@addkeysafter}% 58 {\adjbox@addkeysbefore}% 59 } 60 \def\adjbox@addkeysbefore#1{% 61 \ifx\@nnil#1\@nnil 62 \let\adjbox@keysbefore\@empty 63 \else 64 \expandafter\def\expandafter\adjbox@keysbefore\expandafter{\adjbox@keysbefore,#1}% 65 \let\adjbox@setkeys\adjbox@setkeys@ba 66 \fi 67 } 68 \let\adjbox@keysbefore\@empty 69 \def\adjbox@addkeysafter#1{% 70 \begingroup 71 \def\@tempa{#1}% 72 \ifx\@tempa\@empty 73 \endgroup 74 \let\adjbox@keysafter\@empty 75 \else 76 \expandafter\expandafter 77 \expandafter\endgroup 78 \expandafter\expandafter 79 \expandafter\def 80 \expandafter\expandafter 81 \expandafter\adjbox@keysafter 82 \expandafter\expandafter 83 \expandafter{\expandafter\@tempa\expandafter,\adjbox@keysafter}% 84 \let\adjbox@setkeys\adjbox@setkeys@ba 85 \fi 86 } 87 \let\adjbox@keysafter\@empty 88 \newcommand\adjustbox[1]{% 89 \begingroup 90 \edef\adjbox@line{\the\inputlineno}% 91 \let\collectbox@mode\relax 92 \let\collectbox@noindent\relax 93 \collectboxcheckenv{adjustbox}% 94 \ifcollectboxenv\else 95 \let\adjustbox@noindent\relax 96 \fi 97 \begingroup 98 \adjbox@setkeys{#1}% 99 \expandafter\expandafter\expandafter 100 \endgroup 101 \expandafter 102 \adjbox@collectbox\expandafter{\expandafter\adjustbox@\expandafter{\XKV@rm}}% 103 } 104 \def\adjbox@collectbox{\@collectbox} 105 \def\adjbox@setkeys@ba{% 106 \expandafter\expandafter 107 \expandafter\adjbox@@setkeys@ba 108 \expandafter\expandafter 109 \expandafter{\expandafter\adjbox@keysbefore\expandafter}% 110 \expandafter{\adjbox@keysafter}% 111 } 112 \def\adjbox@@setkeys@ba#1#2#3{% 113 \setkeys*{ADJBOX}{#1,#3,#2}% 114 } 115 \def\adjbox@setkeys{% 116 \setkeys*{ADJBOX}% 117 } 118 \let\adjustbox@noindent\noindent 119 \def\adjustbox@#1{% 120 \adjbox@Width\width 121 \adjbox@Height\height 122 \adjbox@Depth\depth 123 \adjbox@Totalheight\totalheight 124 \let\Width\adjbox@Width 125 \let\Height\adjbox@Height 126 \let\Depth\adjbox@Depth 127 \let\Totalheight\adjbox@Totalheight 128 \let\Gin@esetsize\adjbox@esetsize 129 \let\@collectbox\@Collectbox 130 \@tempswatrue 131 \toks@{{\adjustbox@content}}% 132 \def\setlength{\adjsetlength}% 133 \setkeys{adjbox,Gin,adjcalc}{#1}% 134 \adjbox@esetsize 135 \adjustbox@noindent 136 \the\toks@ 137 \endgroup 138 } 139 \def\adjustbox@content{% 140 \usebox\collectedbox 141 } 142 \newdimen\adjbox@Width 143 \newdimen\adjbox@Height 144 \newdimen\adjbox@Depth 145 \newdimen\adjbox@Totalheight 146 \def\adjbox@esetsize{% 147 \ifcase0% 148 \ifx\Gin@ewidth\Gin@exclamation\else 1\fi 149 \ifx\Gin@eheight\Gin@exclamation\else 1\fi 150 \relax 151 \else 152 \edef\@tempa{\toks@{\noexpand 153 \Gscale@@box\noexpand\Gin@eresize 154 {\Gin@ewidth}{\Gin@eheight}{\the\toks@}}}% 155 \@tempa 156 \let\Gin@ewidth\Gin@exclamation 157 \let\Gin@eheight\Gin@exclamation 158 \fi 159 } 160 \newcommand*\adjustimage[2]{% 161 \adjustbox{#1}{\Gin@clipfalse\Gin@i{#2}}% 162 } 163 \newcommand*\adjincludegraphics[2][]{% 164 \adjustbox{#1}{\Gin@clipfalse\Gin@i{#2}}% 165 } 166 {\csname adjustbox@minimal\endcsname} 167 \def\adjbox@Gin@add#1{% 168 \def\@tempa{#1}% 169 \toks@\expandafter\expandafter\expandafter{\expandafter\@tempa\expandafter{\the\toks@}}% 170 } 171 \def\adjbox@Gin@Add{% 172 \Gin@esetsize 173 \@tempswatrue 174 \adjbox@Gin@add 175 } 176 \newcommand\newadjustboxkey{% 177 \@adjustboxkey\adjustbox@newkey 178 } 179 \newcommand\renewadjustboxkey{% 180 \@adjustboxkey\adjustbox@renewkey 181 } 182 \newcommand\provideadjustboxkey{% 183 \@adjustboxkey\adjustbox@providekey 184 } 185 \newcommand\defadjustboxkey{% 186 \@adjustboxkey\@secondoftwo 187 } 188 \def\@adjustboxkey#1{% 189 \@ifstar 190 {\@adjustboxkey@i#1*}% 191 {\@adjustboxkey@i#1\relax}% 192 } 193 \def\@adjustboxkey@i#1#2#3{% 194 \@ifnextchar{[}% 195 {\@adjustboxkey@ii#1#2{#3}}% 196 {\@adjustboxkey@ii#1#2{#3}[\@nnil]}% 197 } 198 \def\@adjustboxkey@ii#1#2#3[#4]#5{% 199 \ifx\@nnil#4\relax 200 \@adjustboxkey@iii#1#2{#3}{}{#5}% 201 \else 202 \@adjustboxkey@iii#1#2{#3}{[#4]}{#5}% 203 \fi 204 } 205 \def\@adjustboxkey@iii#1#2#3#4#5{% 206 #1{#3}{% 207 \ifx*#2\relax 208 \define@key\adjbox@fam{#3}#4{#5}% 209 \else 210 \define@key\adjbox@fam{#3}#4{% 211 \adjbox@Gin@Add{\@Collectbox{#5}}% 212 }% 213 \fi 214 }{}% 215 } 216 \def\define@adjboxkey#1#2{% 217 \define@key\adjbox@fam{#1}{% 218 \adjbox@Gin@Add{#2}% 219 }% 220 } 221 \def\define@adjboxkey@defvalue#1#2#3{% 222 \define@key\adjbox@fam{#1}[{#2}]{% 223 \adjbox@Gin@Add{#3}% 224 }% 225 } 226 \def\define@adjboxkey@novalue#1#2{% 227 \define@key\adjbox@fam{#1}[\@nil]{% 228 \adjbox@novalue{##1}% 229 \adjbox@Gin@Add{#2}% 230 }% 231 } 232 \def\adjbox@novalue#1{% 233 \ifx\@nil#1\else 234 \PackageWarning{adjustbox}{% 235 Key '\XKV@tkey' does not await a value.\MessageBreak 236 Given value will be ignored% 237 }% 238 \fi 239 } 240 \def\adjustbox@newkey#1#2{% 241 \@ifundefined{KV@\adjbox@fam @#1}{#2}{% 242 \PackageError{adjustbox}{Key '#1' already defined}{}% 243 }% 244 } 245 \def\adjustbox@renewkey#1{% 246 \@ifundefined{KV@\adjbox@fam @#1}{% 247 \PackageError{adjustbox}{Key '#1' undefined}{}% 248 }% 249 } 250 \def\adjustbox@providekey#1#2{% 251 \@ifundefined{KV@\adjbox@fam @#1}{#2}{}% 252 } 253 \def\adjbox@let@key#1#2#3{% 254 \expandafter\let\csname KV@#1@#2\expandafter\endcsname\csname KV@#1@#3\endcsname 255 \expandafter\let\csname KV@#1@#2@default\expandafter\endcsname\csname KV@#1@#3@default\endcsname 256 } 257 \define@key{adjbox}{viewport}{% 258 \def\adjustbox@content{% 259 \@trimclip{% 260 \ifGin@clip 261 \expandafter\@clipvpbox 262 \else 263 \expandafter\@viewportbox 264 \fi 265 }{#1}% 266 }% 267 } 268 \define@adjboxkey{Viewport}{\trimbox@s{#1}}% 269 \define@key{adjbox}{trim}{% 270 \def\adjustbox@content{% 271 \@trimclip{% 272 \ifGin@clip 273 \expandafter\@clipbox 274 \else 275 \expandafter\@trimbox 276 \fi 277 }{#1}% 278 }% 279 } 280 \define@adjboxkey{Trim}{\trimbox@{#1}}% 281 \define@adjboxkey{Clip}{\clipbox@{#1}} 282 \define@adjboxkey{Clip*}{\clipbox@s{#1}} 283 \define@adjboxkey{margin}{\marginbox@{#1}} 284 \define@adjboxkey{margin*}{\marginbox@s{#1}} 285 \adjbox@let@key\adjbox@fam{padding}{margin} 286 \adjbox@let@key\adjbox@fam{padding*}{margin*} 287 \define@key\adjbox@fam{scale}{% 288 \@ifnextchar\bgroup{% 289 \adjbox@scale@xy 290 }{% 291 \adjbox@scale@x 292 }#1\@nnil 293 } 294 \def\adjbox@scale@x#1\@nnil{% 295 \adjbox@scale@xy{#1}{#1}\@nnil% 296 } 297 \def\adjbox@scale@xy#1#2\@nnil{% 298 \if@tempswa 299 \adjbox@Gin@add{\Gscale@box{#1}[{#2}]}% 300 \else 301 \def\Gin@req@sizes{% 302 \def\Gin@scalex{#1}\def\Gin@scaley{#2}% 303 \Gin@req@height\Gin@scaley\Gin@nat@height 304 \Gin@req@width\Gin@scalex\Gin@nat@width}% 305 \fi 306 \@tempswatrue 307 } 308 \define@key\adjbox@fam{reflect}[]{% 309 \adjbox@scale@xy{-1}{1}\@nnil 310 } 311 \expandafter\let\csname KV@\adjbox@fam @rotate\endcsname\KV@Gin@angle 312 \def\adjbox@halign#1#2#3{% 313 \@collectbox{\@adjbox@halign{#1}{#2}{#3}}% 314 } 315 \def\@adjbox@halign#1#2#3{% 316 \begingroup 317 \adjsetlength\@tempdima{#1}% 318 \leavevmode\hb@xt@\the\@tempdima{#2\BOXCONTENT#3}% 319 \endgroup 320 } 321 \define@adjboxkey@defvalue{center}{\linewidth}{\adjbox@halign{#1}\hss\hss} 322 \define@adjboxkey@defvalue{left}{\linewidth}{\adjbox@halign{#1}\relax\hss} 323 \define@adjboxkey@defvalue{right}{\linewidth}{\adjbox@halign{#1}\hss\relax} 324 \newcommand\centerbox[1][\linewidth]{% 325 \adjustbox@noindent 326 \adjbox@halign{#1}\hss\hss 327 } 328 \newcommand\leftalignbox[1][\linewidth]{% 329 \adjustbox@noindent 330 \adjbox@halign{#1}\relax\hss 331 } 332 \newcommand\rightalignbox[1][\linewidth]{% 333 \adjustbox@noindent 334 \adjbox@halign{#1}\hss\relax 335 } 336 \define@adjboxkey@defvalue{outer}{\linewidth}{% 337 \outersidebox[{#1}]% 338 } 339 \define@adjboxkey@defvalue{inner}{\linewidth}{% 340 \innersidebox[{#1}]% 341 } 342 \newcommand\outersidebox[1][\linewidth]{% 343 \collectboxcheckenv{outersidebox}% 344 \adjustbox@noindent 345 \adjbox@halign{#1}{% 346 \checkoddpage 347 \ifoddpageoroneside 348 \hss 349 \else 350 \relax 351 \fi 352 }{% 353 \ifoddpageoroneside 354 \relax 355 \else 356 \hss 357 \fi 358 }% 359 } 360 \newcommand\innersidebox[1][\linewidth]{% 361 \collectboxcheckenv{innersidebox}% 362 \adjustbox@noindent 363 \adjbox@halign{#1}{% 364 \checkoddpage 365 \ifoddpageoroneside 366 \relax 367 \else 368 \hss 369 \fi 370 }{% 371 \ifoddpageoroneside 372 \hss 373 \else 374 \relax 375 \fi 376 }% 377 } 378 \IfFileExists{ifoddpage.sty}{% 379 \RequirePackage{ifoddpage}% 380 }{% 381 \renewcommand\outersidebox[1][]{% 382 \PackageError{adjustbox}{% 383 The 'outer' and 'inner' keys as well as the\MessageBreak 384 \string\outersidebox\space and \string\innersidebox\space macros\MessageBreak 385 require the 'ifoddpage' package, which is not\MessageBreak 386 installed}{}% 387 }% 388 \let\innersidebox\outersidebox 389 }% 390 \define@key\adjbox@fam{raise}{% 391 \@ifnextchar\bgroup{% 392 \adjbox@raise 393 }{% 394 \adjbox@raise{#1}{}{}% 395 }#1{}{}{}\@nnil 396 } 397 \def\adjbox@raise#1#2#3#4\@nnil{% 398 \adjbox@Gin@Add{\adjbox@raisebox{#1}{#2}{#3}}% 399 } 400 \def\adjbox@raisebox#1#2#3{% 401 \@collectbox{\adjbox@@raisebox{#1}{#2}{#3}}% 402 } 403 \def\adjbox@@raisebox#1#2#3{% 404 \ifx\@nnil#1\@nnil 405 \setbox\@tempboxa\copy\collectedbox 406 \else 407 \adjsetlength\@tempdima{#1}% 408 \setbox\@tempboxa\hbox{\raise\@tempdima\copy\collectedbox}% 409 \fi 410 \ifx\@nnil#2\@nnil\else 411 \adjsetlength\@tempdima{#2}% 412 \ht\@tempboxa\@tempdima 413 \fi 414 \ifx\@nnil#3\@nnil\else 415 \adjsetlength\@tempdima{#3}% 416 \dp\@tempboxa\@tempdima 417 \fi 418 \leavevmode 419 \box\@tempboxa 420 } 421 \define@key\adjbox@fam{valign}{% 422 \expandafter\adjbox@Gin@Add\expandafter{\csname adjbox@valign@#1\endcsname}% 423 } 424 \def\adjboxvtop{\ht\strutbox} 425 \def\adjboxvcenter{1ex} 426 \def\adjboxvbottom{-\dp\strutbox} 427 \def\adjbox@valign@t{% 428 \adjbox@raisebox{-\height+\adjboxvtop}{}{}% 429 } 430 \def\adjbox@valign@T{% 431 \adjbox@raisebox{-\height}{}{}% 432 } 433 \def\adjbox@valign@M{% 434 \adjbox@raisebox{.5\depth-.5\height}{}{}% 435 } 436 \def\adjbox@valign@m{% 437 \adjbox@raisebox{.5\depth-.5\height+\adjboxvcenter}{}{}% 438 } 439 \def\adjbox@valign@c#1{% 440 \leavevmode 441 \hbox{% 442 $\vcenter{\hbox{#1}}\m@th$% 443 }% 444 } 445 \def\adjbox@valign@b{% 446 \adjbox@raisebox{\depth+\adjboxvbottom}{}{}% 447 } 448 \def\adjbox@valign@B{% 449 \adjbox@raisebox{\depth}{}{}% 450 } 451 \define@adjboxkey{set height}{\adjbox@raisebox{}{#1}{}} 452 \define@adjboxkey{set depth}{\adjbox@raisebox{}{}{#1}} 453 \define@adjboxkey{set vsize}{\adjbox@raisebox{}#1} 454 \define@key\adjbox@fam{vspace}{% 455 \adjbox@vskip#1 {} \@nnil{}% 456 } 457 \define@key\adjbox@fam{vspace*}{% 458 \adjbox@vskip#1 {} \@nnil*% 459 } 460 \def\adjbox@vskip#1 #2 #3\@nnil#4{% 461 \ifx\@nnil#2\@nnil 462 \adjust@addcode{\par\vspace#4{#1}\noindent}{\par\vspace#4{#1}}% 463 \else 464 \adjust@addcode{\par\vspace#4{#1}\noindent}{\par\vspace#4{#2}}% 465 \fi 466 } 467 \define@adjboxkey{min width}{\@minsizebox\height{#1}!} 468 \define@adjboxkey{max width}{\@maxsizebox\height{#1}!} 469 \define@adjboxkey{min height}{\@minsizebox\height!{#1}} 470 \define@adjboxkey{max height}{\@maxsizebox\height!{#1}} 471 \define@adjboxkey{min totalheight}{\@minsizebox\totalheight!{#1}} 472 \define@adjboxkey{max totalheight}{\@maxsizebox\totalheight!{#1}} 473 \def\adjbox@Gin@sizeadd#1#2\@nnil{% 474 \@ifnextchar\bgroup{% 475 \adjbox@Gin@Add{#1#2}% 476 \remove@to@nnil 477 }{% 478 \adjbox@Gin@Add{#1{#2}{#2}}% 479 \remove@to@nnil 480 }#2\@nnil 481 } 482 \define@key\adjbox@fam{min size}{% 483 \adjbox@Gin@sizeadd{\@minsizebox\height}#1\@nnil 484 } 485 \define@key\adjbox@fam{max size}{% 486 \adjbox@Gin@sizeadd{\@maxsizebox\height}#1\@nnil 487 } 488 \define@key\adjbox@fam{min totalsize}{% 489 \adjbox@Gin@sizeadd{\@minsizebox\totalheight}#1\@nnil 490 } 491 \define@key\adjbox@fam{max totalsize}{% 492 \adjbox@Gin@sizeadd{\@maxsizebox\totalheight}#1\@nnil 493 } 494 \define@adjboxkey@defvalue{warn width}{\linewidth}{\@Collectbox{\adjbox@warnwidth{#1}}} 495 \def\adjbox@warnwidth#1{% 496 \@tempdima=#1\relax 497 \advance\@tempdima by -\width 498 \@tempdima=-\@tempdima 499 \ifdim\@tempdima>\hfuzz 500 \typeout{Overfull \string\hbox\space (\the\@tempdima\space too wide) in adjustbox at 501 \ifnum\adjbox@line=\inputlineno 502 line \adjbox@line 503 \else 504 lines \adjbox@line--\the\inputlineno 505 \fi 506 }% 507 \fi 508 \BOXCONTENT 509 } 510 \newcommand*\minsizebox{% 511 \collectboxcheckenv{minsizebox}% 512 \@ifstar{\@minsizebox\totalheight}{\@minsizebox\height}% 513 } 514 \expandafter\newcommand\expandafter*\csname minsizebox*\endcsname{% 515 \@collectboxisenv{minsizebox*}% 516 \@minsizebox\totalheight 517 } 518 \newcommand*\@minsizebox[3]{% 519 \@collectbox{\@minmaxsizebox>#1{#2}{#3}}% 520 } 521 \newcommand*\maxsizebox{% 522 \collectboxcheckenv{maxsizebox}% 523 \@ifstar{\@maxsizebox\totalheight}{\@maxsizebox\height}% 524 } 525 \expandafter\newcommand\expandafter*\csname maxsizebox*\endcsname{% 526 \@collectboxisenv{maxsizebox*}% 527 \@maxsizebox\totalheight 528 } 529 \newcommand*\@maxsizebox[3]{% 530 \@collectbox{\@minmaxsizebox<#1{#2}{#3}}% 531 } 532 \newcommand*\@minmaxsizebox[4]{% 533 \edef\@tempa{#3}% 534 \edef\@tempb{#4}% 535 \ifcase0% 536 \ifx\@tempa\Gin@exclamation 537 \ifx\@tempb\Gin@exclamation 538 \else 539 \ifdim\@tempb#1#2% 540 1% 541 \fi 542 \fi 543 \else 544 \ifx\@tempb\Gin@exclamation 545 \ifdim\@tempa#1\width 546 2% 547 \fi 548 \else 549 \ifdim\@tempa#1\width 550 \ifdim\@tempb#1#2% 551 3% 552 \else 553 2% 554 \fi 555 \else 556 \ifdim\@tempb#1#2% 557 1% 558 \fi 559 \fi 560 \fi 561 \fi 562 \relax% 0 563 \BOXCONTENT 564 \or 565 \adjsetlength\@tempdima\@tempb 566 \Gscale@div\@tempa\@tempdima#2% 567 \Gscale@box\@tempa[\@tempa]\BOXCONTENT 568 \or 569 \adjsetlength\@tempdima\@tempa 570 \Gscale@div\@tempa\@tempdima\width 571 \Gscale@box\@tempa[\@tempa]\BOXCONTENT 572 \or 573 \adjsetlength\@tempdima\@tempa 574 \Gscale@div\@tempa\@tempdima\width 575 \adjsetlength\@tempdima\@tempb 576 \Gscale@div\@tempb\@tempdima#2% 577 \ifdim\@tempa\p@#1\@tempb\p@ 578 \let\@tempb\@tempa 579 \else 580 \let\@tempa\@tempb 581 \fi 582 \Gscale@box\@tempa[\@tempb]\BOXCONTENT 583 \fi 584 } 585 \define@key\adjbox@fam{frame}[{{\fboxrule}}]{% 586 \adjbox@frame{\fboxsep\z@}#1 {} {} \relax\relax\@nnil 587 } 588 \define@key\adjbox@fam{fbox}[{{\fboxrule}}]{% 589 \adjbox@frame{}#1 {} {} {} \relax\relax\@nnil 590 } 591 \def\adjbox@frame#1#2 #3 #4 #5\relax{% 592 \adjbox@Gin@Add{% 593 \@Collectbox{#1\adjbox@@frame{}{#2}{#3}{#4}}% 594 }% 595 \remove@to@nnil 596 } 597 \define@key\adjbox@fam{cframe}{% 598 \adjbox@checkcolor 599 \adjbox@cframe{\fboxsep\z@}#1 {} {} {} \relax\relax\@nnil 600 } 601 \define@key\adjbox@fam{cfbox}{% 602 \adjbox@checkcolor 603 \adjbox@cframe{}#1 {} {} {} \relax\relax\@nnil 604 } 605 \def\adjbox@cframe#1#2 #3 #4 #5 #6\relax{% 606 \adjbox@Gin@Add{% 607 \@Collectbox{#1\adjbox@@frame{\color{#2}}{#3}{#4}{#5}}% 608 }% 609 \remove@to@nnil 610 } 611 \def\adjbox@checkcolor{% 612 \ifcase0% 613 \expandafter\ifx\csname ver@xcolor.sty\endcsname\relax 614 \expandafter\ifx\csname ver@color.sty\endcsname\relax 615 \expandafter\ifx\csname ver@xxcolor.sty\endcsname\relax 1\fi\fi\fi 616 \relax 617 \global\let\adjbox@checkcolor\relax 618 \else 619 \PackageError{adjustbox}{Using a macro, environment or key with color\MessageBreak 620 requires a color package to be loaded manually.\MessageBreak 621 Recommended is 'xcolor' but 'color' is ok, too}{}. 622 \fi 623 } 624 \def\adjbox@@frame#1#2#3#4{% 625 \ifx\@nnil#2\@nnil\else 626 \adjsetlength\fboxrule{#2}% 627 \fi 628 \ifx\@nnil#3\@nnil\else 629 \adjsetlength\fboxsep{#3}% 630 \fi 631 \adjsetlength\tc@llx{\fboxrule + \fboxsep}% 632 \@marginbox\collectedbox\tc@llx\tc@llx\tc@llx\tc@llx 633 \ifx\@nnil#4\@nnil\else 634 \setbox\collectedbox 635 \fi 636 \hbox\bgroup\color@setgroup 637 \BOXCONTENT 638 \hskip-\width 639 #1% 640 \adjbox@boxframe\width\height\depth 641 \color@endgroup\egroup 642 \ifx\@nnil#4\@nnil\else 643 \adjsetlength\tc@llx{#4}% 644 \@marginbox\collectedbox\tc@llx\tc@llx\tc@llx\tc@llx 645 \BOXCONTENT 646 \fi 647 } 648 \let\adjbox@boxframe\boxframe 649 \providecommand\adjbox@boxframe[3]{% 650 \hbox{% 651 \dimen@ #2% 652 \advance \dimen@ #3\relax 653 \lower #3\vbox {% 654 \hrule \@height \fboxrule 655 \@tempdima -0.5\fboxrule 656 \ifodd\fboxrule 657 \advance \@tempdima \m@ne sp 658 \fi 659 \kern \@tempdima 660 \hbox {% 661 \advance \dimen@ -\fboxrule 662 \vrule \@width \fboxrule \@height \dimen@ \@depth \z@ 663 \@tempdima #1% 664 \advance \@tempdima -\tw@ \fboxrule 665 \kern \@tempdima 666 \vrule \@width \fboxrule \@height \dimen@ \@depth \z@ 667 }% 668 \kern -0.5\fboxrule 669 \hrule \@height \fboxrule 670 }% 671 }% 672 } 673 \define@key\adjbox@fam{dpi}{% 674 \adjsetlength\pdfpxdimen{1in/(#1)}% 675 } 676 \define@key\adjbox@fam{pxdim}{% 677 \adjsetlength\pdfpxdimen{#1}% 678 } 679 \define@key\adjbox@fam{execute}{% 680 #1% 681 } 682 \define@key\adjbox@fam{@debug}[]{% 683 \showthe\toks@ 684 } 685 \define@key{ADJBOX}{Execute}{% 686 #1% 687 } 688 \define@key{adjbox}{Addcode}{% 689 \adjust@@addcode#1{}\@nnil% 690 } 691 \define@key{adjbox}{addcode}{% 692 \Gin@esetsize 693 \@tempswatrue 694 \adjust@@addcode#1{}\@nnil% 695 } 696 \long\def\adjust@@addcode#1#2#3\@nnil{% 697 \ifx\@nnil#3\@nnil 698 \adjust@addcode{#1}{#2}% 699 \else 700 \PackageError{adjustbox}{Incorrect input for key 'addcode={<code before>}{<code afterwards>}'!}% 701 \fi 702 } 703 \define@key{adjbox}{precode}{% 704 \Gin@esetsize 705 \@tempswatrue 706 \adjust@addcode{#1}{}% 707 } 708 \define@key{adjbox}{Precode}{% 709 \adjust@addcode{#1}{}% 710 } 711 \define@key{adjbox}{appcode}{% 712 \toks@\expandafter{\the\toks@#1}% 713 } 714 \long\def\adjust@addcode#1#2{% 715 \def\@tempa{#1}% 716 \toks@\expandafter\expandafter\expandafter{\expandafter\@tempa\expandafter{\the\toks@}#2}% 717 }% 718 \define@key\adjbox@fam{env}{% 719 \@ifnextchar\bgroup{% 720 \adjbox@addenv 721 }{% 722 \adjbox@addenv{#1}\@nnil% 723 \remove@to@nnil 724 }#1\@nnil 725 } 726 \def\adjbox@addenv#1#2\@nnil{% 727 \def\@tempa{\begin{#1}#2}% 728 \toks@\expandafter\expandafter\expandafter{\expandafter\@tempa\the\toks@\end{#1}}% 729 }% 730 \define@key\adjbox@fam{bgcolor}{% 731 \adjbox@checkcolor 732 \@ifnextchar\bgroup{% 733 \adjbox@bgcolor 734 }{% 735 \adjbox@bgcolor{}{#1}% 736 }#1\@nnil 737 } 738 \def\adjbox@bgcolor#1#2#3\@nnil{% 739 \ifx\@nnil#1\@nnil 740 \adjbox@Gin@add{\@Collectbox{\adjbox@@bgcolor{\color{#2}}}}% 741 \else 742 \adjbox@Gin@add{\@Collectbox{\adjbox@@bgcolor{\color[#1]{#2}}}}% 743 \fi 744 } 745 \define@key\adjbox@fam{bgcolor*}{% 746 \adjbox@checkcolor 747 \adjbox@Gin@add{\@Collectbox{\adjbox@@bgcolor{#1}}}% 748 } 749 \def\adjbox@@bgcolor#1{% 750 \mbox{% 751 \hbox{% 752 #1% 753 \vrule\@width\width\@height\height\@depth\depth% 754 }% 755 \hskip-\width 756 \BOXCONTENT 757 }% 758 }% 759 \newcommand*\bgimagebox[2][]{% 760 \collectboxcheckenv{bgimagebox}% 761 \@collectbox{\@bgimagebox{#1}{#2}}% 762 } 763 \def\@bgimagebox#1#2{% 764 \mbox{% 765 \lower\depth\hbox{% 766 \edef\@tempa{\noexpand\adjustimage 767 {#1,width=\the\width,totalheight=\the\totalheight}% 768 {#2}% 769 }% 770 \@tempa 771 }% 772 \hskip-\width% 773 \BOXCONTENT 774 }% 775 } 776 \define@key{adjbox}{bgimage}{% 777 \@ifnextchar\bgroup{% 778 \adjbox@bgimage 779 }{% 780 \adjbox@bgimage{}{#1}% 781 }#1\@nnil 782 } 783 \def\adjbox@bgimage#1#2#3\@nnil{% 784 \adjbox@Gin@add{\@Collectbox{\@bgimagebox{#1}{#2}}}% 785 } 786 \define@key\adjbox@fam{lap}{% 787 \@ifnextchar\bgroup{% 788 \adjbox@lapbox 789 }{% 790 \adjbox@lapbox{#1}{}% 791 }#1{}{}\@nnil 792 } 793 \def\adjbox@lapbox#1#2#3\@nnil{% 794 \ifx\@nnil#2\@nnil 795 \adjbox@Gin@Add{\lapbox{#1}}% 796 \else 797 \adjbox@Gin@Add{\lapbox[{#1}]{#2}}% 798 \fi 799 } 800 \define@key\adjbox@fam{rlap}[]{% 801 \adjbox@Gin@Add{\lapbox{\width}}% 802 } 803 \define@key\adjbox@fam{llap}[]{% 804 \adjbox@Gin@Add{\lapbox{-\width}}% 805 } 806 \newcommand*\lapbox[2][\width-\@tempdimb]{% 807 \collectboxcheckenv{lapbox}% 808 \@collectbox{\@lapbox{#1}{#2}}% 809 } 810 \def\@lapbox#1#2{% 811 \adjsetlength\@tempdima{#2}% 812 \ifdim\@tempdima<\z@ 813 \@tempdimb=-\@tempdima 814 \else 815 \@tempdimb=\@tempdima 816 \fi 817 \adjsetlength\@tempdimc{#1}% 818 \ifdim\@tempdimc<\z@ 819 \@tempdimc=\z@ 820 \fi 821 \leavevmode 822 \ifdim\@tempdima<\z@ 823 \hb@xt@\@tempdimc{\hss\hb@xt@\@tempdimb{\usebox\collectedbox\hss}\hskip\@tempdimc}% 824 \else 825 \hb@xt@\@tempdimc{\hskip\@tempdimc\hb@xt@\@tempdimb{\hss\usebox\collectedbox}\hss}% 826 \fi 827 } 828 \define@key{ADJBOX}{minipage}{% 829 \adjbox@page{minipage}{#1}% 830 } 831 \define@key{ADJBOX}{varwidth}{% 832 \adjbox@page{varwidth}{#1}% 833 } 834 \def\adjbox@page#1#2{% 835 \@ifnextchar[{% 836 \adjbox@@page{#1}% 837 }{% 838 \@ifnextchar\bgroup{% 839 \adjbox@@page{#1}% 840 }{% 841 \adjbox@@page{#1}{{#2}}\@nnil% 842 \remove@to@nnil 843 }% 844 }#2\@nnil 845 } 846 \def\adjbox@@page#1#2\@nnil{% 847 \def\adjbox@collectbox##1{\collectbox@{\adjbox@set\begin{#1}#2\adjbox@reset}{##1}{\end{#1}}}% 848 } 849 \def\adjbox@set{% 850 \let\adjbox@origsetlength\setlength 851 \def\setlength{\adjsetlength}% 852 } 853 \def\adjbox@reset{% 854 \let\setlength\adjbox@origsetlength 855 } 856 \newcommand*\stackbox[1][c]{% 857 \collectboxcheckenv{stackbox}% 858 \@ifnextchar[%] 859 {\@stackbox{#1}}% 860 {\@@stackbox{#1}{b}[]}% 861 } 862 \def\@stackbox#1[#2]{% 863 \@testopt{\@@stackbox{#1}{#2}}{}% 864 } 865 \def\@@stackbox#1#2[#3]{% 866 \collectbox@ 867 {\begin{varwidth}[#2]{\linewidth}\csname adjbox@halign@#1\endcsname#3} 868 \BOXCONTENT 869 {\end{varwidth}}% 870 } 871 \def\adjbox@halign@c{\centering} 872 \def\adjbox@halign@l{\raggedright} 873 \def\adjbox@halign@r{\raggedleft} 874 \def\adjbox@halign@j{\let\\\newline} 875 \define@key{ADJBOX}{stack}[{}{}{}]{% 876 \adjbox@stack#1{}{}{}\@nnil 877 } 878 \def\adjbox@stack#1#2#3#4\@nnil{% 879 \ifx\@nnil#1\@nnil 880 \adjbox@@stack{c}{b}{}% 881 \else 882 \ifx\@nnil#2\@nnil 883 \adjbox@@stack{#1}{b}{}% 884 \else 885 \adjbox@@stack{#1}{#2}{#3}% 886 \fi\fi 887 } 888 \def\adjbox@@stack#1#2#3{% 889 \def\adjbox@collectbox##1{% 890 \collectbox@{% 891 \begin{varwidth}[#2]{\linewidth}% 892 \csname adjbox@halign@#1\endcsname#3% 893 }{##1}{\end{varwidth}}% 894 }% 895 } 896 \IfFileExists{varwidth.sty} 897 {\RequirePackage{varwidth}}{% 898 \define@key{ADJBOX}{varwidth}{% 899 \PackageError{adjustbox}{The 'varwidth' key requires the 'varwidth' package, which is not installed}{}% 900 } 901 \define@key{ADJBOX}{stack}{% 902 \PackageError{adjustbox}{The 'stack' key requires the 'varwidth' package, which is not installed}{}% 903 } 904 }% 905 \define@key{ADJBOX}{tabular}{% 906 \@ifnextchar[{% 907 \adjbox@tabular{tabular}% 908 }{% 909 \adjbox@tabular{tabular}{{#1}}\@nnil% 910 \remove@to@nnil 911 }#1\@nnil 912 } 913 \def\adjbox@tabular#1#2\@nnil{% 914 \ifcollectboxenv 915 \adjbox@innerenv{#1}{#2}\@nnil 916 \else 917 \def\adjbox@collectbox##1{\collectbox@tab{#1}{#2}{}{##1}{}}% 918 \fi 919 } 920 \define@key{ADJBOX}{tabular*}{% 921 \adjbox@tabular{tabular*}#1\@nnil 922 } 923 \define@key{ADJBOX}{array}{% 924 \@ifnextchar[{% 925 \adjbox@array% 926 }{% 927 \adjbox@array{{#1}}\@nnil% 928 \remove@to@nnil 929 }#1\@nnil 930 } 931 \def\adjbox@array#1\@nnil{% 932 \ifcollectboxenv 933 \adjbox@innercode{\(\begin{array}#1}{\end{array}\)}% 934 \else 935 \def\adjbox@collectbox##1{\collectbox@tab{array}{#1}{\(}{##1}{\)}}% 936 \fi 937 } 938 \define@key{ADJBOX}{innerenv}{% 939 \@ifnextchar\bgroup{% 940 \adjbox@@innerenv 941 }{% 942 \adjbox@innerenv{#1}\@nnil% 943 \remove@to@nnil 944 }#1\@nnil 945 } 946 \def\adjbox@innerenv#1#2\@nnil{% 947 \def\adjbox@collectbox##1{\collectbox@{\begin{#1}#2}{##1}{\end{#1}}}% 948 }% 949 \def\adjbox@@innerenv#1{% 950 \adjbox@@@innerenv{#1}{}% 951 }% 952 \def\adjbox@@@innerenv#1#2\@nnil{% 953 \expandafter\adjbox@@@@innerenv\expandafter{\@gobble#2}{#1}% 954 }% 955 \def\adjbox@@@@innerenv#1#2{% 956 \adjbox@innerenv{#2}{#1}\@nnil 957 }% 958 \define@key{ADJBOX}{innercode}{% 959 \adjbox@innercode#1{}{}% 960 } 961 \def\adjbox@innercode#1#2{% 962 \def\adjbox@collectbox##1{\collectbox@{#1}{##1}{#2}}% 963 }% 964 \define@key\adjbox@fam{label}{% 965 \def\adjbox@label{\label{#1}}% 966 } 967 \let\adjbox@label\@empty 968 \chardef\adjbox@caption@pos=11 969 \define@key\adjbox@fam{captionabove}{% 970 \chardef\adjbox@caption@pos=1 971 \csname KV@\adjbox@fam @caption\endcsname{#1}% 972 } 973 \define@key\adjbox@fam{captionbelow}{% 974 \chardef\adjbox@caption@pos=0 975 \csname KV@\adjbox@fam @caption\endcsname{#1}% 976 } 977 \define@key\adjbox@fam{caption}{% 978 \@ifnextchar{[}{% 979 \adjbox@def@caption 980 }{% 981 \adjbox@def@@caption 982 }#1\@nnil 983 } 984 \def\adjbox@def@@caption#1\@nnil{% 985 \def\adjbox@caption{\caption{#1}}% 986 } 987 \def\adjbox@def@caption[#1]#2\@nnil{% 988 \def\adjbox@caption{\caption[#1]{#2}}% 989 } 990 \let\adjbox@caption\@empty 991 \define@key\adjbox@fam{figure}[]{% 992 \let\adjustbox@noindent\relax 993 \ifx\@nnil#1\@nnil 994 \adjbox@addfloat{figure}{\begin{figure}}{}{\end{figure}}% 995 \else 996 \adjbox@addfloat{figure}{\begin{figure}}{[{#1}]}{\end{figure}}% 997 \fi 998 } 999 \define@key\adjbox@fam{float}{% 1000 \let\adjustbox@noindent\relax 1001 \@ifnextchar\bgroup{% 1002 \adjbox@float 1003 }{% 1004 \adjbox@float{#1}{}\@nnil 1005 \remove@to@nnil 1006 }#1\@nnil 1007 } 1008 \def\adjbox@float#1#2\@nnil{% 1009 \adjbox@addfloat{#1}{\begin{#1}}{#2}{\end{#1}}% 1010 } 1011 \define@key\adjbox@fam{nofloat}[figure]{% 1012 \adjbox@addfloat{#1}{\adjnofloat}{{#1}}{\endadjnofloat}% 1013 } 1014 \def\adjbox@caption@table@pos{1} 1015 \def\adjbox@addfloat#1#2#3#4{% 1016 \ifnum\adjbox@caption@pos>10 1017 \chardef\adjbox@caption@pos=0\csname adjbox@caption@#1@pos\endcsname\relax 1018 \fi 1019 \ifcase\adjbox@caption@pos 1020 \def\@tempa{\adjust@addcode{#2#3}}% 1021 \expandafter\expandafter\expandafter\@tempa 1022 \expandafter\expandafter\expandafter{\expandafter\adjbox@caption\adjbox@label#4}% 1023 \else 1024 \def\@tempa##1{\adjust@addcode{#2#3\adjbox@captionabove##1}}% 1025 \expandafter\expandafter\expandafter\@tempa 1026 \expandafter\expandafter\expandafter 1027 {\expandafter\adjbox@caption\adjbox@label}{#4}% 1028 \fi 1029 } 1030 \@ifpackageloaded{caption}{% 1031 \let\adjbox@captionabove\relax 1032 }{% 1033 \def\adjbox@captionabove{% 1034 \begingroup 1035 \edef\@tempa{\endgroup 1036 \abovecaptionskip=\the\belowcaptionskip\relax 1037 \belowcaptionskip=\the\abovecaptionskip\relax 1038 }% 1039 \@tempa 1040 }% 1041 \AtBeginDocument{% 1042 \@ifpackageloaded{caption}{% 1043 \global\let\adjbox@captionabove\relax 1044 }{}% 1045 }% 1046 } 1047 \newenvironment{adjnofloat}[1]{% 1048 \trivlist 1049 \def\@captype{#1}% 1050 \parindent\z@ 1051 \item\relax 1052 }{% 1053 \endtrivlist 1054 } 1055 \define@key\adjbox@fam{phantom}[]{% 1056 \expandafter\ifx\csname #1phantom\endcsname\relax 1057 \adjust@addcode{\phantom}{}% 1058 \else 1059 \expandafter\adjust@addcode\expandafter{\csname #1phantom\endcsname}{}% 1060 \fi 1061 } 1062 \newcommand*\phantombox[3]{% 1063 \begingroup 1064 \adjsetlength\@tempdima{#1}% 1065 \adjsetlength\@tempdimb{#2}% 1066 \adjsetlength\@tempdimc{#3}% 1067 \setbox\collectedbox\hbox{}% 1068 \wd\collectedbox\@tempdima 1069 \ht\collectedbox\@tempdimb 1070 \dp\collectedbox\@tempdimc 1071 \leavevmode 1072 \box\collectedbox 1073 \endgroup 1074 } 1075 \define@key\adjbox@fam{gobble}[\@nil]{% 1076 \adjbox@novalue{#1}% 1077 \let\adjustbox@noindent\relax 1078 \adjbox@Gin@Add{\@Collectbox{}}% 1079 } 1080 \adjbox@let@key\adjbox@fam{discard}{gobble}% 1081 \define@adjboxkey{content}{\@Collectbox{#1}}% 1082 \define@adjboxkey{gstore}{\global\@collectboxto{#1}{\BOXCONTENT}} 1083 \define@key\adjbox@fam{gstore*}{% 1084 \let\adjustbox@noindent\relax 1085 \adjbox@Gin@Add{\global\sbox{#1}}% 1086 } 1087 \define@key{adjbox}{gstore width}{% 1088 \adjbox@Gin@Add{\@Collectbox{\global#1=\width\BOXCONTENT}}% 1089 } 1090 \define@key{adjbox}{gstore depth}{% 1091 \adjbox@Gin@Add{\@Collectbox{\global#1=\depth\BOXCONTENT}}% 1092 } 1093 \define@key{adjbox}{gstore height}{% 1094 \adjbox@Gin@Add{\@Collectbox{\global#1=\height\BOXCONTENT}}% 1095 } 1096 \define@key{adjbox}{gstore totalheight}{% 1097 \adjbox@Gin@Add{\@Collectbox{\global#1=\totalheight\BOXCONTENT}}% 1098 } 1099 \define@key{adjbox}{gstore sizes}{% 1100 \adjbox@Gin@Add{\@Collectbox{\adjbox@gstore@sizes#1\relax\relax\relax\relax\@nnil\BOXCONTENT}}% 1101 } 1102 \def\adjbox@gstore@sizes#1#2#3#4#5\@nnil{% 1103 \ifx\relax#1\relax\else 1104 \global#1=\width 1105 \fi 1106 \ifx\relax#2\relax\else 1107 \global#2=\height 1108 \fi 1109 \ifx\relax#3\relax\else 1110 \global#3=\depth 1111 \fi 1112 \ifx\relax#4\relax\else 1113 \global#4=\totalheight 1114 \fi 1115 } 1116 %%\RequirePackage{storebox} 1117 \newcommand\splitbox[2]{% 1118 \collectboxcheckenv{splitbox}% 1119 \@collectbox{\@splitbox{#1}{#2}}% 1120 } 1121 \define@adjboxkey{split}{\@Collectbox{\@splitbox#1}} 1122 \def\@splitbox#1#2{% 1123 \ifstorebox 1124 \storebox\splittedbox{\BOXCONTENT}% 1125 \setbox\collectedbox\hbox{\usestorebox\splittedbox}% 1126 \fi 1127 \xdef\@tempa{#1}% 1128 \xdef\@tempb{#2}% 1129 \ifx\@tempa\Gin@exclamation 1130 \@tempdima\maxdimen 1131 \else 1132 \adjsetlength\@tempdima\@tempa 1133 \fi 1134 \ifx\@tempb\Gin@exclamation 1135 \Gin@nat@height\maxdimen 1136 \else 1137 \adjsetlength\Gin@nat@height\@tempb 1138 \fi 1139 \ifdim\@tempdima>\width 1140 \@tempdima\width 1141 \fi 1142 \ifdim\Gin@nat@height>\totalheight 1143 \Gin@nat@height\totalheight 1144 \fi 1145 \tc@llx\z@ 1146 \tc@lly\totalheight 1147 \tc@urx\width 1148 \tc@ury\z@ 1149 \advance\tc@lly-\Gin@nat@height 1150 \@@splitbox 1151 } 1152 \def\@@splitbox{% 1153 \advance\tc@urx-\@tempdima 1154 \@@@splitbox 1155 \ifdim\tc@urx>\z@ 1156 \advance\tc@llx+\@tempdima 1157 \expandafter\@@splitbox 1158 \else 1159 \ifdim\tc@lly<\splitbox@epsilon 1160 \splitboxlastnewline 1161 \else 1162 \splitboxnewline 1163 \tc@llx\z@ 1164 \tc@urx\width 1165 \advance\tc@lly-\Gin@nat@height 1166 \advance\tc@ury+\Gin@nat@height 1167 \expandafter\expandafter 1168 \expandafter\@@splitbox 1169 \fi 1170 \fi 1171 } 1172 \def\@@@splitbox{% 1173 \begingroup 1174 \setbox\collectedbox=\copy\collectedbox 1175 \@clipbox\collectedbox\tc@llx\tc@lly\tc@urx\tc@ury 1176 \splitboxcmd{\usebox\collectedbox}% 1177 \endgroup 1178 } 1179 \def\@@@splitbox{% 1180 \begingroup 1181 \setbox\collectedbox=\copy\collectedbox 1182 \@clipbox\collectedbox\tc@llx\tc@lly\tc@urx\tc@ury 1183 \splitboxcmd{\usebox\collectedbox}% 1184 \endgroup 1185 } 1186 \let\splitboxcmd\empty 1187 \newcommand\splitboxnewline{\\} 1188 \newcommand\splitboxlastnewline{\splitboxnewline} 1189 \def\splitbox@epsilon{100sp} 1190 \newcommand\pagebreakbox{% 1191 \par\noindent 1192 \collectboxcheckenv{pagebreakbox}% 1193 \@collectbox{\@pagebreakbox}% 1194 } 1195 \define@key\adjbox@fam{pagebreak}[]{% 1196 \adjbox@Gin@Add{\@Collectbox{\@pagebreakbox}}% 1197 } 1198 \def\@pagebreakbox{% 1199 \sbox\collectedbox{\raise\dp\collectedbox\hbox{\BOXCONTENT}}% 1200 \ifstorebox 1201 \storebox\splittedbox{\BOXCONTENT}% 1202 \setbox\collectedbox\hbox{\usestorebox\splittedbox}% 1203 \fi 1204 \adjsetlength\tc@lly 1205 {\totalheight-\pagegoal+\pagetotal+\pagebreakboxoffset}% 1206 \ifdim\tc@lly>\z@ 1207 \begingroup 1208 \setbox\collectedbox=\copy\collectedbox 1209 \@clipbox\collectedbox\z@\tc@lly\z@\z@ 1210 \BOXCONTENT 1211 \endgroup 1212 \par\noindent 1213 \adjsetlength\tc@ury{\totalheight-\tc@lly}% 1214 \ifdim\tc@lly>\textheight 1215 \loop 1216 \advance\tc@lly-\textheight 1217 \begingroup 1218 \setbox\collectedbox=\copy\collectedbox 1219 \@clipbox\collectedbox\z@\tc@lly\z@\tc@ury 1220 \BOXCONTENT 1221 \endgroup 1222 \advance\tc@ury\textheight 1223 \par\noindent 1224 \ifdim\tc@lly>\textheight 1225 \repeat 1226 \@clipbox\collectedbox\z@\z@\z@\tc@ury 1227 \BOXCONTENT 1228 \else 1229 \@clipbox\collectedbox\z@\z@\z@\tc@ury 1230 \par\noindent 1231 \BOXCONTENT 1232 \fi 1233 \else 1234 \BOXCONTENT% 1235 \fi 1236 \par 1237 } 1238 \newcommand*\pagebreakboxoffset{\ht\strutbox} 1239 \endinput 1240 %% 1241 %% End of file `adjustbox.sty'.