% \iffalse meta-comment % % File: pdflscape.dtx % Version: 2022-10-28 v0.13 % Info: Display of landscape pages in PDF % % Copyright (C) % 2001, 2004, 2006-2008 Heiko Oberdiek % 2016-2022 Oberdiek Package Support Group % https://github.com/ho-tex/pdflscape/issues % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3c of this license or (at your option) any later % version. This version of this license is in % https://www.latex-project.org/lppl/lppl-1-3c.txt % and the latest version of this license is in % https://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of % LaTeX version 2005/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainers of this work are % Heiko Oberdiek and the Oberdiek Package Support Group % https://github.com/ho-tex/pdflscape/issues % % This work consists of the main source file pdflscape.dtx % and the derived files % pdflscape.sty, pdflscape-nometadata, pdflscape.pdf, % pdflscape.ins, pdflscape.drv, % % Distribution: % CTAN:macros/latex/contrib/pdflscape/pdflscape.dtx % CTAN:macros/latex/contrib/pdflscape/pdflscape.pdf % % Unpacking: % (a) If pdflscape.ins is present: % tex pdflscape.ins % (b) Without pdflscape.ins: % tex pdflscape.dtx % (c) If you insist on using LaTeX % latex \let\install=y\input{pdflscape.dtx} % (quote the arguments according to the demands of your shell) % % Documentation: % (a) If pdflscape.drv is present: % latex pdflscape.drv % (b) Without pdflscape.drv: % latex pdflscape.dtx; ... % The class ltxdoc loads the configuration file ltxdoc.cfg % if available. Here you can specify further options, e.g. % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % % Programm calls to get the documentation (example): % pdflatex pdflscape.dtx % makeindex -s gind.ist pdflscape.idx % pdflatex pdflscape.dtx % makeindex -s gind.ist pdflscape.idx % pdflatex pdflscape.dtx % % Installation: % TDS:tex/latex/pdflscape/pdflscape.sty % TDS:tex/latex/pdflscape/pdflscape-nometadata.sty % TDS:doc/latex/pdflscape/pdflscape.pdf % TDS:source/latex/pdflscape/pdflscape.dtx % %<*ignore> \begingroup \catcode123=1 % \catcode125=2 % \def\x{LaTeX2e}% \expandafter\endgroup \ifcase 0\ifx\install y1\fi\expandafter \ifx\csname processbatchFile\endcsname\relax\else1\fi \ifx\fmtname\x\else 1\fi\relax \else\csname fi\endcsname % %<*install> \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} \Msg{* Package: pdflscape 2022-10-28 v0.13 Display of landscape pages in PDF (HO)} \Msg{************************************************************************} \keepsilent \askforoverwritefalse \let\MetaPrefix\relax \preamble This is a generated file. Project: pdflscape Version: 2022-10-28 v0.13 Copyright (C) 2001, 2004, 2006-2008 Heiko Oberdiek 2016-2022 Oberdiek Package Support Group This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3c of this license or (at your option) any later version. This version of this license is in https://www.latex-project.org/lppl/lppl-1-3c.txt and the latest version of this license is in https://www.latex-project.org/lppl.txt and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. This work has the LPPL maintenance status "maintained". The Current Maintainers of this work are Heiko Oberdiek and the Oberdiek Package Support Group https://github.com/ho-tex/pdflscape/issues This work consists of the main source file pdflscape.dtx and the derived files pdflscape.sty, pdflscape-nometadata.sty, pdflscape.pdf, pdflscape.ins, pdflscape.drv, \endpreamble \let\MetaPrefix\DoubleperCent \generate{% \file{pdflscape.ins}{\from{pdflscape.dtx}{install}}% \file{pdflscape.drv}{\from{pdflscape.dtx}{driver}}% \usedir{tex/latex/pdflscape}% \file{pdflscape-nometadata.sty}{\from{pdflscape.dtx}{package}}% \file{pdflscape.sty}{\from{pdflscape.dtx}{package-new}}% } \catcode32=13\relax% active space \let =\space% \Msg{************************************************************************} \Msg{*} \Msg{* To finish the installation you have to move the following} \Msg{* file into a directory searched by TeX:} \Msg{*} \Msg{* pdflscape.sty} \Msg{* pdflscape-nometadata.sty} \Msg{*} \Msg{* To produce the documentation run the file `pdflscape.drv'} \Msg{* through LaTeX.} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{************************************************************************} \endbatchfile % %<*ignore> \fi % %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{pdflscape.drv}% [2022-10-28 v0.13 Display of landscape pages in PDF (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2011/11/22] \usepackage{graphics} \begin{document} \DocInput{pdflscape.dtx}% \end{document} % % \fi % % % % \GetFileInfo{pdflscape.drv} % % \title{The \xpackage{pdflscape} package} % \date{2022-10-28 v0.13} % \author{Heiko Oberdiek\thanks % {Please report any issues at \url{https://github.com/ho-tex/pdflscape/issues}}} % % \maketitle % % \begin{abstract} % Package \xpackage{pdflscape} adds PDF support to the % environment \texttt{landscape} of package \xpackage{lscape} % by setting the PDF page attribute \texttt{/Rotate}. % \end{abstract} % % \tableofcontents % % \section{Documentation} % % \subsection{Supported drivers} % % If the PDF management is loaded by the use of \verb+\DocumentMetadata{}+ at % the beginning of the document, the engines and backends supported by \texttt{l3backend} % can be used. Driver options are passed to graphics and are typically only needed if % \LaTeX{} is used with \texttt{dvipdfmx}. % % Without the PDF management the following driver options can be used (many are % simply aliases to each other): % % \begin{itemize} % \item \xoption{pdftex},\xoption{luatex} % \item \xoption{dvips}, \xoption{dvipsone}, % \xoption{pctexps} % (and other drivers that provide a non-empty \cs{Gin@PS@raw}) % \item \xoption{dvipdfm}, \xoption{dvipdfmx}, \xoption{xetex} % \end{itemize} % % \subsection{Caveat} % % Depending on the configuration Ghostscript % adds a guessed rotation entry by its own. % This can lead to two |/Rotate| entries per page. % To prevent this behaviour set the parameter % |AutoRotatePages| to |/None|, eg: % \begin{quote} % |ps2pdf -dAutoRotatePages=/None| % \end{quote} % % \subsection{Requirements} % % \begin{itemize} % \item The package \xpackage{lscape}. % \item The package \xpackage{atbegshi} for all drivers % except \xoption{pdftex},\xoption{luatex}. % \end{itemize} % % \subsection{Usage} % % Load this package instead of or after package \xpackage{lscape}: % \begin{quote} % |\usepackage{pdflscape}|\\ % |\begin{landscape}|\dots|\end{landscape}| % \end{quote} % % \StopEventually{ % } % % \section{Implementation} % \subsection{New version using the methods of the PDF management} % Identification % \begin{macrocode} %<*package-new> \NeedsTeXFormat{LaTeX2e}[2020/10/01] \ProvidesExplPackage{pdflscape}{2022-10-27}{0.13} {Display of landscape pages in PDF}% % \end{macrocode} % Testing if the pdfmanagement is used % \begin{macrocode} \@ifl@t@r\fmtversion{2022-06-01} { \IfDocumentMetadataTF {}{\RequirePackageWithOptions{pdflscape-nometadata}} \IfDocumentMetadataTF {}{\endinput} } {\RequirePackageWithOptions{pdflscape-nometadata}} % \end{macrocode} % Load lscape, but don't pass the \texttt{pdftex} option % as it would use \cs{pdfpageattr} which is incompatible with the pdf management. % \begin{macrocode} \DeclareOption*{\PassOptionsToPackage\CurrentOption{graphics}} \ProcessOptions \RequirePackage{lscape} % \end{macrocode} % this always turns in the same direction as the original code % of pdflscape does. left and right would need % \verb+\pdfmanagement_add:nnn{ThisPage}{Rotate}{..}+ % on every page (e.g. in a shipout hook) and some option to control the wanted % orientation. % \begin{macrocode} \tl_new:N\g__pdflscape_saverotate_tl \hook_gput_code:nnn {env/landscape/begin}{pdflscape} { \pdfmanagement_get:nnN {Page}{Rotate}\l_tmpa_tl \tl_gset_eq:NN\g__pdflscape_saverotate_tl\l_tmpa_tl \clearpage \pdfmanagement_add:nnn{Page}{Rotate}{90} } \hook_gput_code:nnn {env/landscape/after}{pdflscape} { \quark_if_no_value:NTF\g__pdflscape_saverotate_tl {\pdfmanagement_remove:nn{Page}{Rotate}} {\pdfmanagement_add:nnx{Page}{Rotate}{\g__pdflscape_saverotate_tl}} } % % \end{macrocode} % % \subsection{Old version without the PDF management} % % \begin{macrocode} %<*package> % \end{macrocode} % Package identification. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{pdflscape-nometadata}% [2022-10-28 v0.13 Display of landscape pages in PDF (HO)] % \end{macrocode} % % \subsection{Driver options} % % \begin{macrocode} \let\PLS@option\@empty \let\PLS@driver\@empty \def\PLS@temp#1#2{% \DeclareOption{#1}{% \let\PLS@option\CurrentOption \def\PLS@driver{#2}% }% } \PLS@temp{pdftex}{pdftex} \PLS@temp{luatex}{pdftex} \PLS@temp{dvips}{dvips} \PLS@temp{dvipsone}{dvips} \PLS@temp{pctexps}{dvips} \PLS@temp{dvipdfm}{dvipdfm} \PLS@temp{dvipdfmx}{dvipdfm} \PLS@temp{xetex}{dvipdfm} \let\PLS@temp\@empty \DeclareOption*{% \ifx\PLS@temp\@empty \let\PLS@temp\CurrentOption \else \edef\PLS@temp{\PLS@temp,\CurrentOption}% \fi } \ProcessOptions* \ifx\PLS@option\@empty \else \expandafter\PassOptionsToPackage\expandafter{\PLS@option}{lscape}% \fi \ifx\PLS@temp\@empty \else \expandafter\PassOptionsToPackage\expandafter{\PLS@temp}{lscape}% \fi \RequirePackage{iftex}[2019/11/07]% \RequirePackage{lscape} % \end{macrocode} % % \subsection{Autodetection of driver} % % \subsubsection{Driver \xoption{pdftex}} % % \begin{macrocode} \def\PLS@temp{pdftex} \ifpdf \ifx\PLS@driver\@empty \let\PLS@driver\PLS@temp \PackageInfo{pdflscape}{Auto-detected driver: \PLS@temp}% \fi \ifx\PLS@driver\PLS@temp \else \PackageError{pdflscape}{% The driver option `\PLS@option' is not compatible\MessageBreak with pdfTeX in PDF mode, using driver `pdftex' instead% }\@ehc \let\PLS@driver\PLS@temp \fi \fi % \end{macrocode} % % \subsubsection{Driver \xoption{xetex}} % % \begin{macrocode} \def\PLS@temp{dvipdfm} \ifxetex \ifx\PLS@driver\@empty \let\PLS@driver\PLS@temp \PackageInfo{pdflscape}{% Auto-detected driver: \PLS@temp\space(xetex)% }% \fi \ifx\PLS@driver\PLS@temp \else \PackageError{pdflscape}{% The driver option `\PLS@option' is not compatible\MessageBreak with XeTeX, using driver for XeTeX (dvipdfm) instead% }\@ehc \let\PLS@driver\PLS@temp \fi \fi % \end{macrocode} % % \subsubsection{Detect driver based on \cs{Gin@driver}} % % \begin{macrocode} \def\PLS@temp#1#2{% \ifx\PLS@driver\@empty \begingroup \def\PLS@temp{#1.def}% \expandafter\endgroup \ifx\PLS@temp\Gin@driver \def\PLS@driver{#2}% \PackageInfo{pdflscape}{% Auto-detected driver: \PLS@driver\space(#1)% }% \fi \fi } \PLS@temp{dvipdfm}{dvipdfm} \PLS@temp{dvipdfmx}{dvipdfm} \PLS@temp{dvips}{dvips} \PLS@temp{dvipsone}{dvips} \PLS@temp{pctexps}{dvips} % \end{macrocode} % % \subsubsection{Driver \xoption{dvips}} % % \begin{macrocode} \ifx\PLS@driver\@empty \def\PLS@temp{dvips}% \ifnum 1=0\ifx\Gin@PS@raw\@undefined \else \ifx\Gin@PS@raw\relax \else \ifx\Gin@PS@raw\@empty \else 1% \fi \fi \fi \space \let\PLS@driver\PLS@temp \PackageInfo{pdflscape}{% Auto-detected driver: \PLS@temp\space(PostScript)% }% \fi \fi % \end{macrocode} % % \begin{macrocode} \ifx\PLS@driver\@empty \PackageError{pdflscape}{% Neither pdfTeX, PostScript, nor dvipdfm driver found% }\@ehc \fi % \end{macrocode} % % \subsection{Driver implementation} % % \begin{itemize} % \item |\PLS@AddRotate #1|\\ % it expects the correct rotation number in |#1| % and implements the adding of the /Rotation entry % in the |/Page| object of the current page. % \item |\PLS@RemoveRotate|\\ % it removes a previous |/Rotate| entry, if necessary. % \end{itemize} % % \subsubsection{\pdfTeX} % % Not too nice is the global setting of \cs{pdfpageattr}. % Perhaps this can be changed in future versions. % % luatex compat. % \begin{macrocode} \ifx\pdfpageattr\@undefined \ifx\pdfvariable\@undefined\else \protected\edef\pdfpageattr{\pdfvariable pageattr} \fi \fi % \end{macrocode} % \begin{macrocode} \def\PLS@temp{pdftex} \ifx\PLS@temp\PLS@driver \def\PLS@AddRotate#1{% \ifnum#1=0 % % \end{macrocode} % Already the default. % \begin{macrocode} \else \global\pdfpageattr\expandafter{% \the\pdfpageattr /Rotate #1% }% \fi }% % \end{macrocode} % Removes a |/Rotate| entry. % \begin{macrocode} \def\PLS@RemoveRotate{% \begingroup \global\pdfpageattr\expandafter{\expandafter}% \expandafter\PLS@@RemoveRotate \the\pdfpageattr /Rotate\@nil \endgroup }% \def\PLS@@RemoveRotate#1/Rotate#2\@nil{% % \end{macrocode} % Append |/Rotate| free stuff to \cs{pdfpageattr}. % \begin{macrocode} \global\pdfpageattr\expandafter{\the\pdfpageattr#1}% \ifx\\#2\\% % \end{macrocode} % Ready, because the detected |/Rotate| is part of % the end marker: |/Rotate\@nil| % \begin{macrocode} \else % \end{macrocode} % First read in the argument of |/Rotate|, % then continue parsing. % \begin{macrocode} \afterassignment\PLS@@RemoveRotate \count0=#2\@nil \fi }% \fi % \end{macrocode} % % \subsubsection{PostScript driver} % % \begin{macrocode} \def\PLS@temp{dvips} \ifx\PLS@temp\PLS@driver \AddToHook{shipout/before}{\PLS@AtBeginShipout}% \let\PLS@AtBeginShipout\@empty \def\PLS@AddRotate#1{% \ifnum#1=0 % \else \def\PLS@AtBeginShipout{% \global\setbox\ShipoutBox\vbox{% \Gin@PS@raw{% [{ThisPage}\string<\string\string>% /PUT pdfmark% }% \box\ShipoutBox }% }% \fi }% \def\PLS@RemoveRotate{\let\PLS@AtBeginShipout\@empty}% \fi % \end{macrocode} % % \subsubsection{Driver dvipdfm} % % \begin{macrocode} \def\PLS@temp{dvipdfm} \ifx\PLS@temp\PLS@driver \AddToHook{shipout/before}{\PLS@AtBeginShipout}% \let\PLS@AtBeginShipout\@empty \def\PLS@AddRotate#1{% \ifnum#1=0 % \else \def\PLS@AtBeginShipout{% \global\setbox\ShipoutBox\vbox{% \special{pdf: put @thispage <>}% \box\ShipoutBox }% }% \fi }% \def\PLS@RemoveRotate{\let\PLS@AtBeginShipout\@empty}% \fi % \end{macrocode} % % \subsection{Driver independent stuff} % % The landscape environment is extended by % adding the correct |/Rotate| entries. % \begin{macrocode} \g@addto@macro{\landscape}{\PLS@Rotate{90}} \g@addto@macro{\endlandscape}{\PLS@Rotate{0}} % \end{macrocode} % % \begin{macro}{\PLS@Rotate} % Main macro, that sets the |/Rotate| entry.\\ % Argument: any TeX number or nothing, that means zero.\\ % Driver independent. % \begin{macrocode} \def\PLS@Rotate#1{% \begingroup % \end{macrocode} % 1. Check and validate the argument. % \begin{macrocode} \PLS@CheckAngle{#1}% \expandafter\endgroup % \end{macrocode} % 2. Remove previous |\Rotate| entry. % \begin{macrocode} \expandafter\PLS@RemoveRotate % \end{macrocode} % 3. Add |/Rotate| entry. % \begin{macrocode} \expandafter\PLS@AddRotate\expandafter{\the\count@}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\PLS@CheckAngle} % Validates the rotation angle.\\ % The result is stored in the count register |\count@|.\\ % Driver independent. % \begin{macrocode} \def\PLS@CheckAngle#1{% % \end{macrocode} % Nothing means zero: % \begin{macrocode} \ifx\\#1\\% \count@=0 % \else \count@=#1\relax \fi % \end{macrocode} % Normalize to interval -360 $<$ |\count@| $<$ 360. % \begin{macrocode} \@whilenum\count@>359\do{\advance\count@ -360 }% \@whilenum\count@<-359\do{\advance\count@ 360 }% % \end{macrocode} % Check values: 0, +/-90, +/-180, +/-270 % \begin{macrocode} \ifnum 1=0\ifnum\count@=0 \else \ifnum\count@=90 \else \ifnum\count@=-90 \else \ifnum\count@=180 \else \ifnum\count@=-180 \else \ifnum\count@=270 \else \ifnum\count@=-270 \else 1\fi\fi\fi\fi\fi\fi\fi\relax \PackageError{pdflscape}{% Invalid value \the\count@\space for /Rotate% }\@ehc \count@=0 % \fi } % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \section{Installation} % % \subsection{Download} % % \paragraph{Package.} This package is available on % CTAN\footnote{\CTANpkg{pdflscape}}: % \begin{description} % \item[\CTAN{macros/latex/contrib/pdflscape/pdflscape.dtx}] The source file. % \item[\CTAN{macros/latex/contrib/pdflscape/pdflscape.pdf}] Documentation. % \end{description} % % % \subsection{Package installation} % % \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting % \docstrip\ archive. The files are extracted by running the % \xfile{.dtx} through \plainTeX: % \begin{quote} % \verb|tex pdflscape.dtx| % \end{quote} % % \paragraph{TDS.} Now the different files must be moved into % the different directories in your installation TDS tree % (also known as \xfile{texmf} tree): % \begin{quote} % \def\t{^^A % \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} % pdflscape.sty & tex/latex/pdflscape/pdflscape.sty\\ % pdflscape-nometadata.sty & tex/latex/pdflscape/pdflscape-nometadata.sty\\ % pdflscape.pdf & doc/latex/pdflscape/pdflscape.pdf\\ % pdflscape.dtx & source/latex/pdflscape/pdflscape.dtx\\ % \end{tabular}^^A % }^^A % \sbox0{\t}^^A % \ifdim\wd0>\linewidth % \begingroup % \advance\linewidth by\leftmargin % \advance\linewidth by\rightmargin % \edef\x{\endgroup % \def\noexpand\lw{\the\linewidth}^^A % }\x % \def\lwbox{^^A % \leavevmode % \hbox to \linewidth{^^A % \kern-\leftmargin\relax % \hss % \usebox0 % \hss % \kern-\rightmargin\relax % }^^A % }^^A % \ifdim\wd0>\lw % \sbox0{\small\t}^^A % \ifdim\wd0>\linewidth % \ifdim\wd0>\lw % \sbox0{\footnotesize\t}^^A % \ifdim\wd0>\linewidth % \ifdim\wd0>\lw % \sbox0{\scriptsize\t}^^A % \ifdim\wd0>\linewidth % \ifdim\wd0>\lw % \sbox0{\tiny\t}^^A % \ifdim\wd0>\linewidth % \lwbox % \else % \usebox0 % \fi % \else % \lwbox % \fi % \else % \usebox0 % \fi % \else % \lwbox % \fi % \else % \usebox0 % \fi % \else % \lwbox % \fi % \else % \usebox0 % \fi % \else % \lwbox % \fi % \else % \usebox0 % \fi % \end{quote} % If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's % TDS installing feature, then some files can already be in the right % place, see the documentation of \docstrip. % % \subsection{Refresh file name databases} % % If your \TeX~distribution % (\TeX\,Live, \mikTeX, \dots) relies on file name databases, you must refresh % these. For example, \TeX\,Live\ users run \verb|texhash| or % \verb|mktexlsr|. % % \subsection{Some details for the interested} % % \paragraph{Unpacking with \LaTeX.} % The \xfile{.dtx} chooses its action depending on the format: % \begin{description} % \item[\plainTeX:] Run \docstrip\ and extract the files. % \item[\LaTeX:] Generate the documentation. % \end{description} % If you insist on using \LaTeX\ for \docstrip\ (really, % \docstrip\ does not need \LaTeX), then inform the autodetect routine % about your intention: % \begin{quote} % \verb|latex \let\install=y\input{pdflscape.dtx}| % \end{quote} % Do not forget to quote the argument according to the demands % of your shell. % % \paragraph{Generating the documentation.} % You can use both the \xfile{.dtx} or the \xfile{.drv} to generate % the documentation. The process can be configured by the % configuration file \xfile{ltxdoc.cfg}. For instance, put this % line into this file, if you want to have A4 as paper format: % \begin{quote} % \verb|\PassOptionsToClass{a4paper}{article}| % \end{quote} % An example follows how to generate the % documentation with pdf\LaTeX: % \begin{quote} %\begin{verbatim} %pdflatex pdflscape.dtx %makeindex -s gind.ist pdflscape.idx %pdflatex pdflscape.dtx %makeindex -s gind.ist pdflscape.idx %pdflatex pdflscape.dtx %\end{verbatim} % \end{quote} % % \begin{History} % \begin{Version}{2001/01/15 v0.1} % \item % First public version, % published in \xnewsgroup{de.comp.text.tex}:\\ % \URL{``\link{Re: Querformat, pdfLaTex und thumbpdf}''}^^A % {https://groups.google.com/group/de.comp.text.tex/msg/e054c5795e52d2b8} % \end{Version} % \begin{Version}{2001/02/04 v0.2} % \item % Minor documentation update. % \item % CTAN. % \end{Version} % \begin{Version}{2004/05/11 v0.3} % \item % Support for dvipdfm added. % \end{Version} % \begin{Version}{2004/05/12 v0.4} % \item % Bug fix: support for multipage landscape environment % for all drivers except for \xoption{pdftex}. % \end{Version} % \begin{Version}{2006/02/20 v0.5} % \item % DTX framework. % \item % LPPL 1.3 % \item % Code is not changed. % \end{Version} % \begin{Version}{2006/04/24 v0.6} % \item % Bug fix: \cs{PLS@RemoveRotate} reinserted for \cs{PLS@Rotate}. % \item % Fix for \cs{PLS@RemoveRotate} (dvips/dvipdfm): \cs{PLS@EverhShi} % hook is cleared. % \end{Version} % \begin{Version}{2007/04/11 v0.7} % \item % Line ends sanitized. % \end{Version} % \begin{Version}{2007/04/17 v0.8} % \item % Package \xpackage{atbegshi} replaces \xpackage{everyshi}. % \end{Version} % \begin{Version}{2007/10/21 v0.9} % \item % Driver detection for \XeTeX\ added. % \item % Fix for rotation angles $\le$~-360 or $\ge$~360. % \end{Version} % \begin{Version}{2008/08/11 v0.10} % \item % Code is not changed. % \item % URLs updated. % \end{Version} % \begin{Version}{2016/05/14 v0.11} % \item % LuaTeX Compatibility % \end{Version} % \begin{Version}{2019/12/05 v0.12} % \item % Documentation updates. % \item \xpackage{iftex} package. % \end{Version} % \begin{Version}{2022-10-28 v0.13} % \item Made the package compatible with the PDF management. % \item Removed the dependency to atbegshi. % \end{Version} % \end{History} % % \PrintIndex % % \Finale \endinput