From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/aeb_mobile/aeb_mobile.dtx | 341 +++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 macros/latex/contrib/aeb_mobile/aeb_mobile.dtx (limited to 'macros/latex/contrib/aeb_mobile/aeb_mobile.dtx') diff --git a/macros/latex/contrib/aeb_mobile/aeb_mobile.dtx b/macros/latex/contrib/aeb_mobile/aeb_mobile.dtx new file mode 100644 index 0000000000..8741a1ac4c --- /dev/null +++ b/macros/latex/contrib/aeb_mobile/aeb_mobile.dtx @@ -0,0 +1,341 @@ +%\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 -- cgit v1.2.3