%\iffalse %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% aeb_mobile.sty package %% %% Copyright (C) 2012-2018 %% %% dpstory@acrotex.net %% %% %% %% This program can redistributed and/or modified under %% %% the terms of the LaTeX Project Public License %% %% Distributed from CTAN archives in directory %% %% macros/latex/base/lppl.txt; either version 1 of the %% %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\NeedsTeXFormat{LaTeX2e}[1997/12/01] %\ProvidesPackage{aeb_mobile} % [2018/04/26 v1.4 aeb\_mobile: Formatting for mobile devices (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} %\pdfstringdefDisableCommands{\let\\\textbackslash} %\EnableCrossrefs \CodelineIndex \OnlyDescription % comment out for implementation details \EnableCrossrefs \CodelineIndex \RecordChanges \InputIfFileExists{aebdocfmt.def}{\PackageInfo{web}{Inputting aebdocfmt.def}} {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax \PackageInfo{web}{aebdocfmt.def cannot be found}} \begin{document} \def\CMD#1{\textbackslash#1} \let\pkg\textsf \let\opt\texttt \addtolength{\marginparwidth}{3pt} \GetFileInfo{aeb_mobile.sty} \title{\texorpdfstring{\protect\pkg{aeb\_mobile}}{aeb_mobile}: Formatting for mobile devices} \author{D. P. Story\\ Email: \texttt{dpstory@acrotex.net}} \date{processed \today} \maketitle \tableofcontents \DocInput{aeb_mobile.dtx} \IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute \texttt{makeindex -s gind.ist -o aeb\_mobile.ind aeb\_mobile.idx} on the command line and recompile \texttt{aeb\_mobile.dtx}.} \IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute \texttt{makeindex -s gglo.ist -o aeb\_mobile.gls aeb\_mobile.glo} on the command line and recompile \texttt{aeb\_mobile.dtx}.} \end{document} % % \fi % \MakeShortVerb{|} % \InputIfFileExists{aebdonotindex.def}{\PackageInfo{web}{Inputting aebdonotindex.def}} % {\PackageInfo{web}{cannot find aebdonotindex.def}} % % \begin{macrocode} %<*package> % \end{macrocode} % If \cs{ifsmartphone} is undefined, we do nothing; otherwise, if \texttt{true} % we load the package, if \texttt{false} we end the package. With this, we don't % need to surround the \textsf{aeb\_mobile} package with \cs{ifsmartphone}\dots\cs{fi}. %\changes{v1.1}{2012/06/26}{Added a check for \cs{ifsmartphone}} % \begin{macrocode} \@ifundefined{ifsmartphone}{\newif\ifsmartphone\smartphonetrue}{} % \end{macrocode} % \section{Introduction} %This is a simple package designed to format a document for a smart phone. %When the option \texttt{smartphone} is taken a page $4\times8$ inches is %created. Other definitions are made, as explained below. % % \begin{macrocode} % %<*altpkgname> % \end{macrocode} % % \section{Alternate package name: \texorpdfstring{\protect\pkg{aeb-mobile}}{aeb-mobile}} % CTAN lists this package (\pkg{aeb\_mobile}) as \pkg{aeb-mobile}, so we'll create % a dummy package by that name. % \changes{v1.3}{2018/04/26}{Added dummy package \string\pkg{aeb-mobile}} % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{aeb-mobile} [2018/04/26 v1.0 aeb-mobile Alt-name (dps)] \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{aeb_mobile}} \ProcessOptions \RequirePackage{aeb_mobile} % \end{macrocode} % \begin{macrocode} % %<*package> % \end{macrocode} % \section{The code} % In this main body of the package, we set page dimensions, the inital % view of the PDF, define a title page, define links and the JavaScript % they use. % \subsection{Set Package Options} % \begin{macro}{smartphone} % First, we get the options.For the \texttt{smartphone} % option we have an $4\times8$ inch page, with narrow side margins. % \begin{macrocode} \DeclareOption{smartphone}{\ifsmartphone\AtEndOfPackage{% \web@MargScrDimOpts{.25in}{.25in}{24pt}{.25in}{8in}{4in}}\fi} % \end{macrocode} % \end{macro} % \begin{macro}{nomaketitle} % The package makes a redefinition of \cs{makeinlinetitle} (originally defined % in the web package. Using this option, the redefinition is skipped. % \begin{macrocode} \newif\ifmob@maketitledefn \mob@maketitledefntrue \DeclareOption{nomaketitle}{\mob@maketitledefnfalse} % \end{macrocode} % \end{macro} % \begin{macro}{useforms} % By default, links are created to \textsf{Print} the file and \textsf{Toggle Cols}, % if this option is used, form buttons are used instead. The form button will be % set so that it is visible but does not print. (An advantage it has over links.) % \begin{macrocode} \newif\ifmob@useforms \mob@useformsfalse \DeclareOption{useforms}{\mob@useformstrue} % \end{macrocode} % \end{macro} % \begin{macro}{scalefigures} % An option suggested by Mathias M. When this option is taken, graphic images % are scaled according to an algorithm. See the description above the definition % of \cs{mob@adjwidth}. The commands \DescribeMacro{\scalefiguresOn}\cmd{\scalefiguresOn} % and \DescribeMacro{\scalefiguresOff}\cmd{\scalefiguresOff} are a convenient way to % turn the scaling of figures on and off. % \changes{v1.2}{2012/06/28}{Added \texttt{scalefigures} and \texttt{!scalefigures}} % \begin{macrocode} \newif\ifmobscalefigures\mobscalefiguresfalse \newcommand{\scalefiguresOn}{\mobscalefigurestrue} \newcommand{\scalefiguresOff}{\mobscalefiguresfalse} \DeclareOption{scalefigures}{\mobscalefigurestrue} \DeclareOption{!scalefigures}{\mobscalefiguresfalse} % \end{macrocode} % \end{macro} % \begin{macrocode} \ProcessOptions % \end{macrocode} % \textbf{Early Stop.} If \cs{ifsmartphone} is false, we stop here. %\changes{v1.1}{2012/06/26}{added early \cs{endinput}} % \begin{macrocode} \ifsmartphone\else\expandafter\endinput\fi % \end{macrocode} % We require the \textsf{web} package to set the dimensions of the page, above, % and the \textsf{eforms} package to set links, defined below. % \begin{macrocode} \RequirePackage{web} \RequirePackage{eforms} % \end{macrocode} % \subsection{Set initial view} % There seems to be a slight conflict between \textsf{aeb\_pro} and \textsf{hyperref} % when it comes to setting some of the preferences. If \textsf{aeb\_pro} is % loaded, we'll use \textsf{aeb\_pro}, otherwise, we use \textsf{hyperref}. % \begin{macrocode} \@ifpackageloaded{aeb_pro}{% \DeclareInitView{% layoutmag={pagelayout=TwoColumnLeft,mag=FitWidth}, windowoptions=showtitle}}{% \hypersetup{pdfdisplaydoctitle=true,% pdfstartview=FitH -32768,pdfpagelayout=TwoColumnLeft}} % \end{macrocode} % \subsection{A title page} % \DescribeMacro{\makeinlinetitle}The web defines % \cs{makeinlinetitle}, we'll redefine it here % for our convenience. % \begin{macrocode} \ifmob@maketitledefn \renewcommand{\makeinlinetitle} {% \begingroup\parskip0pt\parindent0pt \par\vspace*{6pt} \noindent\makebox[\linewidth][c]{\bfseries \color{\webuniversity@color}\webuniversity}\par\kern6pt\noindent \makebox[\linewidth][c]{\parbox[c]{.75\linewidth}{\centering \bfseries\color{\webtitle@color}\webtitle}}\par\kern12pt \noindent\parbox{\linewidth}{\scriptsize \web@copyright\space\the\year\hfill\thewebemail\\ \@date\hfill\@ifundefined{aeb@talksite}{\webversion} {\ifx\aeb@talksite\@empty\webversion \else\aeb@talksite\fi}% }\par \noindent\makebox[\linewidth]{\rule{.67\linewidth}{.4pt}}% \par\endgroup } \fi % \end{macrocode} % \subsection{Redefinitions of {\LaTeX} commands} % We redefine \cs{paragraph} and a key-value of \cs{includegraphics} % \begin{macrocode} \renewcommand{\paragraph}{\edef\mob@partpgraphexp{\noexpand \@startsection{paragraph}{4}{0pt}% {\ifdim\parskip=0pt12pt\else0pt\fi}}% \mob@partpgraphexp{-3pt}{\bfseries}} % \end{macrocode} % This is an implementation of an idea proposed by Mathias M. He notes that % a figure that looks fine when the document is compiled for paper, is too small % when compiled for the smartphone. So, he proposes to double the width of the % image up to a maximum width of \cs{textwidth}. My implementation is to redefine % the key-value command for \cs{includegraphics} from \textsf{graphicx}, to intercept the declared width, % and modify its value according to the above description. %\changes{v1.1}{2012/06/26}{Added the \cs{mob@adjwidth} command to adjust the width % of a graphic} % % The scaling of figures can be turned on and off by setting the switch % \cs{ifmobscalefigures}, as appropriate. % \changes{v1.2}{2012/06/28}{Added conditional \cs{ifmobscalefigures}} % \begin{macrocode} \def\mob@adjwidth#1{\ifmobscalefigures{\dimen0=#1 \dimen0=2\dimen0\relax \xdef\mob@djwidth{\expandafter\the \ifdim\dimen0<\textwidth \dimen0 \else\textwidth\fi}% }\else\gdef\mob@djwidth{#1}\fi } % \end{macrocode} % We intercept the width parameter, pass it to \cs{mob@adjwidth}, then % use the result to define the graphicx command \cs{Gin@ewidth}. % \begin{macrocode} \@ifpackageloaded{graphicx}{% \define@key{Gin}{width}{\mob@adjwidth{#1}% \edef\Gin@ewidth{\mob@djwidth}}% }{} % \end{macrocode} % \subsection{Some JavaScript} % We define two functions: (1) \texttt{\_printIt()} prints % the current document using the default printer in two columns; % (2) \texttt{\_toggleViews()} toggles the view between single column % and two columns. In both case we use fit width zoom type. % \begin{macrocode} \begin{insDLJS}[_mobileJS]{mobile}{JS supporting mobile formatting} var _mobileJS=true function _printIt(){ var pp=this.getPrintParams(); pp.pageHandling=pp.constants.handling.nUp; pp.nUpPageOrder=pp.constants.nUpPageOrders.Horizontal; pp.nUpNumPagesH=2; pp.nUpPageBorder=false; pp.nUpAutoRotate=false; this.print(pp); } function _toggleViews() { this.zoomType=zoomtype.fitW; this.layout=(this.layout!="TwoColumnLeft")?% "TwoColumnLeft":"OneColumn"; } \end{insDLJS} % \end{macrocode} % \subsection{Links in running header} % \DescribeMacro{\mobPrint}\cs{mobPrint} sets the text of the print link % and the button caption if its a push button. % \DescribeMacro{\mobToggleCols} \cs{mobToggleCols} sets % the text for the toggle link and the button caption if its a push % button. \DescribeMacro{\mobPrintTip}\cs{mobPrintTip} is the tool tip % when there's a button for the print; while \DescribeMacro{\mobToggleColsTip} % \cs{mobToggleColsTip} does the same for the toggle button. % \begin{macrocode} \newcommand{\mobPrint}[1]{\def\mob@print{#1}} \mobPrint{Print} \newcommand{\mobPrintTip}{Click to print this document in two-column format, recommended.} \newcommand{\mobToggleCols}[1]{\def\mob@toggleCols{#1}} \mobToggleCols{Toggle Cols} \newcommand{\mobToggleColsTip}{Click to toggle between single-column and two-column page layouts.} % \end{macrocode} % \paragraph*{German language.} The following are redefinitions supplied % by a user in the German language. %\begin{verbatim} %\mobPrint{Drucken} %\renewcommand{\mobPrintTip}{Zum Drucken des Dokumentes hier klicken % (zweispaltige Ansicht empfehlenswert).} %\mobToggleCols{Spaltenansicht umschalten} %\renewcommand{\mobToggleColsTip}{Zum Umschalten der Spaltenansicht % (einspaltig oder zweispaltig) hier klicken.} %\end{verbatim} % \DescribeMacro{\mobFormPresets}\cs{mobFormPresets} is used to set % the appearance of the buttons when the \texttt{useforms} option is taken. % \begin{macrocode} \newcommand{\mobFormPresets}[1]{% \def\mob@FormPresets{#1}} \mobFormPresets{\S{S}\BC{}\textSize{8}\autoCenter{n}} % \end{macrocode} % \DescribeMacro{\mobPrintIt}\DescribeMacro{\mobTwoCols} The commands % \cs{mobPrintIt} sets the print link, while \cs{mobTwoCols} % does the some for toggling. Each call their respective % document level JS. They each have one optional parameter % that is use to modify its appearance. % \begin{macrocode} \newcommand{\mobPrintIt}[1][]{% \ifmob@useforms {\footnotesize\def\ef@btnspcr{}% \settoheight{\@tempdima}{\strut}% \settodepth{\@tempdimb}{\strut}% \addtolength{\@tempdima}{\@tempdimb}% \raisebox{-\@tempdimb}{\pushButton[#1\F{-\FPrint} \TU{\mobPrintTip} \presets{\mob@FormPresets}% \CA{\mob@print}\A{\JS{_printIt();}}% ]{mobPrintIt}{}{\@tempdima}}}\else \setLink[#1\A{\JS{_printIt();}}]{\mob@print}\fi } % \end{macrocode} % \begin{macrocode} \newcommand{\mobTwoCols}[1][]{% \ifmob@useforms {\footnotesize\def\ef@btnspcr{}% \settoheight{\@tempdima}{\strut}% \settodepth{\@tempdimb}{\strut}% \addtolength{\@tempdima}{\@tempdimb}% \raisebox{-\@tempdimb}{\pushButton[#1\F{-\FPrint} \TU{\mobToggleColsTip}\presets{\mob@FormPresets}% \CA{\mob@toggleCols}\A{\JS{_toggleViews();}}% ]{mobToggleCols}{}{\@tempdima}}}\else \setLink[#1\A{\JS{_toggleViews();}}]{\mob@toggleCols}\fi } % \end{macrocode} % Here, we set the left header. If you want to change the % appearance of the links, you need to execute this next % line in the preamble with the optional parameter to change % the appearances. This assumes the document is using % the page style \texttt{webheadings}, as defined in \textsf{web}. % \begin{macrocode} \lheader{\mobPrintIt\relax\ifmob@useforms\kern3bp \else\,/\,\fi\mobTwoCols\relax} % \end{macrocode} % \subsection{Add a page if odd} % \DescribeMacro{\generateEvenPage} adds one more page % to make an even number of pages. May be redefined as needed. % \begin{macrocode} \newcommand{\generateEvenPage}{\ifodd\value{page}\else \newpage\lheader{}\null\fi} \AtEndDocument{\generateEvenPage} % % \end{macrocode} \endinput % iPad % Landscape % w: 7.75in % h: 5.8in