summaryrefslogtreecommitdiff
path: root/texmf-dist/source
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2018-09-13 10:30:12 +0900
committerNorbert Preining <norbert@preining.info>2018-09-13 10:30:12 +0900
commit540647baf7d7dbdd6a7c355f920fcf90bd296c65 (patch)
treeeb933cbdb22a0fa4ae9a7044f6d9047bc85d7d54 /texmf-dist/source
parent26f4947f509c2440ce28e625133a15f6a2446920 (diff)
aeb-mlink update
Diffstat (limited to 'texmf-dist/source')
-rw-r--r--texmf-dist/source/latex/aeb-mlink/aeb_mlink.dtx919
-rw-r--r--texmf-dist/source/latex/aeb-mlink/aeb_mlink.ins2
-rw-r--r--texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.pdfbin129039 -> 0 bytes
-rw-r--r--texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.tex873
4 files changed, 502 insertions, 1292 deletions
diff --git a/texmf-dist/source/latex/aeb-mlink/aeb_mlink.dtx b/texmf-dist/source/latex/aeb-mlink/aeb_mlink.dtx
index 7d61b888..5a8b97fe 100644
--- a/texmf-dist/source/latex/aeb-mlink/aeb_mlink.dtx
+++ b/texmf-dist/source/latex/aeb-mlink/aeb_mlink.dtx
@@ -8,16 +8,18 @@
%% 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. %%
+%% macros/latex/base/lppl.txt; either version 1.2 of %%
+%% the License, or (at your option) any later version. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%</copyright>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{aeb_mlink}
-%<package> [2018/04/26 v2.3 AeB MLink (dps)]
+%<package> [2018/08/18 v2.3.4 AeB MLink (dps)]
%<*driver>
\documentclass{ltxdoc}
+\usepackage{xcolor}
\usepackage[colorlinks,hyperindex=false]{hyperref}
+\usepackage{aeb_mlink}
\pdfstringdefDisableCommands{\let\\\textbackslash}%
\OnlyDescription % comment out for implementation details
\EnableCrossrefs
@@ -38,7 +40,7 @@
\def\SUB#1{\ensuremath{{}_{\mbox{\scriptsize\ttfamily#1}}}}
\def\darg#1{\texttt{\char123\relax#1\char125\relax}}
\addtolength{\marginparwidth}{3pt}
- \GetFileInfo{web.sty}
+ \GetFileInfo{aeb_mlink.sty}
\title{The \textsf{aeb\_mlink} Package\texorpdfstring{\\}{: }
A member of the AeB Pro family}
\author{D. P. Story\\
@@ -47,7 +49,6 @@
\maketitle
\tableofcontents
\DocInput{aeb_mlink.dtx}
-
\IfFileExists{\jobname.ind}{\newpage\setupFullwidth\par\PrintIndex}
{\paragraph*{Index} The index goes here. Execute
\[\texttt{makeindex -s gind.ist -o aeb\_mlink.ind aeb\_mlink.idx}\] on the command line and recompile
@@ -56,7 +57,6 @@
{\paragraph*{Change History} The list of changes goes here. Execute
\[\texttt{makeindex -s gglo.ist -o aeb\_mlink.gls aeb\_mlink.glo}\] on the command line and recompile
\texttt{aeb\_mlink.dtx}.}
-
\end{document}
%</driver>
% \fi
@@ -107,19 +107,22 @@
% fact, no \pkg{aeb-mlink}. Here, we provide a `dummy' package by that name which
% passes everything on to \pkg{aeb\_mlink}.
% \begin{macrocode}
+% Begin Alt pkg
%<*altpkgname>
\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{xkeyval}
\ProvidesPackage{aeb-mlink}
[2018/04/26 v1.0 AeB MLink Alt-name (dps)]
-\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{aeb_mlink}}
-\ProcessOptions
-\RequirePackage{aeb_mlink}[2018/03/22]
+\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{aeb_mlink}}
+\ProcessOptionsX
+\RequirePackage{aeb_mlink}[2018/08/18]
%</altpkgname>
% \end{macrocode}
% \section{Package Requirements and Options}
% After having established the alternate of this package, we now work on the package itself.
% \changes{v2.3}{2018/04/26}{Added \string\pkg{aeb-mlink} as an alternate name for this package}
% \begin{macrocode}
+% Begin Package
%<*package>
\RequirePackage{xkeyval}
\RequirePackage{ifpdf}[2006/02/20]
@@ -131,8 +134,8 @@
% Set the driver for \texttt{dvipsone}
% \begin{macrocode}
\DeclareOptionX{dvipsone}{\def\eq@drivernum{0}\@ml@dvipsfalse
- \PassOptionsToPackage{dvipsone}{eforms}
- \PassOptionsToPackage{dvipsone}{hyperref}
+ \PassOptionsToPackage{dvipsone}{eforms}
+ \PassOptionsToPackage{dvipsone}{hyperref}
}
% \end{macrocode}
% \end{macro}
@@ -140,27 +143,28 @@
% Set the driver for \texttt{dvips}
% \begin{macrocode}
\DeclareOptionX{dvips}{\def\eq@drivernum{0}\@ml@dvipstrue
- \PassOptionsToPackage{dvips}{eforms}
- \PassOptionsToPackage{dvips}{hyperref}
+ \PassOptionsToPackage{dvips}{eforms}
+ \PassOptionsToPackage{dvips}{hyperref}
}
\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{eforms}}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
-\newcount\mldblevel \mldblevel=0
+\@ifundefined{mldblevel}{\newcount\mldblevel
+ \mldblevel=0 }{}
\define@key{aeb_mlink.sty}{dblevel}[0]{\mldblevel=#1 }
% \end{macrocode}
% \begin{macrocode}
\def\ml@err@msg{This package requires the driver dvips and\MessageBreak
- Adobe Distiller as the PDF creator}
+ Adobe Distiller as the PDF creator}
\ifpdf\PackageError{aeb_mlink}{\ml@err@msg}\else
- \ifxetex\PackageError{aeb_mlink}{\ml@err@msg}\else
- \let\ExecuteOptions@SAVE\ExecuteOptions
- \let\ExecuteOptions\ExecuteOptionsX
- \InputIfFileExists{web.cfg}{}
- {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
- {\ExecuteOptionsX{dvipsone}}}%
- \let\ExecuteOptions\ExecuteOptions@SAVE
+ \ifxetex\PackageError{aeb_mlink}{\ml@err@msg}\else
+ \let\ExecuteOptions@SAVE\ExecuteOptions
+ \let\ExecuteOptions\ExecuteOptionsX
+ \InputIfFileExists{web.cfg}{}
+ {\@ifundefined{l@tex@@@@driver}{\ExecuteOptionsX{dvips}}
+ {\ExecuteOptionsX{dvipsone}}}%
+ \let\ExecuteOptions\ExecuteOptions@SAVE
\fi\fi
\ProcessOptionsX
% \end{macrocode}
@@ -174,7 +178,7 @@
% link options that are defined. These are \cs{mlfix}, \cs{mlstrut}, \cs{mlcrackat} and
% \cs{mlhyph}.
% \begin{macrocode}
-\RequirePackage{eforms}[2018/03/22]
+\RequirePackage{eforms}[2018/08/16]
\RequirePackage{soul}
% \end{macrocode}
%
@@ -203,9 +207,10 @@
\def\smallRectTF{\ifoldstylequads false\else
\iffixmlinks true\else false\fi\fi\space
\ifSmallRect true\else false\fi\space and}
+\def\ml@@nnotName{mLink} % dps
\def\mllnkcontainer#1{bCreateLink { xoMsgB {
\smallRectTF\space mlRectFix^^J%
- #1}if}{\the\aeb@mLinkCnt\space mlIsBldMsg}ifelse}
+ #1}if}{(\ml@@nnotName\the\aeb@mLinkCnt) mlIsBldMsg}ifelse}
% \end{macrocode}
% \cs{pboxRect} is defined in \pkg{eforms}
% \begin{macrocode}
@@ -216,8 +221,8 @@
% This next \cs{special} defines some standard conversion
% formulas, {\TeX} to PDF and PDF to {\TeX} for \textsf{dvips}.
% \begin{macrocode}
-\def\mlDict{SDict}
-\special{!userdict begin
+ \def\mlDict{SDict}
+ \special{!userdict begin
/TeXtoPDF {65536 div DVImag mul} def % sp to pts
/PDFtoDvips {72.27 div Resolution mul} def % points to dots
/PDFtoVDvips {72.27 div VResolution mul} def % points to dots
@@ -229,62 +234,61 @@
/PDFtoTeX {PDFtoDvips} def^^J%
/pf{print flush}def^^J%
/bop-hook{ \pgmonitoring\space } def
-end}
-
+ end}
% \end{macrocode}
% This command calculates the \cs{QuadPoints} array
% when we are using the \textsf{dvips} driver.
% \begin{macrocode}
-\def\setQuadBox{%
+ \def\setQuadBox{%
currentpoint DvipstoPDF \aeb@bbox@dp\space TeXtoPDF add
neg vsize add 72 sub % y1
exch DvipstoPDF 72 add exch % x1
2 copy exch \aeb@bbox@wd\space TeXtoPDF add exch % x2
2 copy \aeb@bbox@ht\space TeXtoPDF add % y3
2 copy exch \aeb@bbox@wd\space TeXtoPDF sub exch % x4
-}
+ }
% \end{macrocode}
% For the bounding rectangle, we just enclose the entire page. This
% simplifies things greatly.
% \begin{macrocode}
-\def\par@@Rect
-{%
+ \def\par@@Rect
+ {%
72 neg PDFtoDvips vsize 72 sub PDFtoVDvips
hsize 72 sub PDFtoDvips 72 neg PDFtoVDvips
-}
+ }
% \end{macrocode}
% \textsf{\textbf{dvipsone} driver:} Code for the \textsf{dvipsone} driver
% This next \cs{special} defines some standard conversion
% formulas, {\TeX} to PDF and PDF to {\TeX} in the \textsf{YandY {\TeX} System}.
% \begin{macrocode}
\else
-\def\mlDict{dvidict}
-\special{!/TeXtoPDF {65536 div mag 1000 div mul} def
- /PDFtoTeX {65536 mul mag 1000 div div} def^^J%
- /pf{print flush}def^^J%
- /bphook{ \pgmonitoring\space } def^^J%
-}
+ \def\mlDict{dvidict}
+ \special{!/TeXtoPDF {65536 div mag 1000 div mul} def
+ /PDFtoTeX {65536 mul mag 1000 div div} def^^J%
+ /pf{print flush}def^^J%
+ /bphook{ \pgmonitoring\space } def^^J%
+ }
% \end{macrocode}
% This command calculates the \cs{QuadPoints} array
% when we are using the \textsf{dvipsone} driver.
% \begin{macrocode}
-\def\setQuadBox{%
- currentpoint \aeb@bbox@dp\space add TeXtoPDF
- neg PageHeight add 72 sub % y1
- exch TeXtoPDF 72 add exch % x1
- 2 copy exch \aeb@bbox@wd\space TeXtoPDF add exch % x2
- 2 copy \aeb@bbox@ht\space TeXtoPDF add % y3
- 2 copy exch \aeb@bbox@wd\space TeXtoPDF sub exch % x4
-}
+ \def\setQuadBox{%
+ currentpoint \aeb@bbox@dp\space add TeXtoPDF
+ neg PageHeight add 72 sub % y1
+ exch TeXtoPDF 72 add exch % x1
+ 2 copy exch \aeb@bbox@wd\space TeXtoPDF add exch % x2
+ 2 copy \aeb@bbox@ht\space TeXtoPDF add % y3
+ 2 copy exch \aeb@bbox@wd\space TeXtoPDF sub exch % x4
+ }
% \end{macrocode}
% For the bounding rectangle, we just enclose the entire page. This
% simplifies things greatly.
% \begin{macrocode}
-\def\par@@Rect
-{%
- 72 neg PDFtoTeX PageHeight 72 sub PDFtoTeX
- PageWidth 72 sub PDFtoTeX 72 neg PDFtoTeX
-}
+ \def\par@@Rect
+ {%
+ 72 neg PDFtoTeX PageHeight 72 sub PDFtoTeX
+ PageWidth 72 sub PDFtoTeX 72 neg PDFtoTeX
+ }
\fi
% \end{macrocode}
%
@@ -295,6 +299,7 @@ end}
\newbox\aeb@bbox
\newcount\aeb@arrayIndx \aeb@arrayIndx=0
\newcount\aeb@mLinkCnt \aeb@mLinkCnt=0
+\newcount\syllableCnt \syllableCnt=0
\newif\ifmllinktotalchanged\mllinktotalchangedfalse
% \end{macrocode}
% When \cs{ifSmallRect} is true (the default), the smallest possible \texttt{Rect}
@@ -304,7 +309,7 @@ end}
\newif\ifSmallRect \SmallRecttrue
\AtEndDocument{\wrtmlinktot@l\ckchngmlinktot@l\wrt@linksnotformed}
\def\wrt@linksnotformed{\iflinknotformed
- \PackageWarningNoLine{aeb_mlinks}{Some link calculations are not
+ \PackageWarningNoLine{aeb_mlink}{Some link calculations are not
complete.\MessageBreak
DO NOT CONVERT TO PDF at this time. Compile at \MessageBreak
least twice more}\fi}
@@ -330,13 +335,13 @@ end}
\def\ml@nocolorLineWidth{1}
\def\ml@setnocolorDefaults{%
\def\ml@nocolor@defaults{\H{\ml@nocolorHighlight}%
- \S{\ml@nocolorLineStyle}\W{\ml@nocolorLineWidth}%
- \Color{\CurrentBorderColor}}%
+ \S{\ml@nocolorLineStyle}\W{\ml@nocolorLineWidth}%
+ \Color{\CurrentBorderColor}}%
}
\ifHy@colorlinks
- \let\ml@nocolor@defaults\@empty
+ \let\ml@nocolor@defaults\@empty
\else
- \ml@setnocolorDefaults
+ \ml@setnocolorDefaults
\fi
\def\ml@earlyExecProps#1{%
\eq@setWidgetProps\relax{#1}%
@@ -362,6 +367,9 @@ end}
\def\mldbModeOff{\def\mldb##1##2{}}
\def\mldb#1#2{\ifnum#1<\mldblevel#2\fi}
\def\ml@adj@x{2}\def\ml@adj@y{2}
+\def\mlMaxNSylls{30}
+% usage \mlcrackinsat{\removelastspace}
+\def\removelastspace{\hskip-\fontdimen2\font}
\AtBeginDvi{\special{!%
% \end{macrocode}
% \paragraph*{Begin Postscript code} This code is executed as the PDF is created
@@ -377,35 +385,47 @@ end}
% of 17 as a way of testing whether an array size has been updated. All arrays
% are set to 17 in length initially.
% \begin{macrocode}
-/mlIsBld 17 def
-/mlIsBldMsg {
- /lnkCnt exch def
- (\string\n!! mLink)pf
- lnkCnt 20 string cvs pf
+/mlIsBld 17 def^^J%
+/mlIsBldMsg {^^J%
+ /sName exch def^^J%
+ (\string\n!! )pf
+ sName 20 string cvs pf
( is not completely formed,
- compile again!!\string\n)pf
-} def
+ compile again!!\string\n)pf^^J%
+} def^^J%
/xoMsgB true def^^J%
/xoMsg {^^J%
- /lnkCnt exch def^^J%
/Indx exch def^^J%
+ /sName exch def^^J%
/nSyllable Indx 8 div def^^J% dpsa08
(!!------------------------------------------------------------------%
\string\n Warning:\string\n
- The text of mLink)pf
- lnkCnt 20 string cvs pf
+ The text of )pf
+ sName 20 string cvs pf
( has crossed a page boundary from page )pf
PhysicalPage 1 sub 10 string cvs pf
( to ) pf PhysicalPage 10 string cvs pf
- (.\string\n Cross page links are not supported by the
+ sName 0 1 getinterval (m) eq {
+ (.\string\n Cross page links are not supported by the
PDF Specification)pf
- (.\string\n This link is not constructed,
- please fix it.\string\n) pf
- (Break point is after syllable number )pf
- nSyllable cvi 20 string cvs pf (.\string\n)pf
- (Use the \string\\mlcrackat{)pf
- nSyllable cvi 20 string cvs pf
- (} option with this link.\string\n)pf
+ (.\string\n This link is not constructed,
+ please fix it.\string\n)pf
+ (Break point is after syllable number )pf
+ nSyllable cvi 20 string cvs pf (.\string\n)pf
+ (Use the \string\\mlcrackat{)pf
+ nSyllable cvi 20 string cvs pf
+ (} option with this link.\string\n)pf
+ }{
+ (.\string\n Cross page annotations are not supported by the
+ PDF Specification)pf
+ (.\string\n This annotation is not constructed,
+ please fix it.\string\n)pf
+ (Break point is after syllable number )pf
+ nSyllable cvi 20 string cvs pf (.\string\n)pf
+ (Use the mlcrackat=)pf
+ nSyllable cvi 20 string cvs pf
+ ( option with this annotation.\string\n)pf
+ } ifelse
(!!------------------------------------------------------------------%
\string\n)pf^^J%
} def^^J%
@@ -416,9 +436,9 @@ end}
/quadpointsfixup {^^J%
/ary exch def^^J%
/quadL exch def^^J%
- /lnkCnt exch def^^J%
-\mldb0{(Processing mLink)pf^^J}%
-\mldb0{lnkCnt 20 string cvs pf (: OK\string\n) pf^^J}%
+ /sName exch def^^J%
+\mldb0{(Processing )pf sName pf (: OK\string\n)pf^^J}%
+%\mldb0{lnkCnt 20 string cvs pf (: OK\string\n) pf^^J}%
quadL 0 eq {
(Problems with this link, length=0,
will skip the creation of this link)pf^^J%
@@ -437,7 +457,7 @@ quadL 0 eq {
\mldb1{flush (\string\n) pf^^J}%
/gN 0 def^^J%
% \end{macrocode}
-% \texttt{gMrk} is an array that will hold the offsets into \texttt{mLinkFxup<num>}. Each
+% \texttt{gMrk} is an array that will load the offsets into \texttt{mLinkFxup\ameta{num}}. Each
% offset is the beginning of a line. We initially set the length of the array to 10, though
% this may not be correct. That is, we assume the hypertext will not exceed 10 lines in length.
% \begin{macrocode}
@@ -455,7 +475,7 @@ gMrk 0 0 put^^J%
\mldb2{(Begin first for\string\n) pf^^J}%
% \end{macrocode}
% Begin a for loop\marginpar{\raggedleft for loop}. The purpose of this loop is to search
-% through the quad points of \texttt{mLinkFxup<num>} and find the offsets into the
+% through the quad points of \texttt{mLinkFxup\ameta{num}} and find the offsets into the
% structure where the line breaks occur.
% \begin{macrocode}
0 8 quadL 8 sub {^^J%
@@ -485,7 +505,7 @@ gMrk 0 0 put^^J%
% \end{macrocode}
% The two entries differ, so a line break must have occurred. We inert value
% of \texttt{gIndx} into \texttt{gMrk}. \texttt{gIndx} is essentially the offset
-% into \texttt{mLinkFxup<num>} where the line break occurs.
+% into \texttt{mLinkFxup\ameta{num}} where the line break occurs.
% \begin{macrocode}
gMrk gMrkL gIndx put^^J%
% \end{macrocode}
@@ -517,21 +537,25 @@ gMrk 0 0 put^^J%
% in the \texttt{gMrk} array. Now, if there are now line breaks, the length
% of \texttt{gMrk} is one
%
-% \texttt{gAry} is an temporary array what holds all the quads corresponding to
-% one line. Each syllable generates an quad of length 8. Here, we assume any given
-% line has at most 20 syllables, this may be revised. The array \texttt{gAry} is declared
-% inside the next loop, so it is redeclared at each iteration of the loop.
-% \begin{macrocode}
- /gAryL 8 20 mul def^^J% limitation
+% \texttt{gAry} is a temporary array that holds all the quads \emph{corresponding to
+% one line}. Each syllable generates an quad of length 8. Here, we assume any given
+% line has at most \cs{mlMaxNSylls} syllables, (currently set to \mlMaxNSylls, but may be revised). The array \texttt{gAry} is declared
+% inside the next loop, so it is redeclared at each iteration of the loop. If \app{Distiller} of \app{ps2pdf}
+% fails, it may be due to \cs{mlMaxNSylls} being too small for some of your sentences; in this case, redefine
+% \cs{mlMaxNSylls} to a larger value.
+% \changes{v2.3.2}{2018/08/09}{\string\cs{mlMaxNSylls} now sets the array size of gAryL}
+% \begin{macrocode}
+ /gAryL 8 \mlMaxNSylls\space mul def^^J% limitation
\mldb2{(gAryL=) pf gAryL 20 string cvs pf^^J}%
\mldb2{(\string\n)pf^^J}%
% \end{macrocode}
-% \texttt{gFixup} is an array that will old the final combined quad points, this array
+% \texttt{gFixup} is an array that will hold the final combined quad points, this array
% is the one that will be referenced by the \texttt{QuadPoints} entry of the link annotation.
% It's length is set to 8 times the number of lines over which the hypertext is broken (\texttt{gMrkL})
% One quad for each line, rather than many quads, one for each syllable.
% \begin{macrocode}
- /gFixup 8 gMrkL mul array def^^J%
+ /gFixup 8 gMrkL mul array def^^J% links
+ /aFixup 8 gMrkL mul array def^^J% text markup annotations
/gOffset 0 def^^J%
\mldb2{(for loop: gMrkL=)pf gMrkL 20 string cvs pf^^J}%
\mldb2{(\string\n) pf^^J}%
@@ -566,12 +590,12 @@ gIndx 1 add gMrkL eq {^^J%
\mldb2{(gCount=)pf gCount 20 string cvs pf^^J}%
\mldb2{(\string\n)pf^^J}%
% \end{macrocode}
-% We want to copy a slice of \texttt{mLinkFxup<num>}, we declare the next
+% We want to copy a slice of \texttt{mLinkFxup\ameta{num}}, we declare the next
% array of length \texttt{gCount} just computed.
% \begin{macrocode}
/sliceOfLinkfxup gCount array def^^J%
% \end{macrocode}
-% Populate this array with a slice of \texttt{mLinkFxup<num>} beginning at
+% Populate this array with a slice of \texttt{mLinkFxup\ameta{num}} beginning at
% \texttt{gMrk[gIndx]} and including the subsequent \texttt{gCount} entries.
% array of length \texttt{gCount} just computed.
% \begin{macrocode}
@@ -592,23 +616,39 @@ sliceOfLinkfxup 0 ary gMrk gIndx get^^J%
\mldb1{gAry 6 get 20 string cvs pf (\string\n)pf^^J}%
\mldb1{gAry 7 get 20 string cvs pf (\string\n)pf^^J}%
gFixup gOffset [^^J%
- gAry 0 get ^^J% x1 ll
- gAry 1 get^^J% y1 ll
- gAry gCount 1 sub 5 sub get^^J% x2 lr
- gAry gCount 1 sub 4 sub get^^J% y2 lr
- gAry gCount 1 sub 3 sub get^^J% x3 ur
- gAry gCount 1 sub 2 sub get^^J% y3 ur
- gAry 6 get^^J% x4 ul
- gAry 7 get^^J% y4 ul
+ gAry 0 get ^^J% x1 ll 1
+ gAry 1 get^^J% y1 ll 1
+ gAry gCount 1 sub 5 sub get^^J% x2 lr 2
+ gAry gCount 1 sub 4 sub get^^J% y2 lr 2
+ gAry gCount 1 sub 3 sub get^^J% x3 ur 3
+ gAry gCount 1 sub 2 sub get^^J% y3 ur 3
+ gAry 6 get^^J% x4 ul 4
+ gAry 7 get^^J% y4 ul 4
+ ] putinterval^^J%
+% \end{macrocode}
+% When forming quad points for text markup annotations, the PDF reference is not followed. We have
+% to reorder the array \texttt{gFixup} to conform to how Acrobat/Reader expect it. Entries 0 and 4
+% are increased by the same amount that was subtracted out earlier in
+% \changes{v2.3.2}{2018/08/09}{Form the array \string\texttt{aFixup} for \string\pkg{aeb\_mlink}}
+% \begin{macrocode}
+ aFixup gOffset [^^J%
+ gAry 6 get gOffset 0 eq {\ml@adj@x\space add}if^^J% x4 ul 4
+ gAry 7 get^^J% y4 ul 4
+ gAry gCount 1 sub 3 sub get^^J% x3 ur 3
+ gAry gCount 1 sub 2 sub get^^J% y3 ur 3
+ gAry 0 get gOffset 0 eq {\ml@adj@x\space add}if^^J% x1 ll 1
+ gAry 1 get 1 sub^^J% y1 ll 1
+ gAry gCount 1 sub 5 sub get^^J% x2 lr 2
+ gAry gCount 1 sub 4 sub get 1 sub^^J% y2 lr 2
] putinterval^^J%
/gOffset gOffset 8 add def^^J%
} for^^J%
\mldb2{(End of second for\string\n) pf^^J}%
} ifelse
- } def^^J%
+} def^^J%
% \end{macrocode}
% \texttt{smallquadpointsfixup} fixes up the bounding boxes. Raises their heights
-% by \cs{ml@adj@y}, and moves the left boundary \cs{ml@adj@x} to the left.
+% by \cs{ml@adj@y} (removed), and moves the left boundary \cs{ml@adj@x} to the left.
% \changes{v2.1.2}{2018/03/09}{Added PS proc \string\texttt{smallquadpointsfixup}}
% \begin{macrocode}
/smallquadpointsfixup {^^J%
@@ -618,14 +658,14 @@ sliceOfLinkfxup 0 ary gMrk gIndx get^^J%
/quadL exch def^^J%
/gSFup 8 array def^^J%
gSFup 0 ary 0 gIndx add get
- gIndx 0 eq {\ml@adj@x\space sub} if put^^J% x1
+ gIndx 0 eq {\ml@adj@x\space sub} if put^^J% x1
gSFup 1 ary 1 gIndx add get put^^J% y1
gSFup 2 ary 2 gIndx add get put^^J% x2
gSFup 3 ary 3 gIndx add get put^^J% y2
gSFup 4 ary 4 gIndx add get put^^J% x3
gSFup 5 ary 5 gIndx add get put^^J%
gSFup 6 ary 6 gIndx add get
- gIndx 0 eq {\ml@adj@x\space sub} if put^^J% x4
+ gIndx 0 eq {\ml@adj@x\space sub} if put^^J% x4
gSFup 7 ary 7 gIndx add get put^^J%
ary gIndx gSFup putinterval^^J%
} def^^J%
@@ -693,15 +733,17 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% plus a little.
% \changes{v2.1.9}{2018/03/22}{Changed the definition of \cs{ml@MrkLnk}}
% \begin{macrocode}
+\def\MrkLnkLtr{L}
\def\ml@MrkLnk#1{\ifmlmarks\bgroup\ifdim\baselineskip=0pt
- \setbox\z@\hbox{T}\def\ml@raiseamt{\ht\z@+.4pt}\else
- \def\ml@raiseamt{.6\baselineskip}\fi\smash{\rlap{\normalcolor\bfseries
- \raisebox{\ml@raiseamt}{\tiny\strut{L#1}}}}\egroup\fi}
+ \setbox\z@\hbox{T}\gdef\ml@raiseamt{\ht\z@+.4pt}\else
+ \gdef\ml@raiseamt{.6\baselineskip}\fi\smash{\rlap{\normalfont\normalcolor\bfseries
+ \raisebox{\ml@raiseamt}{\tiny\strut{\MrkLnkLtr#1}}}}\egroup\fi}
\newif\iflinknotformed \linknotformedfalse
+\newif\ifcr@ckit \cr@ckitfalse
\def\ml@underlinded{U}
% \end{macrocode}
% \begin{macro}{\mlhypertext}
-%
+% \leavevmode\hskip-\marginparsep\texttt{[\ameta{opts}]\darg{\ameta{text}}}
% This is a general purpose hypertext link. Not only is it
% a fine stand-alone linking command, but it also serves
% as a building block to some convenience commends that follow.
@@ -709,21 +751,23 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% The commands takes two arguments, the first an optional one the second
% one requires.
% \begin{enumerate}
-% \item[\texttt{[\#1]}] A standard optional argument for \pkg{eforms}, to change
+% \item[\texttt{\ameta{opts}}] (Optional) A standard optional argument for \pkg{eforms} to change
% the appearance of the link and/or to include actions.
-% \item[\texttt{\#2}] The text to be enclosed in a link.
+% \item[\texttt{\ameta{text}}] The text to be enclosed by the link.
% \end{enumerate}
% The most recently, \pkg{eforms} defines \cs{mlhypertext} to a warning
% message. So if \cs{mlhypertext} is already defined, we \cs{renewcommand}
% else we \cs{newcommand}.
% \changes{v2.1.17}{2018/04/19}{added conditional command definition for \string\cs{mlhypertext}}
+% \changes{v2.3.1}{2018/07/18}{added \string\cs{hglue0pt} to add some hard glue just before
+% the beginning of \string\cs{mlhypertext}}
% \begin{macrocode}
\@ifundefined{mlhypertext}{\newcommand}{\renewcommand}%
-{\mlhypertext}[2][]{\begingroup
+{\mlhypertext}[2][]{\hglue0pt\begingroup
+ \global\ml@displaytrue
\toks@=\expandafter{#2}%
\edef\ml@HytextArg{{\the\toks@}}%
- \global\aeb@arrayIndx=\z@ % dpsa08
-% \global\advance\aeb@mLinkCnt\@ne\relax
+ \global\aeb@arrayIndx=\z@
\def\ml@setlink##1{\setLinkPbox{%
\QuadPoints{mLink##1}#1}}%
\expandafter\processAppArgs\set@LinkPboxDefaults
@@ -743,32 +787,45 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% \begin{macrocode}
\global\advance\aeb@mLinkCnt\@ne\relax
\def\ml@next{\mlhypertext@i{#1}}%
- \else
-% \end{macrocode}
-% We need to crack this link up into two
-% \begin{macrocode}
- \edef\temp@crackAt{\noexpand
- \crackAt{\eq@mlcrackat}{\the\toks@}}\temp@crackAt
- \def\ml@next{\mlhypertext[#1\mlignore{}]{\the\mlfrstoftwo}%
- \eq@mlcrackinsat\penalty-50
- \mlhypertext[#1\mlignore{}]{\the\mlsndoftwo}\aftergroup
+ \else % \eq@mlcrackat not \@empty
+% \end{macrocode}
+% \textbf{Crack it up.} We define \cs{ml@next} to call \cs{mlhypertext} consecutively;
+% the first time we specify |\mlignore{0}| to indicate this link
+% is the first part, and then |mlignore{1}| to indicate the second part.
+% For the first part, we proceed as usual until we get the the syllable
+% number specified by \cs{mlcrackAt}, then we continue with the next
+% \cs{mlhypertext} command, we remove all content up to the syllable number
+% \cs{mlcrackAt}, and typeset the rest; for example,
+%\begin{quote}
+%This is a test sentence that \textcolor{gray}{we want to break across pages.} (1)\\
+%\textcolor{gray}{This is a test sentence that} we want to break across pages. (2)
+%\end{quote}
+%The first link produces the typeset material in (1), where grayed-out text are removed; while
+%the second link produces line (2), again, with the grayed-out material removed.
+% \begin{macrocode}
+ \def\ml@next{\global\ml@displaytrue\let\ml@space\space
+ \mlhypertext[#1\mlignore{0}]{#2}\eq@mlcrackinsat
+ \penalty-100 \cr@ckittrue
+ \global\ml@displayfalse\let\ml@space\space
+ \mlhypertext[#1\mlignore{1}]{#2}\aftergroup
\normalcolor\endgroup}%
- \fi\fi
- \ml@next
+ \fi
+ \fi
+ \ml@next
}
\def\mlhypertext@i#1{%
\@ifundefined{mLinkLngth\the\aeb@mLinkCnt}{\global
- \linknotformedtrue\def\lngth{17}}
- {\edef\lngth{\@nameuse{mLinkLngth\the\aeb@mLinkCnt}}}%
- \ml@start@link{\the\aeb@mLinkCnt}{\lngth}% Step 1
+ \linknotformedtrue\def\ml@lngth{17}}
+ {\edef\ml@lngth{\@nameuse{mLinkLngth\the\aeb@mLinkCnt}}}%
+ \ml@start@link{\the\aeb@mLinkCnt}{\ml@lngth}% Step 1
\def\mlh@preambleCmdInsert{%
\ml@MrkLnk{\the\aeb@mLinkCnt}\ml@earlyExecProps{#1}}%
\def\mlh@postambleCmd{\endgroup}%
% \end{macrocode}
-% Start \pkg{soul} on hypertext
+% Start \pkg{soul} on \cs{mlhypertext} (\cs{aeb@mlh})
% \begin{macrocode}
\expandafter\aeb@mlh\ml@HytextArg
- \ml@finish@link{\the\aeb@mLinkCnt}{\lngth}%
+ \ml@finish@link{\the\aeb@mLinkCnt}{\ml@lngth}%
\ml@setlink{\the\aeb@mLinkCnt}%
\ifoldstylequads\else
\iffixmlinks\literalps@out{restore}\fi\fi
@@ -784,42 +841,43 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% #2 = quad total
% #3 = link cnt
% #4 = content
- \setbox\aeb@bbox=\hbox{\ml@strut#4}%
- {%
- \setbox\@tempboxa\hbox{\ml@strut}%
- \ifx\itsunderline\ef@YES\@tempdima1bp\relax\else
- \@tempdima\dp\@tempboxa \ifdim\@tempdima>2bp
- \advance\@tempdima-2bp\fi
- \fi
- \dp\aeb@bbox\@tempdima
- \@tempdima\ht\@tempboxa \advance\@tempdima\dp\aeb@bbox
- \advance\@tempdima1bp
- \ht\aeb@bbox\@tempdima\def\x{\the\count\z@}%
- \count\z@=\ht\aeb@bbox\xdef\aeb@bbox@ht{\x}%
- \count\z@=\wd\aeb@bbox\xdef\aeb@bbox@wd{\x}%
- \count\z@=\dp\aeb@bbox\xdef\aeb@bbox@dp{\x}%
+ \setbox\aeb@bbox=\hbox{\ml@strut#4}%
+ {%
+ \setbox\@tempboxa\hbox{\ml@strut}%
+ \ifx\itsunderline\ef@YES\@tempdima1bp\relax\else
+ \@tempdima\dp\@tempboxa \ifdim\@tempdima>2bp
+ \advance\@tempdima-2bp\fi
+ \fi
+ \ifx\isstrikeout\ef@YES\advance\@tempdima-2bp\fi
+ \dp\aeb@bbox\@tempdima
+ \@tempdima\ht\@tempboxa \advance\@tempdima\dp\aeb@bbox
+ \advance\@tempdima1bp
+ \ht\aeb@bbox\@tempdima\def\x{\the\count\z@}%
+ \count\z@=\ht\aeb@bbox\xdef\aeb@bbox@ht{\x}%
+ \count\z@=\wd\aeb@bbox\xdef\aeb@bbox@wd{\x}%
+ \count\z@=\dp\aeb@bbox\xdef\aeb@bbox@dp{\x}%
+ }%
+ \ifoldstylequads
+ \literalps@out{%
+ bCreateLink {^^J%
+ \mlDict\space/mLinkFxup#3\space known {^^J%
+ \ps@mark{mLink#3}
+ \the\aeb@arrayIndx\space [\setQuadBox]
+ \space /PUTINTERVAL pdfmark}{^^J%
+ xoMsgB {
+ /xoMsgB false def
+ (\ml@@nnotName\the\aeb@arrayIndx)
+ #3\space
+ xoMsg % dpsa08
+ } if^^J% xoMsgB
+ } ifelse } if
}%
- \ifoldstylequads
- \literalps@out{%
- bCreateLink {^^J%
- \mlDict\space/mLinkFxup#3\space known {^^J%
- \ps@mark{mLink#3}
- \the\aeb@arrayIndx\space [\setQuadBox]
- \space /PUTINTERVAL pdfmark}{^^J%
- xoMsgB {
- /xoMsgB false def
- \the\aeb@arrayIndx\space
- #3\space
- xoMsg % dpsa08
- } if^^J% xoMsgB
- } ifelse } if
- }%
- \else
- \literalps@out{%
- bCreateLink {^^J%
- \mlDict\space/mLinkFxup#3\space known {^^J%
- mLinkFxup#3\space
- #1\space[\setQuadBox] putinterval^^J%
+ \else
+ \literalps@out{%
+ bCreateLink {^^J%
+ \mlDict\space/mLinkFxup#3\space known {^^J%
+ mLinkFxup#3\space
+ #1\space[\setQuadBox] putinterval^^J%
% \end{macrocode}
% Initiate fix up of little rectangles
% \begin{macrocode}
@@ -829,13 +887,12 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
#1\space
smallquadpointsfixup }{^^J%
xoMsgB {
- /xoMsgB false def
-% \the\aeb@arrayIndx\space
- #1\space
- #3\space
- xoMsg % dpsa08
+ /xoMsgB false def
+ (\ml@@nnotName#3)
+ #1\space
+ xoMsg % dpsa08
} if^^J% xoMsgB
- } ifelse } if
+ } ifelse } if
}%
\fi
\global\advance\aeb@arrayIndx8\relax
@@ -846,21 +903,17 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% \cs{labelRef} and \cs{atPage} are public, and can be used.
% \begin{macrocode}
\def\aeb@exiii{\expandafter\expandafter\expandafter}
-%\def\aebnameref#1{\getrefbykeydefault{#1}{name}{??}}
\def\aebnameref#1{\@ifundefined{r@#1}{??}
{\aeb@exiii\@thirdoffive\csname r@#1\endcsname}}
-%\def\labelRef#1{\getrefbykeydefault{#1}{}{Doc-Start}}
\def\labelRef#1{\@ifundefined{r@#1}{Doc-Start}
{\aeb@exiii\@fourthoffive\csname r@#1\endcsname}}
\def\atPage#1{\getrefbykeydefault{#1}{page}{??}}
-%\def\atPage#1{\@ifundefined{r@#1}{1}
-% {\aeb@exiii\@secondoffive\csname r@#1\endcsname}}
% \end{macrocode}
% \begin{macro}{\mlhyperlink}
% \begin{macro}{\mlhyperref}
% \begin{macro}{\mlnameref}
% \begin{macro}{\mlNameref}
-% These four commands mimic the hyperref commands of the same root name.
+% These four commands mimic the \pkg{hyperref} commands of the same root name.
% The commands \cs{mlhyperlink} and \cs{mlhyperref} take three
% parameters (the first one optional). The optional parameter
% modifies the appearance of the link, the second is the
@@ -872,72 +925,81 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% The commands \cs{mlnameref} and \cs{mlNameref} take two parameters
% (the first is optional). As before, the first modifies the
% appearance of the link, the second is the target, a latex label.
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlhyperlink[\ameta{opts}]\darg{\ameta{named-dest}}\darg{\ameta{text}}
+%\end{flushleft}
% \begin{macrocode}
\newcommand\mlhyperlink[3][]{%
- \mlhypertext[#1\A{/S/GoTo/D (#2)}]{#3}}
+ \mlhypertext[#1\A{/S/GoTo/D (#2)}]{#3}}
+% \end{macrocode}
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlhyperref[\ameta{opts}]\darg{\ameta{label}}\darg{\ameta{text}}
+%\end{flushleft}
+% \begin{macrocode}
\newcommand\mlhyperref[3][]{%
- \mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]{#3}}
+ \mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]{#3}}
+% \end{macrocode}
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlnameref[\ameta{opts}]\darg{\ameta{label}}
+%\end{flushleft}
+% \begin{macrocode}
\newcommand\mlnameref[2][]{\protected@edef\ml@temp{\aebnameref{#2}}%
- \def\ml@tempi{\mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]}%
- \expandafter\ml@tempi\expandafter{\ml@temp}}
+ \def\ml@tempi{\mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]}%
+ \expandafter\ml@tempi\expandafter{\ml@temp}}
% \end{macrocode}
% We use a work around to a |\relax| problem encountered in the
% |\mlNameRef| command. {\LaTeX} inserts a |relax| at the end of label
% titles, which stops soul. We insert |\let\SOUL@stop\ml@SOUL@stop|,
% this seems to work, no guarantees.
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlNameref[\ameta{opts}]\darg{\ameta{label}}
+%\end{flushleft}
% \begin{macrocode}
\newcommand\mlNameref[2][]{\let\SOUL@stop\ml@SOUL@stop
- \protected@edef\ml@temp{`\aebnameref{#2}' on page~\atPage{#2}}%
- \def\ml@tempi{\mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]}%
- \expandafter\ml@tempi\expandafter{\ml@temp}}
+ \protected@edef\ml@temp{`\aebnameref{#2}' on page~\atPage{#2}}%
+ \def\ml@tempi{\mlhypertext[#1\A{/S/GoTo/D (\labelRef{#2})}]}%
+ \expandafter\ml@tempi\expandafter{\ml@temp}}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
-% \begin{macro}{\mlhref}
-% This command is similar to \cs{href}. This command also takes
-% three arguments, one optional. The first is usual optional argument
-% that allow one to modify the appearance of the link, the second one
-% is the URL that we are linking to, the third is the text that we are
-% wrapping this link around.
-%
-% The next three commands are modifications some low hyperref commands
-% found in the \texttt{pdfmark.def} file. Depending on the parsing,
-% \cs{href} calls one of these three; we intercept them, and insert
+% The next three commands are modifications some low \pkg{hyperref} commands
+% found in the \texttt{pdfmark.def} file. Depending on the parsing, \cs{href}
+% calls one of these three; we intercept them, and insert
% our own command \cs{mlhypertext} so the link string gets wrapped around
-% if needed.
+% if needed. These are in preparation for the definition of \cs{mlhref}.
% \begin{macrocode}
\def\ml@hyper@linkurl#1#2{\hyper@chars
- \let\ef@thislinkcolor\@urlcolor
- \let\CurrentBorderColor\@urlbordercolor
- \mlhypertext[\presets{\mlhref@args}\A{/S/URI/URI(#2)}]{#1}%
- \endgroup
-}%
+ \let\ef@thislinkcolor\@urlcolor
+ \let\CurrentBorderColor\@urlbordercolor
+ \mlhypertext[\presets{\mlhref@args}\A{/S/URI/URI(#2)}]{#1}%
+ \endgroup
+}
\def\ml@hyper@linkfile#1#2#3{%
- \let\ef@thislinkcolor\@filecolor
- \let\CurrentBorderColor\@filebordercolor
- \ifx\@pdfstartview\@empty
- \def\theView{[0 /Fit]}\else
- \def\theView{[0 \@pdfstartview]}\fi
- \@ifundefined{ifHy@pdfnewwindow}
- {\ifHy@newwindow}{\ifHy@pdfnewwindow}%
- \def\isWindow{/NewWindow true}\else
- \let\isWindow\@empty\fi
- \mlhypertext[\presets{\mlhref@args}\A{/S/GoToR \isWindow
- /F (#2) /D \ifx\\#3\\\theView\else(#3)\fi}]{#1}%
- \endgroup
+ \let\ef@thislinkcolor\@filecolor
+ \let\CurrentBorderColor\@filebordercolor
+ \ifx\@pdfstartview\@empty
+ \def\theView{[0 /Fit]}\else
+ \def\theView{[0 \@pdfstartview]}\fi
+ \@ifundefined{ifHy@pdfnewwindow}
+ {\ifHy@newwindow}{\ifHy@pdfnewwindow}%
+ \def\isWindow{/NewWindow true}\else
+ \let\isWindow\@empty\fi
+ \mlhypertext[\presets{\mlhref@args}\A{/S/GoToR \isWindow
+ /F (#2) /D \ifx\\#3\\\theView\else(#3)\fi}]{#1}%
+ \endgroup
}
\def\ml@hyper@launch run:#1\\#2#3{%
- \let\ef@thislinkcolor\@filecolor
- \let\CurrentBorderColor\@runbordercolor
- \@ifundefined{ifHy@pdfnewwindow}
+ \let\ef@thislinkcolor\@filecolor
+ \let\CurrentBorderColor\@runbordercolor
+ \@ifundefined{ifHy@pdfnewwindow}
{\ifHy@newwindow}{\ifHy@pdfnewwindow}%
- \def\isWindow{/NewWindow true}\else
- \let\isWindow\@empty\fi
- \mlhypertext[\presets{\mlhref@args}\A{/S/Launch\isWindow
- /F (#1) \ifx\\#3\\\else /Win << /P (#3) /F (#1) >> \fi}]{#2}%
- \endgroup
+ \def\isWindow{/NewWindow true}\else
+ \let\isWindow\@empty\fi
+ \mlhypertext[\presets{\mlhref@args}\A{/S/Launch\isWindow
+ /F (#1) \ifx\\#3\\\else /Win << /P (#3) /F (#1) >> \fi}]{#2}%
+ \endgroup
}
% \end{macrocode}
% Below is the code for \cs{mlhref}. We first let the old commands found in \texttt{pdfmark.def}
@@ -945,13 +1007,24 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% eventually comes back to the above three commands.
% \begin{macrocode}
\let\aeb@saved@href\href
+% \end{macrocode}
+% \begin{macro}{\mlhref}
+% This command is similar to \cs{href}. This command also takes
+% three arguments, one optional. The first is usual optional argument
+% that allow one to modify the appearance of the link, the second one
+% is the URL that we are linking to, the third is the text that we are
+% wrapping this link around.
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlhref[\ameta{opts}]\darg{\ameta{url}}\darg{\ameta{text}}
+%\end{flushleft}
+% \begin{macrocode}
\newcommand{\mlhref}[1][]{%
- \begingroup
- \def\mlhref@args{#1}%
- \let\hyper@linkurl\ml@hyper@linkurl
- \let\hyper@linkfile\ml@hyper@linkfile
- \let\@hyper@launch\ml@hyper@launch
- \aeb@saved@href
+ \begingroup
+ \def\mlhref@args{#1}%
+ \let\hyper@linkurl\ml@hyper@linkurl
+ \let\hyper@linkfile\ml@hyper@linkfile
+ \let\@hyper@launch\ml@hyper@launch
+ \aeb@saved@href
}
% \end{macrocode}
% \end{macro}
@@ -971,128 +1044,132 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% We modify \cs{SOUL@doword} and name it \cs{ml@SOUL@doword}.
% \begin{macrocode}
\def\ml@SOUL@doword{%
- \global\setbox\ml@urlbuildi\hbox{}%
- \global\setbox\ml@urlbuildii\hbox{}%
- \edef\x{\the\SOUL@word}%
- \ifx\x\empty
- \else
- \SOUL@buffer={}%
- \setbox\z@\vbox{%
- \SOUL@tt
- \hyphenchar\font`\-
- \hfuzz\maxdimen
- \hbadness\@M
- \pretolerance\m@ne
- \tolerance\@M
- \leftskip\z@
- \rightskip\z@
- \hsize1sp
- \everypar{}%
- \parfillskip\z@\@plus1fil
- \hyphenpenalty-\@M
- \noindent
- \hskip\z@
- \relax
- \the\SOUL@word}%
+ \global\setbox\ml@urlbuildi\hbox{}%
+ \global\setbox\ml@urlbuildii\hbox{}%
+ \edef\x{\the\SOUL@word}%
+ \ifx\x\empty
+ \else
+ \SOUL@buffer={}%
+ \setbox\z@\vbox{%
+ \SOUL@tt
+ \hyphenchar\font`\-
+ \hfuzz\maxdimen
+ \hbadness\@M
+ \pretolerance\m@ne
+ \tolerance\@M
+ \leftskip\z@
+ \rightskip\z@
+ \hsize1sp
+ \everypar{}%
+ \parfillskip\z@\@plus1fil
+ \hyphenpenalty-\@M
+ \noindent
+ \hskip\z@
+ \relax
+ \the\SOUL@word}%
% \end{macrocode}
% We don't do the reconstruction, so no need for the message.
% \begin{macrocode}
- \let\SOUL@errmsg\relax
-% \let\SOUL@errmsg\SOUL@error
- \let\-\relax
- \count@\m@ne
+ \let\SOUL@errmsg\relax
+% \let\SOUL@errmsg\SOUL@error
+ \let\-\relax
+ \count@\m@ne
% \end{macrocode}
% Here is the first major change, rather than splitting off to \cs{SOUL@analyze}, we go
% to our modified version, \cs{ml@SOUL@analyze}.
% \begin{macrocode}
- \ml@SOUL@analyze
- \SOUL@word={}%
- \fi
+ \ml@SOUL@analyze
+ \SOUL@word={}%
+ \fi
}
% \end{macrocode}
% We modify \cs{SOUL@analyze} and name it \cs{ml@SOUL@analyze}.
% \begin{macrocode}
\def\ml@SOUL@analyze{{%
- \setbox\z@\vbox{%
- \unvcopy\z@
- \unskip
- \unpenalty
- \global\setbox\@ne=\lastbox}%
- \ifvoid\@ne
- \else
+ \setbox\z@\vbox{%
+ \unvcopy\z@
+ \unskip
+ \unpenalty
+ \global\setbox\@ne=\lastbox}%
+ \ifvoid\@ne
+ \else
% \end{macrocode}
% We encapsulate our changes at this point in \cs{ml@interface@analyze}
% \begin{macrocode}
- \ml@interface@analyze
- \SOUL@syllgoal=\wd\@ne
- \advance\count@\@ne
+ \ml@interface@analyze
+ \SOUL@syllgoal=\wd\@ne
+ \advance\count@\@ne
% \end{macrocode}
% We get the tokens recursively, but we jump back to \cs{ml@SOUL@analyze} not
% \cs{SOUL@analyze}.
% \begin{macrocode}
- \ml@SOUL@analyze
- \SOUL@syllwidth\z@
- \SOUL@syllable={}%
- \ifnum\count@>\z@
- \advance\SOUL@syllgoal-\SOUL@ttwidth
+ \ml@SOUL@analyze
+ \SOUL@syllwidth\z@
+ \SOUL@syllable={}%
+ \ifnum\count@>\z@
+ \advance\SOUL@syllgoal-\SOUL@ttwidth
% \end{macrocode}
% At this point, we jump to \cs{ml@SOUL@dosyllable} rather than
% \cs{SOUL@dosyllable}.
% \begin{macrocode}
- \ml@SOUL@dosyllable
- \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@hyphkern}%
- {\SOUL@sethyphenchar}%
- \SOUL@everyhyphen
- \else
+ \ml@SOUL@dosyllable
+ \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@hyphkern}%
+ {\SOUL@sethyphenchar}%
+ \SOUL@everyhyphen
+ \else
% \end{macrocode}
% Use \cs{ml@SOUL@dosyllable} not \cs{SOUL@dosyllable}.
% \begin{macrocode}
\ml@SOUL@dosyllable
- \fi
+ \fi
\fi
}}
% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\ifml@display \ml@displaytrue
+% \end{macrocode}
% We modify \cs{SOUL@dosyllable} and name it \cs{ml@SOUL@dosyllable}.
% \begin{macrocode}
\def\ml@SOUL@dosyllable{%
+ \SOUL@gettoken
+ \SOUL@eventuallyexhyphen{\the\SOUL@token}%
+ \edef\x{\the\SOUL@token}%
+ \ifx\x\SOUL@hyphenhintM
+ \let\SOUL@n\ml@SOUL@dosyllable
+ \else\ifx\x\SOUL@lowerthanM
\SOUL@gettoken
- \SOUL@eventuallyexhyphen{\the\SOUL@token}%
- \edef\x{\the\SOUL@token}%
- \ifx\x\SOUL@hyphenhintM
- \let\SOUL@n\ml@SOUL@dosyllable
- \else\ifx\x\SOUL@lowerthanM
- \SOUL@gettoken
- \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@charkern}
- {\the\SOUL@token}%
- \SOUL@everylowerthan
- \SOUL@puttoken
- \let\SOUL@n\ml@SOUL@dosyllable
- \else\ifdim\SOUL@syllwidth=\SOUL@syllgoal
- \SOUL@everysyllable
- \SOUL@puttoken
- \let\SOUL@n\relax
- \else
+ \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@charkern}
+ {\the\SOUL@token}%
+ \SOUL@everylowerthan
+ \SOUL@puttoken
+ \let\SOUL@n\ml@SOUL@dosyllable
+ \else\ifdim\SOUL@syllwidth=\SOUL@syllgoal
+ \SOUL@everysyllable
+ \SOUL@puttoken
+ \let\SOUL@n\relax
+ \else
\ifx\x\SOUL@stopM
- \SOUL@errmsg
- \global\let\SOUL@errmsg\relax
- \let\SOUL@n\relax
+ \SOUL@errmsg
+ \global\let\SOUL@errmsg\relax
+ \let\SOUL@n\relax
\else
- \setbox\tw@\hbox{\SOUL@tt\the\SOUL@token}%
- \advance\SOUL@syllwidth\wd\tw@
- \global\SOUL@lasttoken=\SOUL@token
- \SOUL@gettoken
- \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@charkern}
- {\the\SOUL@token}%
- \SOUL@puttoken
- \global\SOUL@token=\SOUL@lasttoken
- \SOUL@everytoken
- \edef\x{\SOUL@syllable={\the\SOUL@syllable\the\SOUL@token}}\x
+ \setbox\tw@\hbox{\SOUL@tt\the\SOUL@token}%
+ \advance\SOUL@syllwidth\wd\tw@
+ \global\SOUL@lasttoken=\SOUL@token
+ \SOUL@gettoken
+ \SOUL@getkern{\the\SOUL@lasttoken}{\SOUL@charkern}
+ {\the\SOUL@token}%
+ \SOUL@puttoken
+ \global\SOUL@token=\SOUL@lasttoken
+ \SOUL@everytoken
+ \edef\x{\SOUL@syllable={\the\SOUL@syllable\the\SOUL@token}}\x
% \end{macrocode}
% Here is the only change, we direct flow back to \cs{ml@SOUL@dosyllable}
% \begin{macrocode}
- \let\SOUL@n\ml@SOUL@dosyllable
- \fi\fi\fi\fi
- \SOUL@n
+ \let\SOUL@n\ml@SOUL@dosyllable
+ \fi\fi\fi\fi
+ \SOUL@n
}
% \end{macrocode}
% We put most of our changes to \cs{ml@SOUL@analyze} in
@@ -1155,15 +1232,15 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% \end{macrocode}
% Everything is in reverse order, this is the last syllable of the second chunk
% \begin{macrocode}
- \ml@start@link{\aeb@mLinkCnt@}{\ml@qlngthchunkii}%
- \ml@bld@quadchunks{\aeb@mLinkCnt@}
- {\ml@qlngthchunkii}{\ml@urlbuildii}%
+ \ml@start@link{\aeb@mLinkCnt@}{\ml@qlngthchunkii}%
+ \ml@bld@quadchunks{\aeb@mLinkCnt@}
+ {\ml@qlngthchunkii}{\ml@urlbuildii}%
\else
% \end{macrocode}
% continue with second link
% \begin{macrocode}
- \ml@bld@quadchunks{\aeb@mLinkCnt@}
- {\ml@qlngthchunkii}{\ml@urlbuildii}%
+ \ml@bld@quadchunks{\aeb@mLinkCnt@}
+ {\ml@qlngthchunkii}{\ml@urlbuildii}%
\fi
\fi
\fi
@@ -1180,12 +1257,18 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
\advance\@tempcnta-\aeb@arrayIndx
\def\@indx{\the\@tempcnta}%
}%
+ \@tempcntb=\@indx \divide\@tempcntb by 8
+ \advance\@tempcntb by 1
+\ifx#3\ml@urlbuildii \advance\@tempcntb by \eq@mlcrackat\relax\fi
\global\setbox#3=\hbox{%
\mlh@setQuadSyllable{\@indx}{#2}{#1}{\unhcopy\@ne}%
- \hbox{\unhcopy\@ne}\penalty0\unhcopy#3}%hbox
+ \hbox{\unhcopy\@ne}\relax\ml@typeset@@syl{\@tempcntb}\penalty0\unhcopy#3}%hbox
}}
% \end{macrocode}
% After the above preliminaries, we finally define \DescribeMacro{\mlurl}\cmd{\mlurl}.
+%\begin{flushleft}
+% Syntax: \ttfamily\string\mlurl[\ameta{opts}]\darg{\ameta{url}}
+%\end{flushleft}
% \begin{macrocode}
\newcommand{\mlurl}{\begingroup\@makeother\~\relax% \def~{\string~}%
\ef@sanitize@toks\mlurl@}
@@ -1197,7 +1280,6 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
{\let\ef@thislinkcolor\normalcolor}{}\expandafter
\def\expandafter\ef@thislinkcolor@SAVE
\expandafter{\ef@thislinkcolor}%
-%\def\ml@urlOpts{#1}\def\ml@urlURI{#2}%
\def\ml@setlink##1{\setLinkPbox{\A{\URI{#2}}%
\QuadPoints{mLink##1}#1}}%
% \end{macrocode}
@@ -1217,27 +1299,27 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% \end{macrocode}
% \begin{macrocode}
\@ifundefined{mLinkLngth\the\aeb@mLinkCnt}{%
- \global\linknotformedtrue\def\lngth{17}%
+ \global\linknotformedtrue\def\ml@lngth{17}%
\def\ml@qlngthchunki{17}}
{\@tempcnta\@nameuse{mLinkLngth\the\aeb@mLinkCnt}\relax
- \edef\lngth{\the\@tempcnta}%\multiply\@tempcnta8\relax
+ \edef\ml@lngth{\the\@tempcnta}%\multiply\@tempcnta8\relax
\edef\ml@qlngthchunki{\the\@tempcnta}}%
% \end{macrocode}
% We make some calculations in preparation to a link that will be
% cracked apart.
-% \cs{MAXCNT} is the number of syllables of the un-cracked URL.
+% \cs{mlM@XCNT} is the number of syllables of the un-cracked URL.
% \begin{macrocode}
\@ifundefined{mLinkSyCnt\the\aeb@mLinkCnt}
- {\def\MAXCNT{0}\def\ml@lngthchunki{0}\def\ml@lngthchunkii{0}%
+ {\def\mlM@XCNT{0}\def\ml@lngthchunki{0}\def\ml@lngthchunkii{0}%
\def\ml@qlngthchunki{0}\def\ml@qlngthchunkii{0}\def\revCrackAt{0}}
- {\edef\MAXCNT{\@nameuse{mLinkSyCnt\the\aeb@mLinkCnt}}%
+ {\edef\mlM@XCNT{\@nameuse{mLinkSyCnt\the\aeb@mLinkCnt}}%
% \end{macrocode}
-% When \cs{MAXCNT} is known, and \cs{eq@mlcrackat} is known, we can calculate
+% When \cs{mlM@XCNT} is known, and \cs{eq@mlcrackat} is known, we can calculate
% the number of syllables of each chunk of the URL, for the first chunk, it is
-% \cs{eq@mlcrackat}, for the second it is $\cs{MAXCNT} - \cs{eq@mlcrackat}$.
+% \cs{eq@mlcrackat}, for the second it is $\cs{mlM@XCNT} - \cs{eq@mlcrackat}$.
% \begin{macrocode}
\ifx\eq@mlcrackat\@empty\else
- \@tempcnta\MAXCNT\relax\advance\@tempcnta-\eq@mlcrackat\relax
+ \@tempcnta\mlM@XCNT\relax\advance\@tempcnta-\eq@mlcrackat\relax
\edef\ml@lngthchunki{\eq@mlcrackat}%
\edef\ml@lngthchunkii{\the\@tempcnta}%
\@tempcnta\ml@lngthchunki\relax\multiply\@tempcnta8\relax
@@ -1249,14 +1331,13 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% This calculation can be move to earlier code where it is not executed for each syllable (chunk).
% \cs{revCrackAt} is the value of \cs{eq@mlcrackat} as measure from the end of the url.
% \begin{macrocode}
- \@tempcnta\MAXCNT\relax
+ \@tempcnta\mlM@XCNT\relax
\advance\@tempcnta-\eq@mlcrackat\relax
\advance\@tempcnta\@ne
\edef\revCrackAt{\the\@tempcnta}%
\fi}%
\@tempcnta\aeb@mLinkCnt\advance\@tempcnta\@ne
\edef\aeb@mLinkCnt@{\the\@tempcnta}%
-% \begin{macrocode}
\urldef\ml@url\nolinkurl{#2}%
\def\SOUL@mlhpreamble{%\begingroup
\mlh@preambleCmdInsert\ef@colorthislink}\hyper@chars
@@ -1272,7 +1353,8 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% The next several lines are taken from the definition of \cs{mlhypertext}, the basic command
% for construction many of the `\cs{ml}' commands of this package.
% \begin{macrocode}
- \ifx\eq@mlcrackat\@empty\ml@start@link{\the\aeb@mLinkCnt}{\lngth}\fi
+ \ifx\eq@mlcrackat\@empty
+ \ml@start@link{\the\aeb@mLinkCnt}{\ml@lngth}\fi
\def\mlh@preambleCmdInsert{\ml@MrkLnk{\the\aeb@mLinkCnt}%
\ml@earlyExecProps{#1}}%
\def\mlh@postambleCmd{%
@@ -1299,14 +1381,14 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
\immediate\write\@auxout{\string\mlcsarg
\string\gdef{mLinkLngth\the\aeb@mLinkCnt}{\the\aeb@arrayIndx}}%
\ifx\eq@mlcrackat\@empty
- \ml@finish@link{\the\aeb@mLinkCnt}{\lngth}%
+ \ml@finish@link{\the\aeb@mLinkCnt}{\ml@lngth}%
\ml@setlink{\the\aeb@mLinkCnt}%
\iffixmlinks\literalps@out{restore}\fi
\else
\ml@finish@link{\the\aeb@mLinkCnt}{\ml@qlngthchunki}%
\ml@setlink{\the\aeb@mLinkCnt}%
\iffixmlinks\literalps@out{restore}\fi
- \eq@mlcrackinsat\penalty-50
+ \eq@mlcrackinsat\penalty-100
\ml@start@link{\aeb@mLinkCnt@}{\ml@qlngthchunkii}%
\penalty0\@ifundefined{mLinkLngth\the\aeb@mLinkCnt}{}
{\ml@MrkLnk{\aeb@mLinkCnt@}}\unhcopy\ml@urlbuildii
@@ -1332,14 +1414,20 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
\fi
}%
}
+% \end{macrocode}
+% Make \texttt{gFixup} into a macro, so other packages (\pkg{aeb\_mlink} can intercept and insert
+% its own procedure here.
+% \changes{v2.3.2}{2018/08/09}{We make \string\texttt{gFixup} into a macro name \string\cs{FixupProc}}
+% \begin{macrocode}
+\def\FixupProc{gFixup}
\def\ml@finish@link#1#2{% Step 4 and 5
% #1=link number
% #2 = final quad length
\ifoldstylequads\else
\ifnum\aeb@arrayIndx=0\relax
\PackageWarning{aeb_mlink}{%
- Problem with mLink\the\aeb@mLinkCnt,\MessageBreak
- Will skip the creation of this link}\fi
+ Problem with mLink\the\aeb@mLinkCnt, Will skip the \MessageBreak
+ creation of this link}\fi
\literalps@out{%
% \end{macrocode}
% If \cs{iffixmlinks} is true, we fix the links, otherwise, we no not.
@@ -1349,11 +1437,11 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
save^^J%
bCreateLink {^^J%
\mlDict\space/mLinkFxup#1\space known {^^J%
- #1\space
+ (\ml@@nnotName#1)
#2\space
mLinkFxup#1\space
quadpointsfixup^^J%
- \ps@mark{mLink#1} 0 gFixup
+ \ps@mark{mLink#1} 0 \FixupProc\space
/PUTINTERVAL pdfmark^^J%
}if }if
\fi
@@ -1376,9 +1464,9 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% \section{Macros used by the SOUL Interface}
% \begin{macrocode}
\ifHy@colorlinks
- \def\ef@colorthislink{\color{\ef@thislinkcolor}}
+ \def\ef@colorthislink{\color{\ef@thislinkcolor}}
\else
- \let\ef@colorthislink\relax
+ \let\ef@colorthislink\relax
\fi
% \end{macrocode}
% I've inserted \verb|\let\protect\@empty| to make |mlnameref| and |mlNameref| work.
@@ -1389,99 +1477,94 @@ yMin 20 string cvs pf(]\string\n)pf^^J}%
% (2011/12/27) Originally, I had \verb|\let\protect\@empty| here, but removing this
% seems to do no harm, so, we'll go for it.
% \begin{macrocode}
- \mlh@preambleCmdInsert\ef@colorthislink}
-\def\SOUL@mlheverysyllable{%
- \mlh@setQuadSyllable{\the\aeb@arrayIndx}{\lngth}%
- {\the\aeb@mLinkCnt}{\the\SOUL@syllable}%
- \the\SOUL@syllable\SOUL@setkern\SOUL@charkern}%
-\def\SOUL@mlheveryspace#1{#1\space\hskip\spaceskip}%
+ \mlh@preambleCmdInsert\ef@colorthislink}
+\def\SOUL@mlheverysyllable{% dpsaug16
+ \global\advance\syllableCnt\@ne
+ \ifx\eq@mlcrackat\@empty
+ \expandafter\SOUL@mlheverysyllable@i
+ \else
+ \expandafter\SOUL@mleverysyllable@ii
+ \fi
+}
+\let\eq@@mlhyph\@empty
+\def\ml@typset@syl#1{\raisebox{\ml@raiseamt}
+ {\smash{\normalfont\normalcolor\tiny\strut\llap{\the#1}}}}
+\def\turnSyllbCntOn{\mlMarksOn\let\ml@typeset@@syl\ml@typset@syl}
+\def\turnSyllbCntOff{\let\ml@typeset@@syl\@gobble}
+\turnSyllbCntOff
+\def\SOUL@mlheverysyllable@i{%
+ \mlh@setQuadSyllable{\the\aeb@arrayIndx}{\ml@lngth}%
+ {\the\aeb@mLinkCnt}{\the\SOUL@syllable\eq@@mlhyph}%
+ \the\SOUL@syllable %\SOUL@setkern\SOUL@charkern
+ \ml@typeset@@syl{\syllableCnt}\eq@@mlhyph
+}%
+\def\SOUL@mleverysyllable@ii{%
+ \ifnum\eq@mlchunk=0\relax
+ \ifnum\syllableCnt>\eq@mlcrackat\relax
+ \global\ml@displayfalse
+ \else
+ \global\ml@displaytrue
+ \ifnum\syllableCnt=\eq@mlcrackat\relax
+ \let\eq@@mlhyph\eq@mlhyph
+ \global\let\ml@space\relax
+ \else
+ \let\eq@@mlhyph\@empty
+ \global\let\ml@space\space
+ \fi
+ \SOUL@mlheverysyllable@i
+ \fi
+ \else
+ \ifnum\syllableCnt>\eq@mlcrackat\relax
+ \global\ml@displaytrue
+ \SOUL@mlheverysyllable@i
+ \else
+ \global\ml@displayfalse
+ \fi
+ \fi
+ \ml@dynamicsetup
+}
+%\def\SOUL@mlheveryspace#1{#1\space\hskip\spaceskip}
+\let\ml@space\space
+\def\SOUL@mlheveryspace#1{%
+ #1\ml@space\global\let\ml@space\space
+}
\def\SOUL@mlheveryhyphen{%
- \discretionary{%
- \unkern
- \SOUL@setkern\SOUL@hyphkern
- \SOUL@sethyphenchar
- }{}{}%
+ \discretionary{%
+ \unkern
+ \SOUL@setkern\SOUL@hyphkern
+ \SOUL@sethyphenchar
+ }{}{}%
}
-\def\SOUL@mlheveryexhyphen#1{%
- \mlh@setQuadSyllable{\the\aeb@arrayIndx}{\lngth}%
- {\the\aeb@mLinkCnt}{\SOUL@setkern\SOUL@hyphkern#1}%
- \SOUL@setkern\SOUL@hyphkern#1%
- \discretionary{}{}{%
- \SOUL@setkern\SOUL@charkern
- }%
+\def\SOUL@mlheveryexhyphen#1{\global\advance\syllableCnt\@ne
+ \mlh@setQuadSyllable{\the\aeb@arrayIndx}{\ml@lngth}%
+ {\the\aeb@mLinkCnt}{\SOUL@setkern\SOUL@hyphkern#1}%
+ \SOUL@setkern\SOUL@hyphkern\hbox{#1}%
+ \discretionary{}{}{%
+ \SOUL@setkern\SOUL@charkern
+ }%
}
\def\mlh@postambleCmd{\relax}
+\def\ml@dynamicsetup{%dpsaug16
+ \ifml@display
+ \global\let\SOUL@everyspace\SOUL@mlheveryspace
+ \global\let\SOUL@everyexhyphen\SOUL@mlheveryexhyphen
+ \else
+ \gdef\SOUL@everyspace##1{}%
+ \gdef\SOUL@everyexhyphen##1{}%
+ \fi
+}
\def\SOUL@mlhpostamble{\mlh@postambleCmd}
\def\SOUL@mlhsetup{\SOUL@setup
- \let\SOUL@preamble\SOUL@mlhpreamble
- \let\SOUL@everysyllable\SOUL@mlheverysyllable
- \let\SOUL@everyspace\SOUL@mlheveryspace
- \let\SOUL@everyhyphen\SOUL@mlheveryhyphen
- \let\SOUL@everyexhyphen\SOUL@mlheveryexhyphen
- \def\SOUL@postamble{\SOUL@mlhpostamble}%
-}
-\DeclareRobustCommand*\aeb@mlh{\SOUL@mlhsetup\SOUL@}
-% \end{macrocode}
-% \leavevmode\DescribeMacro{\crackAt}\hskip-\marginparsep\darg{\ameta{num}}\darg{\ameta{string}}
-% The macro \cs{crackAt} breaks \ameta{string} into two parts and places the two parts in their
-% own token register: \cs{mofrstoftwo} contains contains that portion of the string up to and including
-% the \ameta{num}${}^{\mbox{\scriptsize th}}$ syllable. We use this macro to break apart a string that itself
-% breaks across a page boundary on the \ameta{num}${}^{\mbox{\scriptsize th}}$ syllable.
-% \begin{macrocode}
-\newtoks\mlfrstoftwo \mlfrstoftwo={}
-\newtoks\mlsndoftwo \mlsndoftwo={}
-\newcount\syllableCnt \syllableCnt=0
-% \end{macrocode}
-% We use the \pkg{soul} engine to break \ameta{string} apart, we count the syllables are they are
-% determined by \pkg{soul}. Next is the setup for our soul command, \cs{crackAt}.
-% \begin{macrocode}
-\def\SOUL@ckhsetup{\SOUL@setup
-% \end{macrocode}
-% Processing syllables
-% \begin{macrocode}
- \def\SOUL@everysyllable{\global\advance\syllableCnt\@ne
- \ifnum\syllableCnt=\mlcr@ckAt\relax
- \edef\x{\the\mlfrstoftwo\the\SOUL@syllable\eq@mlhyph}%
- \global\mlfrstoftwo=\expandafter{\x}\else
- \ifnum\syllableCnt>\mlcr@ckAt\relax
- \edef\x{\the\mlsndoftwo\the\SOUL@syllable}%
- \global\mlsndoftwo=\expandafter{\x}\else
- \edef\x{\the\mlfrstoftwo\the\SOUL@syllable}%
- \global\mlfrstoftwo=\expandafter{\x}\fi\fi
- }%
-% \end{macrocode}
-% Processing spaces
-% \begin{macrocode}
- \def\SOUL@everyspace##1{%
- \ifnum\syllableCnt<\mlcr@ckAt\relax
- \edef\x{\the\mlfrstoftwo}%
- \global\mlfrstoftwo=\expandafter{\x##1 }\else
- \edef\x{\the\mlsndoftwo}%
- \ifnum\syllableCnt=\mlcr@ckAt\relax
-% \end{macrocode}
-% We assume the link breaks across a page here, so we try to toss the space.
-% \begin{macrocode}
- \global\mlsndoftwo=\expandafter{\x##1}\else
- \global\mlsndoftwo=\expandafter{\x##1 }\fi\fi
- }%
-% \def\SOUL@everyhyphen{%
-% \ifnum\syllableCnt>\mlcr@ckAt\relax
-% \edef\x{\the\mlsndoftwo}\global
-% \mlsndoftwo=\expandafter{\x\SOUL@mlheveryhyphen}\else
-% \edef\x{\the\mlfrstoftwo}\global
-% \mlfrstoftwo=\expandafter{\x\SOUL@mlheveryhyphen}\fi
-% }%
- \def\SOUL@everyexhyphen##1{\global
- \ifnum\syllableCnt>\mlcr@ckAt\relax
- \edef\x{\the\mlsndoftwo}\global
- \mlsndoftwo=\expandafter{\x##1}\else
- \edef\x{\the\mlfrstoftwo}\global
- \mlfrstoftwo=\expandafter{\x##1}\fi
- }%
+ \let\SOUL@preamble\SOUL@mlhpreamble
+ \let\SOUL@everysyllable\SOUL@mlheverysyllable
+ \ml@dynamicsetup
+% \let\SOUL@everyspace\SOUL@mlheveryspace
+ \let\SOUL@everyhyphen\SOUL@mlheveryhyphen
+% \let\SOUL@everyexhyphen\SOUL@mlheveryexhyphen
+ \def\SOUL@postamble{\SOUL@mlhpostamble}%
}
-\DeclareRobustCommand*\crackAt[1]{\def\mlcr@ckAt{#1}%
- \mlfrstoftwo={}\mlsndoftwo={}\syllableCnt=0
- \SOUL@ckhsetup\SOUL@}
+\DeclareRobustCommand*\aeb@mlh{\syllableCnt=0
+ \SOUL@mlhsetup\SOUL@}
% \end{macrocode}
% \begin{macrocode}
% End of Package
diff --git a/texmf-dist/source/latex/aeb-mlink/aeb_mlink.ins b/texmf-dist/source/latex/aeb-mlink/aeb_mlink.ins
index 23b18e35..d98e0b69 100644
--- a/texmf-dist/source/latex/aeb-mlink/aeb_mlink.ins
+++ b/texmf-dist/source/latex/aeb-mlink/aeb_mlink.ins
@@ -17,7 +17,7 @@
%%
%% --------------- start of docstrip commands ------------------
%%
-\def\filedate{2007/05/14}
+\def\filedate{2018/04/26}
\def\batchfile{aeb_mlink.ins}
%
\input docstrip
diff --git a/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.pdf b/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.pdf
deleted file mode 100644
index 2d697917..00000000
--- a/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.pdf
+++ /dev/null
Binary files differ
diff --git a/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.tex b/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.tex
deleted file mode 100644
index 5190c8fa..00000000
--- a/texmf-dist/source/latex/aeb-mlink/doc/aebmlink_man.tex
+++ /dev/null
@@ -1,873 +0,0 @@
-% makeindex < aebpro_man.idx > aebpro_man.ind
-\documentclass{article}
-%\usepackage[fleqn]{amsmath}
-\usepackage[
- web={centertitlepage,designv,forcolorpaper,
- tight*,latextoc,pro,usetemplates},
- eforms={useui},
- aebxmp
-]{aeb_pro}
-\usepackage[dblevel=1]{aeb_mlink}
-
-%\usepackage{myriadpro}
-\usepackage[altbullet]{lucidbry}
-
-\usepackage{acroman}
-
-\def\amtIndent{15pt}
-
-\usepackage[active]{srcltx}
-
-\DeclareDocInfo
-{
- university={\AcroTeX.Net},
- title={The \textsf{aeb\_mlink} Package\texorpdfstring{\\[1em]}{: }AeB Pro Family},
- author={D. P. Story},
- email={dpstory@acrotex.net},
- subject={Wrapping links around to the next line},
- keywords={multi-line links, quad points, latex, pdf, aeb},
- talksite={\url{www.acrotex.net}},
- version={2.3, 2018/04/26},
- copyrightStatus={True},
- copyrightNotice={Copyright (C) 2006-\the\year, D. P. Story},
- copyrightInfoURL={http://www.acrotex.net}
-}
-\nocopyright
-\DeclareInitView{windowoptions=showtitle}
-
-\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}%
- \kern-.6em \hbox{$\mathcal S$}}$}
-
-
-
-\def\AcroTeX{Acro\negthinspace\TeX}
-
-\def\unskipparskip{\vskip-\parskip}
-\renewenvironment{sverbatim}
-{\parskip0pt\noindent\small\verbatim}{\endverbatim\par\aftergroup\unskipparskip}
-\renewenvironment{ssverbatim}
-{\parskip0pt\noindent\footnotesize\verbatim}{\endverbatim\par\aftergroup\unskipparskip}
-
-\def\anglemeta#1{$\langle\textit{\texttt{#1}}\rangle$}
-\let\ameta\anglemeta
-\def\meta#1{\textit{\texttt{#1}}}
-\def\darg#1{\texttt{\{#1\}}}
-\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei}
-\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup}
-\def\bxSize{\wd\webtempboxi+2\fboxsep+2\fboxrule}
-\let\pkg\textsf
-\let\env\texttt
-\let\opt\texttt
-\let\app\textsf
-
-%\let\amtIndent\leftmargini
-%\let\amtIndent\parindent
-\def\SUB#1{${}_{\text{#1}}$}
-
-\newdimen\aebdimen \aebdimen 0pt %\advance\aebdimen\partopsep
-\newcommand\bVerb[1][]{\begingroup#1\vskip\aebdimen\parindent0pt}%
-\def\eVerb{\vskip\aebdimen\endgroup\noindent}
-
-\def\cmdtitle#1{\texorpdfstring{\protect\cs{#1}}{\textbackslash{#1}}}
-
-\renewcommand\hproportionwebauthor{.5}
-\universityLayout{fontsize=Large}
-\titleLayout{fontsize=LARGE}
-\authorLayout{fontsize=Large}
-\tocLayout{fontsize=Large,color=aeb}
-\sectionLayout{indent=-62.5pt,fontsize=large,color=aeb}
-\subsectionLayout{indent=-31.25pt,color=aeb}
-\subsubsectionLayout{indent=0pt,color=aeb}
-\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}}
-
-\makeatletter
-\def\cs#1{\texttt{\@backslashchar#1}}
-\renewcommand{\paragraph}
- {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\bfseries}}
-\renewcommand{\subparagraph}
- {\@startsection{subparagraph}{5}{15pt}{6pt}{-3pt}{\bfseries}}
-\makeatother
-
-%\parindent0pt\parskip\medskipamount
-
-
-%\definePath\bgPath{"C:/Users/Public/Documents/%
-% ManualBGs/Manual_BG_Print_AeB.pdf"}
-%\begin{docassembly}
-%\addWatermarkFromFile({%
-% bOnTop: false,
-% cDIPath: \bgPath
-%})
-%\executeSave()
-%\end{docassembly}
-
-\chngDocObjectTo{\newDO}{doc}
-\begin{docassembly}
-var titleOfManual="The AeB mLink Manual";
-var manualfilename="Manual_BG_Print_mlink.pdf";
-var manualtemplate="Manual_BG_Blue.pdf"; // Blue, Green, Brown
-var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate;
-var doc;
-var buildIt=false;
-if ( buildIt ) {
- console.println("Creating new " + manualfilename + " file.");
- doc = \appopenDoc({cPath: _pathToBlank, bHidden: true});
- var _path=this.path;
- var pos=_path.lastIndexOf("/");
- _path=_path.substring(0,pos)+"/"+manualfilename;
- \docSaveAs\newDO ({ cPath: _path });
- doc.closeDoc();
- doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true});
- f=doc.getField("ManualTitle");
- f.value=titleOfManual;
- doc.flattenPages();
- \docSaveAs\newDO({ cPath: manualfilename });
- doc.closeDoc();
-} else {
- console.println("Using the current "+manualfilename+" file.");
-}
-var _path=this.path;
-var pos=_path.lastIndexOf("/");
-_path=_path.substring(0,pos)+"/"+manualfilename;
-\addWatermarkFromFile({
- bOnTop:false,
- bOnPrint:false,
- cDIPath:_path
-});
-\executeSave();
-\end{docassembly}
-
-\reversemarginpar
-
-%\mlMarksOn
-
-
-\begin{document}
-
-\maketitle
-
-\selectColors{linkColor=black}
-
-\tableofcontents
-
-\selectColors{linkColor=webgreen}
-
-\section{Introduction}
-
-This package creates \underbar{m}ulti-line \underbar{link}s, a dream of mine
-for a number of years. The package \pkg{hyperref} does create links,
-but generally these links cannot be broken across lines, unless the
-application \app{pdflatex} (or \app{xelatex}) is used to create a PDF;
-however, since my workflow is primarily through \app{Acrobat Distiller}, this
-does me little good.
-
-This package uses the \texttt{QuadPoints} entry of the link annotation
-dictionary to create a bounding region; consequently, this package
-requires\marginpar{\small\raggedright\flushright \app{Distiller} or
-\app{ps2pdf} required} \app{Acrobat Distiller} or the \app{ps2pdf.exe}
-converter to create a PDF. The \texttt{QuadPoints} entry in the link
-annotation is a PDF 1.6 feature, so these multi-line links will work in
-\app{Adobe Reader} 7.0 or later. If viewed in a version of \app{Adobe Reader}
-previous to 7.0, the viewer will use the underlying bounding box, which is the
-smallest rectangle containing the link text.
-
-\section{Alternate package name: \texorpdfstring{\protect\pkg{aeb-mlink}}{aeb-mlink}}
-
-This package is known on CTAN as \pkg{aeb-mlink}
-(\href{http://www.ctan.org/pkg/aeb-mlink}{ctan.org/pkg/aeb-mlink}), even
-though there is no such package by that name, until now. Included within this distrubution
-is the `dummy' package \pkg{aeb-mlink} which loads \pkg{aeb\_mlink} and passes all options
-to it.
-
-\section{Requirements}
-
-The following {\LaTeX} packages are the major ones required by \texttt{aeb\_mlink}.
-\begin{itemize}
- \item \pkg{eforms} provides form and link support, \`a la
- {Acro\negthinspace\TeX} (\href{http://www.ctan.org/pkg/acrotex}{ctan.org/pkg/acrotex}).
- \item \pkg{hyperref} provides link support, including the
- commands \cs{hyperref}, \cs{hyperlink}, \cs{href}, \cs{nameref},
- \cs{Nameref}, and \cs{href}.
- \item \pkg{soul} a very nice package by Melchior FRANZ, used by
- \pkg{aeb\_mlink} to break the text of a link into its syllables (\href{http://www.ctan.org/pkg/soul}{ctan.org/pkg/soul}).
-% \nolinkurl{CTAN: tex-archive/macros/latex/contrib/soul/}}
-
-\end{itemize}
-
-\section{Package options}
-
-There are only two package options---the name of the dvi-to-ps converter application to be used---,
-these are \opt{dvips} and \opt{dvipsone}.\footnote{\app{dvipsone.exe} is the dvi-to-ps converter
-of the Y\&Y {\TeX} System, no longer available, but is used by this author.} The default is \opt{dvips}.
-
-%\Hy@colorlinksfalse
-
-\bVerb[\aebdimen=6pt]
-\begin{minipage}[t]{.5\linewidth}
-\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!(),fontsize=\small]
-\documentclass{article}
-\usepackage{xcolor}
-\usepackage[colorlinks]{hyperref}
-\usepackage[!anglemeta(options)]{aeb_mlink}
-\end{Verbatim}
-\end{minipage}\quad\begin{minipage}[t]{.4\linewidth}
-\begin{Verbatim}[commandchars=!(),fontsize=\small]
-\documentclass{article}
-\usepackage[designi]{web}
-\usepackage[!anglemeta(options)]{aeb_mlink}
-\end{Verbatim}
-\end{minipage}
-\eVerb Above are two typical preambles for the use of \pkg{aeb\_mlink}:
-\begin{itemize}
- \item The one on the left inputs \pkg{xcolor} (recommended) and
- \pkg{hyperref} explicitly. The \opt{colorlinks} option is
- recommended for \pkg{hyperref}. These two are followed by
- \pkg{aeb\_mlink}.
- \item The preamble representation on the right uses the \pkg{web}
- package, which internally inputs both \pkg{xcolor} (if available) and
- \pkg{hyperref} (with \opt{colorlinks} option). Again, \pkg{aeb\_mlink}
- comes last.
-\end{itemize}
-
-\paragraph*{Options of \pkg{aeb\_mlinks}.} These are,
-\begin{description}
- \item[\normalfont\texttt{dvips}] Use this option when the \textsf{dvips} application is used
- to create the Postscript file.
- \item[\normalfont\texttt{dvipsone}] Use this option when the \textsf{dvipsone} application is used
- to create the Post\-script file. (Only a few people worldwide use this option.)
- \item[\normalfont\texttt{dblevel=\ameta{\upshape{0|1|2}}}] To obtain information on the multi-line links being
- created. Each value gives more information about what is going on. Used for development.
- \item[\normalfont\ameta{eforms-options}] Any options other than the ones listed above are passed to the
- \pkg{eforms} package.
-\end{description}
-Since \pkg{eforms} is a required package, the \pkg{acrotex} bundle
-(\pkg{AeB}) is installed; consequently, if you've set up the \texttt{web.cfg}
-configuration file (that accompanies \pkg{AeB}) with either
-\cs{ExecuteOptions\darg{dvips}} or \cs{ExecuteOptions\darg{dvipsone}}, the
-specification of the driver (\opt{dvips} or \opt{dvipsone}) is not normally
-needed.
-
-\section{Multi-line link commands}
-
-We define seven multi-line hypertext link commands: \cs{mlhypertext},
-\cs{mlhyperlink}, \cs{mlhyperref}, \cs{mlnameref}, \cs{mlNameref},
-\cs{href}, and \cs{mlurl}. The first is a basic command that is used in the definitions of
-the other six.
-
-%\newtopic\noindent\textbf{Note:} Because of the way the bounding boxes are
-%constructed, it is best that the bounding rectangle is set on invisible, that
-%is, the line width of the boundary line is zero. The \opt{colorlinks} option
-%of \app{hyperref} should be taken.
-
-\exSrc{mlink_tst}The demo file is \texttt{mlink\_tst.tex}, it illustrates all
-the commands -- with the exception of \cs{mlurl} -- of this package. The
-demo file for \cs{mlurl} is a separate file and is mentioned in
-\hyperref[ss:mlrul]{Section~\ref*{ss:mlrul}}.
-
-\subsection{\cmdtitle{mlhypertext} (\cmdtitle{mlsetLink})} A general purpose multi-line link command.
-
-\bVerb[\aebdimen=8pt]\takeMeasure{\string\mlhypertext[\#1]\darg{\#2}}%
-\begin{minipage}{\bxSize}
-\begin{Verbatim}[frame=single,rulecolor=\color{webblue}]
-\mlhypertext[#1]{#2}
-\end{Verbatim}
-\end{minipage}\quad\takeMeasure{\string\mlsetLink[\#1]\darg{\#2}}%
-\begin{minipage}{\bxSize}
-\begin{Verbatim}[frame=single,rulecolor=\color{webblue}]
-\mlsetLink[#1]{#2}
-\end{Verbatim}
-\end{minipage}
-\endgroup
-
-
-\PD The first parameter is optional, and is used to set the appearance and the actions of the link.
-The second parameter is the text around which the link is constructed.
-
-\CmdDescription The \pkg{eforms} package defines \cs{mlsetLink} to
-\cs{mlhypertext} (this is to conform to the naming conventions of
-\pkg{eforms}). Either command sets a hypertext link having a default
-appearance, and no action. The default appearance is the same as that of
-\cs{hyperlink}, the command from \pkg{hyperref}. If \opt{colorlinks}
-option was taken in the hyperref package, the text is colored \cs{@linkcolor}
-(usually red); otherwise, the text is the default color at the time, and a
-boundary rectangle is created by AcroForms with color \cs{@linkbordercolor}
-(usually red).\footnote{The \pkg{web} package changes the default coloring of \pkg{hyperref}.}
-
-\newtopic
-For example, the following link is constructed using
-\cs{mlhypertext}: \mlhypertext[\A{\JS{app.alert("AcroTeX rocks!")}}]%
-{Acrobat Distiller, version~7.0 or greater} was used to
-create this PDF document.
-
-\bVerb\takeMeasure{\string\mlhypertext[\string\A\darg{\string\JS\darg{app.alert("AcroTeX rocks!")}}]\%}%
-\begin{dCmd*}{\bxSize}
-\mlhypertext[\A{\JS{app.alert("AcroTeX rocks!")}}]%
- {Acrobat Distiller, version~7.0 or greater}
-\end{dCmd*}
-\eVerb In the above example, the link, shown in \textcolor{webgreen}{green}
-is broken across lines. Though is not shown in this example, these links
-can break a line at a hyphenation point as well. The optional argument is
-used to create an alert box that appears when the link is clicked.
-
-\subsection{\cmdtitle{mlhyperlink}} A multi-line version of the \cs{hyperlink} command.
-
-\bVerb\takeMeasure{\string\mlhyperlink[\#1]\darg{\#2}\darg{\#3}}%
-\begin{dCmd}{\bxSize}
-\mlhyperlink[#1]{#2}{#3}
-\end{dCmd}
-\endgroup
-
-\PD The first parameter is optional, and is used to set the appearance, but \textit{not the actions} of the link.
-The second parameter is a named destination, perhaps created by the \cs{hypertarget} command of
-\pkg{hyperref}. The third parameter is the text around which the link is constructed.
-
-\CmdDescription This command is the multi-line version of the \pkg{hyperref} command \cs{hyperlink}.
-The default appearance is the same as \cs{hyperlink}, as described above in \cs{mlhypertext}.
-The action of this link is to jump to a named destination; the action cannot be changed by defining
-a different action through the first parameter.
-
-This link uses the \cs{mlhyperlink} command:
-\so{Welcome!} \mlhyperlink{retire}{Welcome, $\dots$ to my humble retirement residence, such as it is!}
-\bVerb\takeMeasure{\string\mlhyperlink\darg{retire}\{Welcome, \$\string\dots\$ to my humble}%
-\begin{dCmd*}{\bxSize}
-\mlhyperlink{retire}{Welcome, $\dots$ to my humble
-retirement residence, such as it is!}
-\end{dCmd*}
-\eVerb In this example, the line is broken at a hyphenation, cool! We jump to
-the named destination, \texttt{retire}. On the last page,
-the following text appears
-\begin{quote}
-\verb!My humble retirement \hypertarget{retire}{home}.!
-\end{quote}
-creating the named destination of \texttt{retire}.
-
-\subsection{\cmdtitle{mlhyperref}}\label{ss:mlhyperref}
-A multi-line version of the \cs{hyperref} command.
-
-\bVerb\takeMeasure{\string\mlhyperref[\#1]\darg{\#2}\darg{\#3}}%
-\begin{dCmd}{\bxSize}
-\mlhyperref[#1]{#2}{#3}
-\end{dCmd}
-\endgroup
-\PD The first parameter is optional, and is used to set the
-appearance, but \textit{not the actions} of the link. The second
-parameter is a label name created by the \cs{label} command of
-\LaTeX. The third parameter is the text around which the link is
-constructed.
-
-\CmdDescription This is the multi-line version of \cs{hyperref}, the command
-defined by the \pkg{hyperref} package. The default appearance is the same
-as \cs{hyperref}. The action of this link is to jump to a destination created
-by the \cs{label} command of the cross-referencing system of \LaTeX; the
-action cannot be changed by defining a different action through the first
-parameter.
-
-\newtopic
-This link uses the \cs{mlhyperref} command: \mlhyperref[\ui{linktxtcolor=red}]{retirement}
-{Welcome! Welcome to my humble retirement residence, such as it is!}
-
-\bVerb\takeMeasure{\string\mlhyperref[\string\ui\darg{linktxtcolor=red}]\darg{retirement}}%
-\begin{dCmd*}{\bxSize}
-\mlhyperref[\ui{linktxtcolor=red}]{retirement}
-{Welcome! Welcome to my humble retirement
-residence, such as it is!}
-\end{dCmd*}
-\eVerb The user-friendly interface is used to change the appearance of the
-color of the link text. The second argument is \texttt{retirement}, which is
-the label
-affixed to the last section of this document,
-\begin{quote}
-\verb!\section{My \textbf{Retirement} Home}\label{retirement}!
-\end{quote}
-See \mlNameref{retirement}.
-
-
-\subsection{\cmdtitle{mlnameref}} A multi-line version of the \cs{nameref} command.
-
-\bVerb\takeMeasure{\string\mlnameref[\#1]\darg{\#2}}%
-\begin{dCmd}{\bxSize}
-\mlnameref[#1]{#2}
-\end{dCmd}
-\endgroup
-
-\PD The first parameter is optional, and is used to set the appearance, but
- \textit{not the actions} of the link. The second parameter is a name of
- a {\LaTeX} label.
-
-\CmdDescription This is the multi-line version of the
-\pkg{hyperref} (\pkg{nameref}) command, \cs{nameref}. The default appearance is
-the same as \cs{hyperref}. The action of this link is to jump to a
-destination created by the \cs{label} command of the
-cross-referencing system of \LaTeX; the action cannot be changed by
-defining a different action through the first parameter.
-
-\newtopic
-This link uses the \cs{mlnameref} command: Click the link to witness \mlnameref{retirement}.
-The code for this link is seen below:
-\bVerb\takeMeasure{\string\mlnameref\darg{retirement}}%
-\begin{dCmd*}{\bxSize}
-\mlnameref{retirement}
-\end{dCmd*}
-\endgroup
-
-\subsection{\cmdtitle{mlNameref}} A multi-line version of the
-\pkg{hyperref} command, \cs{Nameref}.
-
-\bVerb\takeMeasure{\string\mlNameref[\#1]\darg{\#2}}%
-\begin{dCmd}{\bxSize}
-\mlNameref[#1]{#2}
-\end{dCmd}
-\endgroup
-\PD The first parameter is optional, and is used to set the
- appearance, but \textit{not the actions} of the link. The second
- parameter is a name of a {\LaTeX} label.
-
-\CmdDescription This is the multi-line version of the \pkg{hyperref}
-(\pkg{nameref}) command, \cs{Nameref}. The default appearance is the same as
-\cs{hyperref}. The action of this link is to jump to a destination created by
-the \cs{label} command of the cross-referencing system of \LaTeX; the action
-cannot be changed by defining a different action through the first parameter.
-
-\newtopic
-This link uses the \cs{mlNameref} command: Click the link or go to
-the page, \mlNameref{retirement}. The code for the link is seen below:
-\bVerb\takeMeasure{\string\mlNameref\darg{retirement}}%
-\begin{dCmd*}{\bxSize}
-\mlNameref{retirement}
-\end{dCmd*}
-\endgroup
-
-\subsection{\cmdtitle{mlhref}} A multi-line version of the
-\pkg{hyperref} command, \cs{href}.
-\bVerb\takeMeasure{\string\mlhref[\#1]\darg{\#2}\darg{\#3}}%
-\begin{dCmd}{\bxSize}
-\mlhref[#1]{#2}{#3}
-\end{dCmd}
-\endgroup
-
-\PD The first parameter is optional, and is used to set the
- appearance, but \textit{not the actions} of the link. The
- second parameter is a URL, while the third parameter is the link text.
-
-\CmdDescription This is the multi-line version of the
-\pkg{hyperref} command, \cs{href}. The default appearance is
-the same as \cs{hyperref}. There is one of three actions, depending on the
-third argument, just as with \cs{href}. The action cannot be changed by
-defining a different action through the first parameter.
-
-%\begingroup
-%\makeatletter
-%\def\Hy@temp#1{\expandafter\Hy@@temp\csname @#1color\endcsname{#1}}
-%\Hy@temp{link}{red}
-%\Hy@temp{anchor}{black}
-%\Hy@temp{cite}{green}
-%\Hy@temp{file}{cyan}
-%\Hy@temp{url}{magenta}
-%\Hy@temp{menu}{red}
-%\makeatother
-
-\newtopic
-The next link uses the \cs{mlhref} command with URL: \mlhref{%
-http://www.math.uakron.edu/~dpstory/acrotex.html#educational}
-{See the educational offerings of the {Acro\negthinspace{\TeX}} Web
-Site at the University of Akron}
-\bVerb\takeMeasure{\{See the educational offerings of the \darg{Acro\string\negthinspace\darg{\string\TeX}} Web}%
-\begin{dCmd*}{\bxSize}
-\mlhref{%
-http://www.math.uakron.edu/~dpstory/acrotex.html#educational}
-{See the educational offerings of the {Acro\negthinspace{\TeX}} Web
-Site at the University of Akron}
-\end{dCmd*}
-\eVerb
-Use the \cs{mlhref} command with mailto URL: My email address at Acro\negthinspace\TeX.Net,
-\mlhref{mailto:dpstory@acrotex.net}{dpstory at acrotex dot net}.
-\bVerb\takeMeasure{\string\mlhref\darg{mailto:dpstory@acrotex.net}\darg{dpstory at acrotex dot net}}%
-\begin{dCmd*}{\bxSize}
-\mlhref{mailto:dpstory@acrotex.net}{dpstory at acrotex dot net}
-\end{dCmd*}
-\eVerb
-If the second argument is a PDF file, the PDF viewer will open it from your local file system,
-or if you are in a browser, will open it from the web, provided it can find the relative path
-\bVerb\takeMeasure{shameless advertisement for Acro\string\negthinspace\string\TeX\}.}%
-\begin{dCmd*}{\bxSize}
-\mlhref{shameless_ad.pdf}{Here is a
-shameless advertisement for Acro\negthinspace\TeX}.
-\end{dCmd*}
-\eVerb If the key word `\texttt{run:}' is used, the link is set up to launch
-an application. The PDF viewer will attempt to open the file with the
-application associated with the extension of the file provided.
-\bVerb\takeMeasure{\string\mlhref\darg{run:\string\jobname.tex}\darg{This is the source file of this document}.}%
-\begin{dCmd*}{\bxSize}
-\mlhref{run:\jobname.tex}{This is the source file of this document}.
-\end{dCmd*}
-\endgroup
-
-\subsection{\cmdtitle{mlurl}}\label{ss:mlrul}
-
-A multi-line version of the \cs{url} command of the \pkg{url} package.
-The \pkg{hyperref} modifies this command to make it into an unbreakable link (at least for those
-using \app{Distiller}).
-\bVerb\takeMeasure{\string\mlurl[\#1]\darg{\#2}}%
-\begin{dCmd}{\bxSize}
-\mlurl[#1]{#2}
-\end{dCmd}
-\endgroup
-
-\PD The first parameter is optional, and is used to set the
- appearance, but \textit{not the actions} of the link. The
- second parameter is a URL, the text of the link is the same as the URL.
-
-\CmdDescription This is the multi-line version of the
-\pkg{url}/\pkg{hyperref} command, \cs{hurl}. The default appearance is
-the same as set by \cs{hyperref}.
-
-\newtopic
-The next link is an example of \cs{mlurl}:
-\mlurl{http://www.math.uakron.edu/~dpstory/acrotex.html#educational}. The code for this link is found below:
-\bVerb\takeMeasure{\string\mlurl\darg{http://www.math.uakron.edu/\string~dpstory/acrotex.html\#educational}}%
-\begin{dCmd*}{\bxSize}
-\mlurl{http://www.math.uakron.edu/~dpstory/acrotex.html#educational}
-\end{dCmd*}
-\eVerb The \pkg{url} package typesets the URL in math mode, which makes it
-very difficult to wrap it to the next line with a hypertext link around it.
-In math mode, spaces are ignored; consequently, if the URL contains spaces,
-use \verb!\%20! (with backslash), the URL encoding for the space character.
-See the Internet reference
-\mlurl{http://www.w3schools.com/tags/ref_urlencode.asp} for a discussion of
-the \textbf{\caps{HTML URL Encoding Reference}}.
-
-
-\exSrc{mlink_tst_url}The demo file that illustrate all the commands to
-follow is \texttt{mlink\_tst\_url.tex}. Additional details and examples are found in this
-example file.
-
-\section{Setting the appearance and action}
-
-The appearance and the action (at least for \cs{mlhypertex}) can be set through the first
-optional parameter. The optional parameter takes key-value pairs of two types:
-\paragraph*{Key-value Pairs.} The optional first parameter of each of the form and link commands take
-two styles of key-values:
-\begin{enumerate}
- \item eForms KVP: This is the key-value system originally developed, where each KVP has the form
- \cs{\anglemeta{key}\darg{\anglemeta{val}}}. Through these keys, the appearance
- and action of a link---if otherwise not restricted---may be set.
- For example, \mlhypertext[\S{U}\W{1}\Color{0 0.6 0}
- \linktxtcolor{webgreen} \A{\JS{app.alert("AcroTeX
- rocks!")}}]{AcroTeX can be found at
- \texttt{www.acrotex.net}, as close as your nearest web
- browser.}
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
-\mlhypertext[\S{U}\W{1}\Color{0 0.6 0}\linktxtcolor{webgreen}
-\A{\JS{app.alert("AcroTeX rocks!")}}]{AcroTeX...browser.}
-\end{Verbatim}
-
- An alternative link format is to provide a visible rectangle; \mlhypertext[\W1\linktxtcolor{}
- \Color{red}\A{\JS{app.alert("Wrap the link!")}}]{Use a link with a non-zero boundary size along
- with {\protect\cs{S\string{S\string}}}, which is the default.}
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
-\mlhypertext[\W1\linktxtcolor{}\Color{red}
-\A{\JS{app.alert("Wrap the link!")}}]{Use a ... boundary size.}
-\end{Verbatim}
-
- The eForms KVP system is explained in the eforms manual,
- \textsl{\mlhref{http://www.math.uakron.edu/~dpstory/acrotex/eformman.pdf}{Support for AcroForms and Links, and for Document JavaScript and Open Page Events}},\footnote
- {\url{http://www.math.uakron.edu/~dpstory/acrotex/eformman.pdf}}
- where a complete listing of all supported KVPs is found in the appendices.
-
-
- \item \pkg{xkeyval} KVP: When the \opt{useui} option is taken of the eforms package, key-value pairs are
- defined of the form \texttt{\anglemeta{key}[\,=\,\anglemeta{value}]}. The key-value pairs are actually a value of
- a special eForms key, \cs{ui}. The value of \cs{ui} consists of a comma-delimited list of
- \pkg{xkeyval} key-value pairs. For example,
- \mlsetLink[\ui{%
- border=visible,
- linestyle=underlined,
- bordercolor={0 0.6 0},
- linktxtcolor=webgreen,
- js={app.alert("AcroTeX rocks!")}}]{AcroTeX
- can be found at \texttt{www.acrotex.net}, as
- close as your nearest web browser.}
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small]
-\mlsetLink[\ui{%
- border=visible,
- linestyle=underlined,
- bordercolor={0 0.6 0},
- linktxtcolor=webgreen,
- js={app.alert("AcroTeX rocks!")}}]{AcroTeX...browser.}
-\end{Verbatim}
- \item[] The \pkg{xkeyval} KVP system is described in the document
- \textsl{\mlhref{http://www.math.uakron.edu/~dpstory/acrotex/eformman.pdf}{Support for AcroForms and Links, and for Document JavaScript and Open Page Events}}.\footnote
- {ibid.}
-\end{enumerate}
-
-\paragraph*{Keys special to the \pkg{aeb\_mlink} package.} The following links are defined
-within \pkg{eforms}, but are only obeyed from within the option list of one of the
-\cs{ml\ameta{cmdname}} commands.
-\begin{itemize}
-\item \cs{mlfix\darg{\ameta{\upshape{y|n}}}} (\pkg{xkeyval} KVP: \texttt{mlfix=\ameta{\upshape{yes|no}}})\\
- If \cs{mlfix\darg{y}} is specified, contiguous bounding rectangles are combined; otherwise they are not.
- See Section~\ref{s:FixQuads} for more information.
-\item \cs{mlstrut\darg{\ameta{some-strut}}} (\pkg{xkeyval} KVP: \texttt{mlstrut=\ameta{some-strut}})\\
- The value of this key sets the height of the bounding rectangles; the default is \cs{strut}. See
- Section~\ref{s:FixQuads} for detains and examples.
-\item \cs{mlcrackat\darg{\ameta{num}}} (\pkg{xkeyval} KVP: \texttt{mlcrackat=\ameta{num}})\\
- This key is use to crack (or break) an hypertext or url into two links.
- The application is to enable the link to break across a page boundary. Refer
- to the paragraph \textbf{\mlnameref{para:xpage}}, beginning on page~\pageref{para:xpage}
- for more information on \cs{mlcrackat}.
-\item \cs{mlhyph\darg{\ameta{\upshape{y|n}}}} (\pkg{xkeyval} KVP: \texttt{mlhyph=\ameta{\upshape{yes|no}}})\\
- When the \cs{mlcrackat} option is used, an hyphen is inserted provided \cs{mlhyph{y}}, otherwise, no hypen
- is inserted. Refer to the paragraph \textbf{\mlnameref{spara:fixxpage}}, page~\pageref{spara:fixxpage}, for
- an example.
-\item \cs{mlcrackinsat\darg{\ameta{text}}} (\pkg{xkeyval} KVP: \texttt{mlcrackinsat=\ameta{text}})\\
- The value \ameta{text} of this key is inserted after the break point, when
- \cs{mlcrackat} is used. Normally, nothing is inserted after the brake point.
-\end{itemize}
-
-\section{Fixing the quad points}\label{s:FixQuads}
-
-In versions of \pkg{aeb\_mlink} prior to 2018/03/19, the each syllable
-(possible break point) of multi-line text was enclosed in a bounding
-rectangle (described by the coordinates of its four corners). For example, it
-is well known that \mlhypertext[\A{\JS{app.alert("And so it
-is");}}\mlfix{n}\linktxtcolor{}\W1\H{O}\S{S}\Color{red}]{the acrotex website
-is free to all who dare to enter.} Now you see the individual bounding
-rectangles; they are all linked together, if you click on one of them, they
-all react.
-
-Beginning with the version of \pkg{aeb\_mlink} dated 2018/03/19, Postscript
-code was introduced to fix up these bounding boxes so that all syllables
-\emph{on the same line} are enclosed in a single bounding rectangle.
-\mlhypertext[\A{\JS{app.alert("And so it is");}}\linktxtcolor{}\W1\H{O}\S{S}\Color{red}]{If we turn on this feature
-and declare the acrotex website is free to all who dare to enter.} Very cool!
-
-\exAeBBlogPDF{p=1377} The demonstration document for these feature is found on the
-\href{\urlAcroTeXBlog}{{\AcroTeX} Blog} web site. Refer to the article
-titled \textsl{\href{\urlAcroTeXBlog?p=1377}{Fixing multi-line link boxes}}.
-
-
-\paragraph*{Turning the fix on and off.} The feature of fixing up these
-little rectangles into one rectangle per line is controlled by the commands
-\cs{mlfixOn} and \cs{mlfixOff}; the first turns on the fix up, the second
-turns it off. The default is \cs{mlfixOn}. These two commands turn on or off
-the fix up for the document (or within a group), to turn the fix on or off
-for an individual link, use the key-value pairs \verb~\mlfix{y}~ to turn on
-the fix and \verb~\mlfix{n}~ to turn it off. These key-values are placed as
-an optional argument of any of the \cs{ml\ameta{cmdname}} commands. For
-example,
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\mlhypertext[!textbf(\mlfix{n})\A{\JS{app.alert("And so it is");}}
-\linktxtcolor{}\W1\H{O}\S{S}\Color{red}]{the acrotex website is
-free to all}
-\end{Verbatim}
-The user-friendly counterpart is \texttt{mlfix=\ameta{\upshape{yes|no}}}.
-
-\paragraph*{Changing the vertical size of the rectangles.} The default height
-and depth of the boxes are determined by \cs{strut}, in the current font
-size. A \emph{new key is introduced}, \cs{mlstrut\darg{\ameta{some-strut}}}.
-You can simple increase the vertical dimensions of the boxes by
-\verb~\mlstrut{\large\strut}~ or \verb~\mlstrut{\huge\strut}~.
-\mlhypertext[\A{\JS{app.alert("And so it is");}}\mlstrut{\large\strut}\linktxtcolor{}\W1\H{O}\S{S}\Color{red}]
-{The acrotex website is free to all} link should have vertically expanded rectangles.
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\mlhypertext[!textbf(\mlstrut{\large\strut})\A{\JS{app.alert("And so it is");}}
-\linktxtcolor{}\W1\H{O}\S{S}\Color{red}]{The acrotex website
-is free to all}
-\end{Verbatim}
-When the link is underlined (\verb~\S{U}~) the depth is set to 1bp. These
-changes to the vertical size of the rectangles do not affect any text
-positioning of the content, only the bounding boxes.
-
-\texttt{mlstrut=\ameta{some-strut}} is the counterpart to
- \cs{mlstrut\darg{\ameta{some-strut}}} in the user-friendly key-value system.
-
-The \ameta{some-strut} argument can be anything that takes up vertical space, any horizontal space is ignored.
-For example, \mlhypertext[\mlstrut{$\displaystyle\int_0^\pi$}\linktxtcolor{}\W1\H{O}\S{S}\Color{red}
-\A{\JS{app.alert("No action defined, other than this one.")}}]{``The integral
-{$\displaystyle\int_0^\pi \sin(x)\,dx$} has a value of a crummy little $2$.''}
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\mlhypertext[\mlstrut{$\displaystyle\int_0^\pi$}\linktxtcolor{}\W1\H{O}
-\S{S}\Color{red}]{``The integral {$\displaystyle\int_0^\pi \sin(x)\,dx$}
-... $2$.''}
-\end{Verbatim}
-
-\paragraph*{Important:} When the feature of fixing the
-rectangles is active (with \cs{mlfixOn} or locally with \cs{mlfix\darg{y}}),
-you need to \emph{compile the document at least three times} before
-distilling the document; otherwise distiller fails. There are commands
-written to the \textsf{AUX} file that needs to be up to date. This is only
-needed after you modify any of the multi-line hypertext links. There are
-{\LaTeX} warning messages written to the {\TeX} log to inform you if the
-links are not fully formed; there are also messages in the distiller log.
-Setting the package option \texttt{dblevel=1} can increase the amount of
-feedback you get through the distiller log.
-
-\paragraph*{Marking the links.} You can run into trouble with one or more of the links. There
-may be tex log or distiller log messages referring to the link number (e.g.,
-\texttt{mLink30}), but where is this link? By expanding \cs{mlMarksOn}, you
-turn on the marking of the links. I'm turning on link marking for the rest of
-the document. Look for `L\ameta{num}' beginning in section~\ref{ss:probs}.
-Turn marking back off with \cs{mlMarksOff}. Above the starting point of each
-link will be a tiny `L\ameta{num}'. The format for this little `L\ameta{num}'
-is determined by the internal command \cs{ml@MrkLnk}; it may redefined as
-desired.
-
-\mlMarksOn
-
-\paragraph*{Multi-line links that break across pages.}\label{para:xpage} This phenomenon is not
-supported by the PDF Reference. These kinds of links can be created by
-{\LaTeX} when the link is near the bottom of the page and {\LaTeX} moves a
-portion of it to the next page. \pkg{aeb\_mlinks} detects this when the
-document is distilled and places a message in the distiller (or \app{ps2pdf}) log. If you have
-a link that crosses page boundaries, you need to reword the paragraph to
-avoid this. The message reads,\goodbreak
-\begin{Verbatim}[fontsize=\small]
-Beginning of page: 3
-!!------------------------------------------------------------------
-Warning:
-The text of mLink4 has crossed a page boundary from page 2 to 3.
-Cross page links are not supported by the PDF Specification.
-This link is not constructed, please fix it.
-Break point is after syllable number 4.
-Use the \mlcrackat{4} option with this link.
-!!------------------------------------------------------------------
-\end{Verbatim}
-and can't be missed. The link is not constructed. You can see here, there is a reference
-to \texttt{mLink4}. You need to turn on link marking (\cs{mlMarksOn}) or just go to page~2
-and look at the bottom of the page.
-
-\subparagraph*{Fixing a cross-page link.}\label{spara:fixxpage} There are several actions you can
-take to fix a link that has crossed a page boundary: (1) rewrite the
-paragraph so the link does not cross the page boundary; (2) as the log file suggests, you
-can use the \cs{mlcrackat\darg{4}} option. In this latter case, for example,
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\mlhypertext[\mlcrackat{4}\mlhyph{y}!ameta(other-opts)]
- {Doctor Story created the acrotex website.}
-\end{Verbatim}
-Two links are created, the first consisting of the text `Doctor Story cre-'
-and the second on `ated the acrotex website.'; the second link (should) be
-inserted on the next page. The link option \cs{mlhyp\darg{y}} inserts an
-hyphen at the break point. For URLs, a hyphen may not be appropriate.
-
-%\kern7pt
-
-\exAeBBlogPDF{p=1383}\textbf{ A working document:} The demonstration document
-for breaking links across pages is found on the
-\href{\urlAcroTeXBlog}{{\AcroTeX} Blog} web site. Please refer to the
-article titled
-\textsl{\mlhref{\urlAcroTeXBlog?p=1377}{Crossing page
-boundaries with multi-line links}}. Many other articles on {\AEB} and {\PDF}
-can be found at the \href{\urlAcroTeXBlog}{{\AcroTeX} Blog} web site, as
-well.
-
-%\normalcolor
-
-\paragraph*{Reverting to the old style.}
-The restriction of having to compile multiple times before
-distillation may be a burden when it comes to developing a document. You can
-declare \cs{OldStyleBoxesOn} in the preamble to revert to the old style that
-does not use the information written to the auxiliary file. After document
-development and the text of all links are stable, you can then say
-\cs{OldStyleBoxesOff} (or comment out \cs{OldStyleBoxesOn}) in the preamble.
-Compiling then yields the better formed and combined bounding rectangles.
-
-\paragraph*{Minimally sized \texttt{/Rect}.} For multi-line links, the link
-annotation contains two entries containing dimensions of rectangles, the
-\texttt{/Rect} and \texttt{/QuadPoints} entries. Our focus in this paragraph
-is on \texttt{/Rect}; there are two possible values for \texttt{/Rect}: (1)
-the dimensions of the entire page, which has been the default value since the
-inception of this package, or (2) the dimensions of the smallest rectangle
-containing all the hypertext, the new default.\smallskip
-
-\noindent\strut{\fboxsep0pt\fcolorbox{blue}{white}{\parbox{\linewidth}
-{\hskip\amtIndent For example, the following link is constructed using
-\cs{mlhypertext}: \mlhypertext[\A{\JS{app.alert("AcroTeX rocks with minimal rectangles!")}}]%
-{Acrobat Distiller, version~7.0 or greater} was used to
-create this PDF document. The blue rectangle}}} is a representation of the `unseen' \texttt{/Rect}
-dimensions. It is the smallest rectangle that contains the hypertext. You can revert to the old
-default (the whole page) by expanding \cs{useSmallRectOff}, the default is \cs{useSmallRectOn}.\medskip
-
-\textbf{The importance of small rectangles.} In the current age we live in,
-web browsers have their own `native' PDF viewers. These viewers generally do
-not obey JavaScript actions but they do recognize basic actions such as
-jumping to the destination in the document; however, they ignore the
-\texttt{/QuadPoints} entry in a link, and respect only the \texttt{/Rect}
-entry. In a `native' viewer, following a multi-line link may be problem when
-the \texttt{/Rect} entry is set the whole page. Now, the \texttt{/Rect} is
-the minimal rectangle, and following a link should not be an issue as long as
-\emph{one rectangle is not contained within another}. Multi-line links are
-fully supported by \app{Adobe Acrobat Reader}.
-
-\paragraph*{Tricky bits.} The use of \cs{mlnameref} and \cs{mlNameref} can be tricky when
-the referenced label contains special commands or font changes. Two tricks
-are to enclose the bad bits in braces (\texttt{\darg{}}) and/or \cs{protect}
-commands. Section or paragraph commands that end up as PDF bookmark need to use
-the \pkg{hyperref} command \cs{texorpdfstring}. To illustrate, an dummy subsection
-is introduced, and the discussion on this topic is continued there.
-
-
-\subsection{Discussion of \texorpdfstring
- {{\protect\cs{mlnameref}}, {\protect\cs{mlNameref}}, and {\protect\cs{mlhypertext}}}
- {\textbackslash{mlnameref}, \textbackslash{mlNameref}, and \textbackslash{mlhypertext}}}\label{ss:probs}
-
-To illustrate, we reference the section title ``\mlnameref{ss:probs}.'' The verbatim listing of this subsection is
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\subsection{Discussion of problems with \texorpdfstring
- {{\protect\cs{mlnameref}}, {\protect\cs{mlNameref}},
- and {\protect\cs{mlhypertext}}}
- {\textbackslash{mlnameref}, \textbackslash{mlNameref},
- and \textbackslash{mlhypertext}}}\label{ss:probs}
-\end{Verbatim}
-Observe use of \cs{texorpdfstring}, the first argument is typeset, the second
-one is placed in the bookmarks.
-\begin{itemize}
- \item On the first argument of \cs{texorpdfstring}, we focus our comments
- on the first \verb~{\protect\cs{mlnameref}}~ of the three commands
- referenced. Note that it is enclosed in braces that signals the
- \opt{soul} package, which does the parsing, to treat it as an
- unbreakable unit. The control sequence \cs{cs} is protected by
- \cs{protect}. Finally \cs{cs} is a command that produces a backslash in
- front of its argument in monospace font.
-
- There are two `common' definitions of \cs{cs}-style commands:
- \begin{itemize}
- \item \verb~\def\cs#1{\texttt{\char`\\#1}}~
- \item \verb~\def\cs#1{\texttt{\@backslashchar#1}}~ (used in this manual)
- \end{itemize}
- The latter definition must be the one used within a section title, not the first one.
-
- The \pkg{aeb\_mlinks} defines \cs{mlcs} using the second version; that
- is \begin{flushleft}\hskip\amtIndent\verb~\def\mlcs#1{\texttt{\@backslashchar#1}}~\end{flushleft} is defined. In
- this way both definitions for \cs{cs} are available. The \cs{mlcs}
- version must be used in text that can be referenced by \mlcs{mlnameref}
- or \mlcs{mlNameref}.
-\end{itemize}
-In the above title declaration, if any of the components (the braces, the \cs{protect}, and the special
-definition of \cs{cs}) {\LaTeX} compilation errors occur.
-
-Similar comments are made for \cs{mlhypertext}, \cs{mlhyperref}, and \cs{mlhyperlink}. These three take
-a text phrase as its `hypertext' string. For example,
-``\mlhyperref[\linktxtcolor{}\Color{red}\S{S}\W1]{ss:mlhyperref}{The exciting world of {\protect\mlcs{mlhyperref}} is average wonderful.}''
-\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()]
-\mlhyperref[\linktxtcolor{}\Color{red}\S{S}\W1]{ss:mlhyperref}{The
- exciting world of {\protect\mlcs{mlhyperref}} is average wonderful.}
-\end{Verbatim}
-Notice the braces, the \cs{protect}, and the use of \cs{mlcs}; they work
-together for a successful link construction.
-
-\newpage
-
-\section{My \textbf{Retirement} Home}\label{retirement}
-
-My humble retirement \hypertarget{retire}{home}.
-\begin{flushleft}
-\setLink[\H{N}\A{\Named{GoBack}}]{\includegraphics[scale=.5]{DSC01404}}\quad \raisebox{75pt}{\textbf{Click image to return from jump}}
-\end{flushleft}
-
-
-\newtopic\noindent
-Now, I simply must get back to my retirement. \dps
-
-
-
-\end{document}