From 01c9ee84c09adfc3efe1cd93191a9c0473f985fe Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 12 Jul 2017 23:26:39 +0900 Subject: add acrotex --- texmf-dist/source/latex/acrotex/taborder.dtx | 240 +++++++++++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 texmf-dist/source/latex/acrotex/taborder.dtx (limited to 'texmf-dist/source/latex/acrotex/taborder.dtx') diff --git a/texmf-dist/source/latex/acrotex/taborder.dtx b/texmf-dist/source/latex/acrotex/taborder.dtx new file mode 100644 index 00000000..109c381d --- /dev/null +++ b/texmf-dist/source/latex/acrotex/taborder.dtx @@ -0,0 +1,240 @@ +%\iffalse +%<*copyright> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% taborder.sty package, %% +%% Copyright (C) 2009--2016 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% 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{taborder} +% [2009/09/04 v0.1 taborder: Sets the tab order, Acrobat Distiller only (dps)] +%<*driver> +\documentclass{ltxdoc} +\usepackage[colorlinks,hyperindex]{hyperref} +%\pdfstringdefDisableCommands{\let\\\textbackslash} +%\EnableCrossrefs \CodelineIndex +\begin{document} +\def\CMD#1{\textbackslash#1} + \GetFileInfo{taborder.sty} + \title{\textsf{taborder}: Package for setting the tab order} + \author{D. P. Story\\ + Email: \texttt{dpstory@uakron.edu}} + \date{processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{taborder.dtx} + \PrintIndex +\end{document} +% +% \fi +% \MakeShortVerb{|} +% \StopEventually{} +% +% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} +% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} +% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} +% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} +% \DoNotIndex{\space,\@empty,\special} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \begin{macro}{structure} +% If the driver is based on the \textbf{pdfmark}, we read the full package, +% otherwise, we end early. +% \begin{macrocode} +\DeclareOption{structure}{\let\to@earlyendinput\relax} +% \end{macrocode} +% \end{macro} +% If option passed is not \texttt{structure}, we will end input early, +% we also \cs{let} other commands defined in this package to \cs{relax}. +% \begin{macrocode} +\let\to@earlyendinput\endinput +\let\setTabOrderByList\relax\let\setTabOrderByNumber\relax +\ProcessOptions +% \end{macrocode} +% \section{Introduction} +% +% This is a short package that provides support for setting tab order +% for Acrobat form fields and other PDF objects, such as links and +% comments. The basic portion of the package, provides support for +% setting tab order based on rows, column, and widgets. If the author +% uses \textsf{Adobe Distiller} to create a PDF file, support for +% setting tab order from structure is also provided. +% +% The code for this package was originally placed in the +% \textsf{eforms} package, but I've decided to move it to its own +% package so \textsf{eforms} can share the code with the +% \textsf{annot\_pro} package. This package is input by +% \textsf{eforms} and \texttt{annot\_pro}, and is not meant as a +% standalone package. +% +% \section{Setting Tab Order} +% +% \begin{macro}{\setTabOrder} +% The tab order is determined by the \texttt{Tabs} key of the page object. +% The value of Tabs are \texttt{R}, \texttt{C}, \texttt{S}, \texttt{W}, and \texttt{A}. (\texttt{W} is implemented in Version 9.0, +% \texttt{A} was documented for v9.0, but not implemented.) The command is page oriented, it sets +% the tab order on the current page. +% +% \begin{macrocode} +\newif\ifto@structOrder\to@structOrderfalse +\newcommand{\setTabOrder}[1]{\begingroup + \global\to@structOrderfalse + \def\to@to@C{C}\def\to@to@R{R}\def\to@to@S{S}% + \def\to@to@W{W}\def\to@to@A{A}\def\to@to@us{UNSPECIFIED}% + \uppercase{\def\ef@taborder{#1}}% + \ifx\ef@taborder\@empty + \else\ifx\ef@taborder\to@to@us + \let\ef@taborder\@empty + \else\ifx\to@to@C\ef@taborder + \else\ifx\to@to@R\ef@taborder + \else\ifx\to@to@S\ef@taborder + \ifx\to@earlyendinput\endinput + \PackageWarning{taborder}{% + The structure (S) option is supported only\MessageBreak + with Acrobat Distiller. Using the default\MessageBreak + value of 'unspecified'}\let\ef@taborder\@empty + \else\global\to@structOrdertrue\fi + \else\ifx\to@to@W\ef@taborder + \else\ifx\to@to@A\ef@taborder + \else\PackageWarning{taborder}{% + Invalid value for \string\setTabOrder. Permissible \MessageBreak + values are R, C, S, W, A, and unspecified. Using \MessageBreak + the default value of 'unspecified'}\let\ef@taborder\@empty + \fi\fi\fi\fi\fi\fi\fi\ef@setTabOrder +} +% \end{macrocode} +% If the driver is not based on \textbf{pdfmark}, we end here; otherwise, we allow +% tex compiler to continue, and we define code for setting tab order based on structure. +% \begin{macrocode} +\to@earlyendinput +% \end{macrocode} +% We place this definition here because it is need for the \textsf{eforms} package and the +% \textsf{annot\_pro} package. +% \begin{macrocode} +\def\ef@setTabOrder{% + \ifx\ef@taborder\@empty\else\literalps@out{% + [ {ThisPage} <> /PUT pdfmark}\fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% When the tab order is by structure, there are two ways of specifying the order, +% by List (the default) or by Number. +% \begin{macro}{\setTabOrderByList} +% Declare that you are using the list method of specifying order. Valid only for structure ordering. +% This is the default, but if the method is switched to Number, this command can switch it back to +% the list format. When using structure order, with the list method, tab order +% is set with \cs{setStrucTabOrder}, defined below. +% \begin{macrocode} +\newcommand{\setTabOrderByList}{% + \global\to@settabsbylisttrue + \global\let\setStructTabOrder\to@setStructTabOrder +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setTabOrderByNumber} +% Declare that you are using the number method of specifying order. +% Valid only for structure ordering. Here's an example of the syntax used +% for specifying tab order by number. +%\begin{verbatim} +%\setTabOrder{s} +%\setTabOrderByNumber +%.... +% \textField[\V{text1}\objdef{text1-\thepage} +% \taborder{1}]{text1-\thepage}{1.25in}{11bp} +% \textField[\V{text2}\objdef{text2-\thepage} +% \taborder{0}]{text2-\thepage}{1.25in}{11bp} +%\end{verbatim} +% It seems that a value of 0 is required when setting the tab order. The tabs are +% ordered 0, 1, 2, 3, .... If you order them as 1,2,3,4,5..., then the order you +% specify is ignored, and they are listed in the order they were created. So it appears +% we need a 0 included. If you specify 0,0,1,2,3..., then the two PDF objects with tab order +% of 0 are visited in the order they were created. Similarly, for the other tab values. +% A tab order of 0, 2, 3, 4 ... seems to work as well. (The object labeled 2 will be visited +% after the object labeled 0.) +% \begin{macrocode} +\newcommand{\setTabOrderByNumber}{% + \global\to@settabsbylistfalse + \global\let\setStructTabOrder\@gobble +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setStrucTabOrder} +% +% Added 07/08/09. Set the tab order on a page where tab order is set to structure, +% and \cs{setTabOrderByList} is executed prior to \cs{setStrucTabOrder}. Setting +% tab order by a list is the default on startup. +% +% The command \cs{setStrucTabOrder} takes one argument, a list of +% references to fields with a \texttt{objdef} definition. The first +% optional argument will be the title of the tag, the second is +% an indirect reference to the field. +%\begin{verbatim} +% \setStrucTabOrder{% +% [text3]{text3-\thepage} +% [text4]{text4-\thepage} +% [text2]{text2-\thepage} +% [text1]{text1-\thepage}} +%\end{verbatim} +% Setting the structure order is only supported under PS drivers (\textsf{dvips} or \textsf{dvipsone}). +% +% The command itself just starts calls the command \cs{@setStructTabOrder}. +% \begin{macrocode} +\newcommand{\to@setStructTabOrder}[1]{% + \@setStructTabOrder#1\end +} +\newif\ifto@settabsbylist\to@settabsbylisttrue +\let\setStructTabOrder\to@setStructTabOrder +% \end{macrocode} +% Added 07/08/09. This is the command that sets to code using postscript specials. +% This commands reads its key-value pairs, creates some logical structure, then +% loops back on itself to get another argument. The argument is of the form +% \verb![key-values]{objdefName}!. The first bracket argument is optional. The default +% is \texttt{title=} (no title) and \texttt{type=Field}. +% \begin{macrocode} +\define@key{structOpts}{title}[]{\def\structOpts@title{#1}} +\define@key{structOpts}{type}[Form]{\def\structOpts@type{#1}} +\newcommand{\@setStructTabOrder}[2][]{% + \setkeys{structOpts}{title,type,#1} + \ifx#2\end\else\literalps@out{% + [/Subtype/\structOpts@type\ifx\structOpts@title\@empty + \else/Title (\structOpts@title)\fi/StPNE pdfmark + [/Obj {#2} /StOBJ pdfmark + [/StPop pdfmark}\expandafter\@setStructTabOrder + \fi +} +% \end{macrocode} +% \end{macro} +% This command is used to insert structure tab order. For this code +% to be inserted, we must have structure order declared, a nonempty +% \texttt{objdef} key and a nonempty \texttt{settab} key. +% +% This command assumes \cs{eq@objdef}, \cs{eq@taborder}, and \cs{eq@objdefName} +% have already been defined. Many thanks to Genevieve of Adobe for setting my +% thinking straight on tab order using the \textbf{At} key. +% \begin{macrocode} +\def\to@insertStrucTabOrder#1{% + \ifto@structOrder\ifx\eq@objdef\@empty\else + \ifx\eq@taborder\@empty\else\literalps@out{% + [/Subtype/#1/At \eq@taborder/StPNE pdfmark + [/Obj {\eq@objdefName} /StOBJ pdfmark [/StPop pdfmark}% + \fi\fi\fi +} +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +% \Finale +\endinput -- cgit v1.2.3