%\iffalse %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% artthreads.sty package, %% %% Copyright (C) 2016 -- 2020 %% %% 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{artthreads} % [2020/07/09 v1.3.1 Support for article threads (dps)] %<*driver> \documentclass{ltxdoc} \usepackage[colorlinks,hyperindex=false]{hyperref} \usepackage{fancyvrb,array,calc} %\pdfstringdefDisableCommands{\let\\\textbackslash} \EnableCrossrefs \CodelineIndex \RecordChanges \bgroup\ttfamily \gdef\brpr#1{\char123\relax#1\char125\relax}\egroup \let\darg\brpr \let\env\texttt \let\opt\texttt \let\app\textsf \let\pkg\textsf \let\tops\texorpdfstring \def\nmpsep#1{\hskip-\marginparsep\texttt{#1}} \def\ameta#1{\ensuremath{\langle\textsl{\texttt{#1}}\rangle}} \def\meta#1{\textsl{\texttt{#1}}} \def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}} \def\cs#1{\texttt{\bslash#1}} \def\EXCL{!} \DeclareRobustCommand{\tmspace}[3]{% \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} \renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} \let\thinspace\, \renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} \let\negthinspace\! \renewcommand{\:}{\tmspace+\medmuskip{.2222em}} \let\medspace\: \newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} \renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} \let\thickspace\; \newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} \makeatletter \renewcommand{\paragraph} {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt} {\normalfont\normalsize\bfseries}} \renewenvironment{quote}[1][] {\def\@rgi{#1}\ifx\@rgi\@empty \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi \list{}{\rghtm}%{\rightmargin\leftmargin}% \item\relax} {\endlist} \makeatother \InputIfFileExists{aebdocfmt.def}{\PackageInfo{artthreads}{Inputting aebdocfmt.def}} {\def\IndexOpt{\DescribeMacro}\def\IndexKey{\DescribeMacro}\let\setupFullwidth\relax \PackageInfo{artthreads}{aebdocfmt.def cannot be found}} \begin{document} \def\CMD#1{\textbackslash#1} \GetFileInfo{artthreads.sty} \title{\textsf{artthreads}: Support for article threads} \author{D. P. Story\\ Email: \texttt{dpstory@acrotex.net}} \date{processed \today} \maketitle \tableofcontents \DocInput{artthreads.dtx} \IfFileExists{\jobname.ind}{\newpage\setupFullwidth\PrintIndex}{\paragraph*{Index} The index goes here.\\Execute \texttt{makeindex -s gind.ist -o artthreads.ind artthreads.idx} on the command line and recompile \texttt{artthreads.dtx}.} \IfFileExists{\jobname.gls}{\PrintChanges}{\paragraph*{Change History} The list of changes goes here.\\Execute \texttt{makeindex -s gglo.ist -o artthreads.gls artthreads.glo} on the command line and recompile \texttt{artthreads.dtx}.} \end{document} % % \fi % % \MakeShortVerb{|} % \InputIfFileExists{aebdonotindex.def}{\PackageInfo{artthreads}{Inputting aebdonotindex.def}} % {\PackageInfo{artthreads}{aebdonotindex.def cannot be found}} % % \begin{macrocode} %<*package> % \end{macrocode} % \changes{v1.2}{2016/05/02}{Modified documentation to reflect new \string\textsf{DC} thread icons.} % % \section{Introduction} % This package is used to create \textit{article threads} around blocks of content. Generally, % article threads are used with multi-column documents, such as newspapers or newsletters, or % anything that uses a multi-column format. % % The creation of the article threads should occur as the final step of the document composition. % There is nothing automatic about placing the threads, {\TeX} does not lend itself to the creation % of the threads. For the purpose of placing the threads, the options \texttt{preview} and % \texttt{viewMagWin} are integral. % % \section{Options and Required Packages} % \begin{macrocode} \RequirePackage{xkeyval} % \end{macrocode} % \paragraph*{Driver options.} These options are \opt{dvips} (the default), % \opt{pdftex}, \opt{luatex}, and \opt{xetex} % are automatically detected, other drivers supported are \opt{dvipdfm} and % \opt{dvipdfmx}. % % \paragraph*{Preview options.} The \texttt{preview} % option is a carry over from \textsf{eforms}. When selected, all form fields are outlined; useful when % setting the location of fields in a dvi previewer. The other option is \texttt{viewMagWin} % will show the viewing windows surrounding the target. This is the rectangle % that will be jumped to. Use this option to adjust the size of the window to your needs. % When either of the last two options has an exclamation point prior, that means to % turn off the switch. You can conveniently use \texttt{viewMagWin} to see the viewing window, % then change it to \texttt{!viewMagWin} to remove the visible window. Cool. % Similarly, you can turn off \texttt{preview} using \texttt{!preview}. % \begin{macrocode} % \end{macrocode} % \leavevmode\IndexOpt{pdftex}^^A % \IndexOpt{luatex}^^A % All options are passed to the \pkg{fitr} package, which contains a lot of the code % used in this package. % \begin{macrocode} \DeclareOptionX{pdftex}{\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{luatex}{\PassOptionsToPackage{\CurrentOption}{fitr}} % \end{macrocode} % \leavevmode\IndexOpt{dvips}^^A % \IndexOpt{dvipsone}^^A % Distiller based drivers. % \begin{macrocode} \DeclareOptionX{dvips}{\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{dvipsone}{\PassOptionsToPackage{\CurrentOption}{fitr}} % \end{macrocode} % \leavevmode\IndexOpt{xetex}^^A % \IndexOpt{dvipdfm}^^A % \IndexOpt{dvipdfmx}^^A % \opt{xetex} and its variants. % \begin{macrocode} \DeclareOptionX{dvipdfm}{\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{dvipdfmx}{\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{xetex}{\PassOptionsToPackage{\CurrentOption}{fitr}} % \end{macrocode} % \leavevmode\IndexOpt{preview}^^A % \IndexOpt[\protect\EXCL]{!preview}^^A % \IndexOpt{viewMagWin}^^A % \IndexOpt[\protect\EXCL]{!viewMagWin}^^A % Preview preferences % \begin{macrocode} \DeclareOptionX{preview} {\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{!preview} {\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{viewMagWin} {\PassOptionsToPackage{\CurrentOption}{fitr}} \DeclareOptionX{!viewMagWin} {\PassOptionsToPackage{\CurrentOption}{fitr}} % \end{macrocode} % Any other options are passed on to \pkg{fitr}. One useful % option is \opt{gonative}, which creates no document JavaScript. % Consequently, the \texttt{latex\,->\,dvips\,->\,ps2pdf} workflow % is supported. % \begin{macrocode} \DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{fitr}} \ProcessOptionsX % \end{macrocode} % \section{The Main Code} % We require the package \textsf{fitr}, as we use many commands from that package. % We pass all options to \textsf{fitr}. % \changes{v1.3.1}{2020/07/09}{Require \string\pkg{fitr} package, dated 2020/07/09} % \begin{macrocode} \RequirePackage{fitr}[2020/07/09] % \end{macrocode} % Some scratch counters, lengths, boxes. % \begin{macrocode} \newif\ifnewarticle \newcounter{@rtBtnCnt} \def\CntArt{0}\def\CntArtInfo{0} \def\inc@CntMacro#1{{\@tempcnta#1\relax\advance\@tempcnta1\relax \xdef#1{\the\@tempcnta}}} \def\artM@rk{[\space} % \end{macrocode} % \subsection{\tops{\protect\cs{setThreadInfo}}{\textbackslash{setThreadInfo}} and its KV-pairs} % We set up % key-values\IndexKey{title}\IndexKey{author}\IndexKey{subject}^^A % \IndexKey{keywords} for the thread \textsf{Info} dictionary. Only the title % is required, that's why a default value of \texttt{thread-\ameta{num}} is otherwise provided. % For \app{pdflatex} and \app{lualtex}, only \texttt{title} is supported. % \begin{macrocode} \define@key{artthrd}{title}[]{\Hy@unicodefalse \pdfstringdef\threadTitle{#1}} \let\threadTitle\@empty \define@key{artthrd}{author}[]{\pdfstringdef\threadAuthor{#1}} \let\threadAuthor\@empty \define@key{artthrd}{keywords}[]{\pdfstringdef\threadKeywords{#1}} \let\threadKeywords\@empty \define@key{artthrd}{subject}[]{\pdfstringdef\threadSubject{#1}} \let\threadSubject\@empty % \end{macrocode} % Use \DescribeMacro{\setThreadInfo}\cmd{\setThreadInfo} prior to the opening of a % new thread using \cs{cArticle}. Through its key-values, set the title, author, % keywords, and subject of the thread. For \textsf{pdftex}, only title is supported. % \begin{macrocode} \newcommand{\setThreadInfo}[1]{\inc@CntMacro\CntArtInfo \let\threadTitle\@empty\let\threadAuthor\@empty \let\threadKeywords\@empty\let\threadSubject\@empty \setkeys{artthrd}{#1}\ifx\threadTitle\@empty \def\threadTitle{thread-\CntArtInfo}\fi} \def\bArtErrMsg{When starting a new article thread (\string\bArticle)\MessageBreak first use \string\setThreadInfo\space to set the title,\MessageBreak author, subject, and keywords} % \end{macrocode} % \paragraph*{Additional key-values for threads} In addition to the key-values provided % by \textsf{fitr}, we provide a few more. The two keys % \IndexKey{addtow}\texttt{addtow} and \IndexKey{addtoh}\texttt{addtoh} % adds to the reading border of the threads. These are set through the % command \DescribeMacro{\setAddToBorder}\cs{setAddToBorder}. For the most part, % choices for \texttt{addtow} (add to the width) and \texttt{addtoh} (add to the height) % should be set for the whole document. Initially, \texttt{addtow=0,addtoh=0}. % \begin{macrocode} \define@key{@rtthrd}{addtow}[0]{% \fitr@defaultbp{\artthrd@@addtow}{#1}} \def\artthrd@@addtow{0} \define@key{@rtthrd}{addtoh}[0]{% \fitr@defaultbp{\artthrd@@addtoh}{#1}} \def\artthrd@@addtoh{0} \newcommand{\setAddToBorder}[1]{\setkeys{@rtthrd}{#1}} % \end{macrocode} % \subsection{The \tops{\protect\cs{bArticle} and \protect\cs{cArticle}}{\textbackslash{bArticle} and \textbackslash{cArticle}} commands} % The \DescribeMacro{\bArticle}\cmd{\bArticle} is used to start an article thread. The thread % may continue with \cs{cArticle}. Both commands have a required argument, consisting of % key-values defined by \textsf{fitr}. % The following is the syntax, with appropriate keys defined in \texttt{fitr}. %\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9},commandchars={!()}] %\cArticle{lift=!ameta(length),width=!ameta(length),height=!ameta(length)} %\end{Verbatim} % \begin{macrocode} \newcommand{\bArticle}{\begingroup\inc@CntMacro\CntArt \ifnum\CntArt=\CntArtInfo\relax\else \PackageError{artthreads}{\bArtErrMsg}{See package documentation for \string\setThreadInfo}\fi \newarticletrue\set@rectart} % \end{macrocode} % The only difference between \DescribeMacro{\cArticle}\cmd{\cArticle} and % \cmd{\bArticle} is the stepping of the counter \cmd{\CntArt} % and the setting of the switch \cmd{ifnewarticle}. % \begin{macrocode} \newcommand{\cArticle}{\begingroup\newarticlefalse\set@rectart} % \end{macrocode} % \cmd{\set@rectart} continues \cs{bArticle}/\cs{cArticle}. % \begin{macrocode} \newcommand{\set@rectart}[1]{%\def\fitr@artrect@argi{#1}% dps \edef\temp@exp{\noexpand\setkeys{fitr}{#1}}\temp@exp \set@@rectart} % \end{macrocode} % \cmd{\set@@rectart} is the main command for building the thread. % \begin{macrocode} \def\set@@rectart{\def\fitr@setBL{0pt}% \@ifundefined{ef@Bbox}{\let\fitr@FLB@ction\Bbox}% {\let\fitr@FLB@ction\ef@Bbox}% \get@fitr@dimen{% \parbox[\fitr@@refPt][\fitr@@height]{\fitr@@width}% {\kern0pt\fitr@FLB@ction{\fitr@@width}{\fitr@@height}\kern0pt}% }% \makebox[0pt][l]{\hspace*{\fitr@@shift}\smash{% \raisebox{\fitr@@lift-\fitr@setBL}{% % \end{macrocode} % Actually insert the thread code here by inserting \cs{setThre@d}. % \begin{macrocode} \setThre@d{\artthrd@@addtow}{\artthrd@@addtoh}% \unhbox\fitr@bbox \fitr@urxury@fixup{\artthrd@@addtow}{\artthrd@@addtoh}{}% }}}\setlength{\fboxsep}{0pt}% % \end{macrocode} % Now place an extended border around the viewing area % \begin{macrocode} \ifviewMagWin \fitr@length=\artthrd@@addtow bp \fitr@length=2\fitr@length \addtolength{\fitr@length}{\fitr@@width}% \edef\fitr@@width{\the\fitr@length}% \fitr@length=\artthrd@@addtoh bp \fitr@length=2\fitr@length \addtolength{\fitr@length}{\fitr@@height}% \edef\fitr@@height{\the\fitr@length}% \setlength\fitr@length{-\artthrd@@addtow bp}% \addtolength\fitr@length{\fitr@@shift}% \makebox[0pt][l]{\hspace*{\fitr@length}\smash{% \setlength\fitr@length{\fitr@@lift-\fitr@setBL}% \if\fitr@@refPt b% \addtolength\fitr@length{-\artthrd@@addtoh bp}\else \if\fitr@@refPt t% \addtolength\fitr@length{\artthrd@@addtoh bp}% \fi\fi \raisebox{\fitr@length}% {\fbox{\parbox[\fitr@@refPt][\fitr@@height]% {\fitr@@width}{\kern0pt\hfill\vfill\kern0pt}}}}% }% \fi \endgroup} % \end{macrocode} % \subsection{The driver dependent commands} % We begin with a required definition to enable \app{lualatex} to function correctly. % \begin{macrocode} \ifluatex\protected\def\pdfthread{\pdfextension thread }\fi % \end{macrocode} % \DescribeMacro\AT@ThrBbox\nmpsep{\darg{\ameta{add-wd}\darg{\ameta{add-ht}}}} The definition % of \cmd{\set@rtThrd} depends on the driver. The arguments are dimensionless numbers, representing % Adobe points. The \cs{AT@ThrBbox} macros perform different tasks, one of which is to calculate the dimensions % of the bounding box for the viewing rectangle. It is used in \cs{set@rtThrd}, defined below. % \changes{v1.3}{2020/07/03}{Add special definition for threads in the case of lualatex} % \changes{v1.3}{2020/07/03}{Added \string\cs{Thread}} % \begin{macrocode} \if@fitr@dvipdfm % \end{macrocode} % For the \app{xelatex} and friends % \begin{macrocode} \def\AT@ThrBbox#1#2{% \fitr@length=#1bp \fitr@length=2\fitr@length \advance\fitr@length\wd\fitr@bbox \edef\fitr@xetex@view@width{\the\fitr@length}% \fitr@length=#2bp \advance\fitr@length\ht\fitr@bbox \edef\fitr@xetex@view@height{\the\fitr@length}% \fitr@length=#2bp \advance\fitr@length\dp\fitr@bbox \edef\fitr@xetex@view@depth{\the\fitr@length}% }\else \ifpdf % \end{macrocode} % For the \app{pdftex} and friends % \changes{v1.3}{2020/07/03}{Use \string\cs{ifpdf}} % \begin{macrocode} \def\AT@ThrBbox#1#2{% \fitr@length=#1bp \fitr@length=2\fitr@length \advance\fitr@length\wd\fitr@bbox \edef\fitr@pdftex@view@width{\the\fitr@length}% \fitr@length=#2bp \advance\fitr@length\ht\fitr@bbox \edef\fitr@pdftex@view@height{\the\fitr@length}% \fitr@length=#2bp \advance\fitr@length\dp\fitr@bbox \edef\fitr@pdftex@view@depth{\the\fitr@length}% }\else \ifx\fitr@driver\fitr@dvipsone@driver % \end{macrocode} % For the \app{dvipsone} driver % \begin{macrocode} \def\AT@ThrBbox#1#2{% currentpoint 2 copy % \the\fitr@depth\space add #2\space PDFtoTeX add % y1 exch #1\space PDFtoTeX sub exch % x1 4 2 roll exch \the\fitr@width\space add #1\space PDFtoTeX add exch % x2 \the\fitr@height\space sub #2\space PDFtoTeX sub} % y2 \else \ifx\fitr@driver\fitr@dvips@driver % \end{macrocode} % For the \app{dvips} driver % \begin{macrocode} \def\AT@ThrBbox#1#2{% Uses \fitr@bbox currentpoint 2 copy % \the\fitr@depth\space SPtoDvips add #2\space BPToDvips add % y1 exch #1\space BPToDvips sub exch % x1 4 2 roll exch \the\fitr@width\space SPtoDvips add #1\space BPToDvips add exch % x2 \the\fitr@height \space SPtoDvips sub #2\space BPToDvips sub} % y2 \fi\fi\fi\fi % \end{macrocode} % \paragraph*{Code to set the thread} The \cs{setThre@d} macros are driver dependent. % \medskip\par\noindent % \DescribeMacro\setThre@d\nmpsep{\darg{\ameta{add-wd}\darg{\ameta{add-ht}}}} This macro % strips out the dimensions of its arguments (10bp becomes 10) and passes these new arguments % to \cmd{\set@rtThrd}. % \begin{macrocode} \def\setThre@d#1#2{% \fitr@defaultbp{\aWd}{#1}\fitr@defaultbp{\aHt}{#2}% \edef\tmp@exp{\noexpand\set@rtThrd{\aWd}{\aHt}}\tmp@exp} \if@fitr@dvipdfm % \end{macrocode} % \DescribeMacro\set@rtThrd\nmpsep{\darg{\ameta{add-wd}\darg{\ameta{add-ht}}}} The definition % of \cmd{\set@rtThrd} depends on the driver. The arguments are dimensionless numbers, representing % Adobe points.\medskip\par\noindent % For the \textsf{xelatex} and friends % \begin{macrocode} \def\set@rtThrd#1#2{\AT@ThrBbox{#1}{#2}% \smash{\raisebox{-\fitr@xetex@view@height+#2bp}% {\makebox[0pt][l]{\hspace*{-#1bp}% \@pdfm@mark{thread @artthrd\CntArt\space width \fitr@xetex@view@width\space height \fitr@xetex@view@height\space depth \fitr@xetex@view@depth\space << /Title (\threadTitle) \ifnewarticle /Author (\threadAuthor) /Subject (\threadSubject) /Keywords (\threadKeywords)\fi >>}}}}}\else \ifpdf % \end{macrocode} % For \app{pdftex} and friends % \changes{v1.3}{2020/07/03}{Use \string\cs{ifpdf}} % \begin{macrocode} \def\set@rtThrd#1#2{\AT@ThrBbox{#1}{#2}% \makebox[0pt][l]{\hspace*{-#1bp}% \pdfthread width \fitr@pdftex@view@width\space height \fitr@pdftex@view@height\space depth \fitr@pdftex@view@depth\space name {\threadTitle}}}\else % \end{macrocode} % For drivers that use PostScript and the \textsf{\textbf{pdfmark}}. % \changes{v1.1}{2016/04/09}{Removed the Page key and dependence on the % \string\textsf{refcount} package} % \begin{macrocode} \def\set@rtThrd#1#2{\literalps@out{\artM@rk /Rect [\AT@ThrBbox{\artthrd@@addtow}{\artthrd@@addtoh}] /Title (\threadTitle) \ifnewarticle /Author (\threadAuthor) /Subject (\threadSubject) /Keywords (\threadKeywords)\fi /ARTICLE pdfmark}} \fi\fi % \end{macrocode} % \subsection{Some navigation commands} % \begin{macrocode} \let\threadTitle\@empty % \end{macrocode} % \DescribeMacro{\Thread}\nmpsep{\darg{\ameta{thread-title}}} The action to start % read a thread whose title is \ameta{thread-title}. For example, % |\setLink[\A{\Thread{Lipsum}}]{Read Lipsum}| \medskip % \begin{macrocode} \providecommand{\Thread}[1]{/S/Thread/D(#1)} % \end{macrocode} % \DescribeMacro\shArticlesPaneActn\DescribeMacro\sArticlesPaneActn Actions for show/hid % articles pane and to just show articles pane (The named action \texttt{ArticleThreads} is % undocumented, don't remember show I got this name.) In addition to these two, we combine % them with read thread actions: \DescribeMacro\shArticlesPaneReadActn\DescribeMacro\sArticlesPaneReadActn % \begin{macrocode} \def\shArticlesPaneActn{\Named{ShowHideArticles}} \def\sArticlesPaneActn{\Named{ArticleThreads}} \def\shArticlesPaneReadActn{\shArticlesPaneActn \Next{\Thread{\threadTitle}}} \def\sArticlesPaneReadActn{\sArticlesPaneActn \Next{\Thread{\threadTitle}}} % \end{macrocode} % \DescribeMacro\readArticle\nmpsep{\darg{\ameta{thread-title}}} is a macro intended % to be passed to a push button action through the \cs{cmd} key. For example,\medskip %\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9},commandchars={!()}] %\showArticlePaneRead[!textbf(\cmd{\readArticle{more Lipsum}})]{}{11bp} %\end{Verbatim} %It should be used with \cs{toggleArticlePaneRead} and \cs{showArticlePaneRead} (push buttons). Alternatively, %these actions can be done through a link: %\begin{Verbatim}[xleftmargin=\parindent,codes={\catcode`\%=9},commandchars={!()}] %\setLink[\cmd{\readArticle{Lipsum}} %\A{\shArticlesPaneReadActn}]{Lipsum} %\end{Verbatim} % \begin{macrocode} \def\readArticle#1{\Hy@unicodefalse \pdfstringdef\AT@x{#1}\edef\threadTitle{\AT@x}} \def\chkThreadName{% \ifx\threadTitle\@empty \global\let\isThrTtl\ef@NO \def\readArtPresets{\cmd{\let\Next\@gobble}}\else \global\let\isThrTtl\ef@YES \let\readArtPresets\@empty \fi } \def\readThreadMsg{\ifx\isThrTtl\ef@NO \PackageWarning{artthreads}{No thread title specified to read}\fi} % \end{macrocode} % \DescribeMacro\toggleArticlePane\nmpsep{[\ameta{KV-pairs}]\darg{\ameta{wd}}\darg{\ameta{ht}}} % A push button whose action toggles the Articles pane open and closed. % \begin{macrocode} \newcommand{\toggleArticlePane}[3][]{\stepcounter{@rtBtnCnt}% \pushButton[\CA{Article}\TU{Toggle Articles Pane}#1 \A{\shArticlesPaneActn} ]{TAPBtn\the@rtBtnCnt}{#2}{#3}} % \end{macrocode} % \DescribeMacro\toggleArticlePaneRead\nmpsep{[\ameta{KV-pairs}]\darg{\ameta{wd}}\darg{\ameta{ht}}} % A push button whose action us to toggle the Articles pane state (show/hide) and to begin reading the % thread titled \cs{threadTitle}. If this command is placed after the \cs{setThreadInfo} % command, then \cs{threadTitle} is the title set by the title key of \cs{setThreadInfo}. % \begin{macrocode} \def\tooltipTogglePaneRead#1{\def\ttToggleP@neRead{#1}} \tooltipTogglePaneRead{Toggle Articles pane and read the article \threadTitle} \newcommand{\toggleArticlePaneRead}[3][]{\begingroup \stepcounter{@rtBtnCnt}\pushButton[\CA{Article}#1 \TU{\ttToggleP@neRead}\cmd{\chkThreadName} \presets{\readArtPresets}\A{\shArticlesPaneReadActn} ]{TAPRBtn\the@rtBtnCnt}{#2}{#3}\readThreadMsg\endgroup} % \end{macrocode} % \DescribeMacro\showArticlePane\nmpsep{[\ameta{KV-pairs}]\darg{\ameta{wd}}\darg{\ameta{ht}}} A push button % whose action is to show the Articles pane. % \begin{macrocode} \newcommand{\showArticlePane}[3][]{\stepcounter{@rtBtnCnt}% \pushButton[\CA{Article}\TU{Show Articles Pane}#1 \A{\sArticlesPaneActn} ]{SAPBtn\the@rtBtnCnt}{#2}{#3}} % \end{macrocode} % \DescribeMacro\showArticlePaneRead\nmpsep{[\ameta{KV-pairs}]\darg{\ameta{wd}}\darg{\ameta{ht}}} % A push button whose action is to show the Articles and to begin reading the % thread titled \cs{threadTitle}. If this command is placed after the \cs{setThreadInfo} % command, then \cs{threadTitle} is the title set by the title key of \cs{setThreadInfo}. % \begin{macrocode} \def\tooltipShowPaneRead#1{\def\ttShowP@neRead{#1}} \tooltipShowPaneRead{Show Articles pane and read the article \threadTitle} \newcommand{\showArticlePaneRead}[3][]{\begingroup \stepcounter{@rtBtnCnt}\pushButton[\CA{Article}#1 \TU{\ttShowP@neRead}\cmd{\chkThreadName} \presets{\readArtPresets}\A{\sArticlesPaneReadActn} ]{SAPRBtn\the@rtBtnCnt}{#2}{#3}\readThreadMsg\endgroup} % \end{macrocode} % \begin{macrocode} % % \end{macrocode} %\Finale \endinput