diff options
author | Andreas Scherer <andreas_tex@freenet.de> | 2020-06-15 15:45:37 +0000 |
---|---|---|
committer | Andreas Scherer <andreas_tex@freenet.de> | 2020-06-15 15:45:37 +0000 |
commit | 73b549dd4c503deb68ac23705c6dd59ab3f9afd2 (patch) | |
tree | 81ab47f88ce8c8d1bba25a3381abc8ddc01bf8e2 | |
parent | 8300efe29160315794b910f76b730a0012ee4aae (diff) |
[CWEB/CTWILL] Improved 'pdfctwimac'.
* Unified color management for 'link color'
* Simplified if-else inside \acro
* Flat outlines/bookmarks with pdfTeX
TODO: Implement \makebookmarks for pdfTeX with a \jobname.toc file.
git-svn-id: svn://tug.org/texlive/trunk@55555 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Build/source/texk/web2c/cwebdir/ChangeLog | 6 | ||||
-rw-r--r-- | Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex | 58 |
2 files changed, 31 insertions, 33 deletions
diff --git a/Build/source/texk/web2c/cwebdir/ChangeLog b/Build/source/texk/web2c/cwebdir/ChangeLog index e5f8150e2d9..3654035a14a 100644 --- a/Build/source/texk/web2c/cwebdir/ChangeLog +++ b/Build/source/texk/web2c/cwebdir/ChangeLog @@ -1,3 +1,9 @@ +2020-06-15 Andreas Scherer <https://ascherer.github.io> + + * texinputs/pdfctimac.tex: Unified color management; + code compaction; simplified if-else inside \acro; + flat outlines/bookmarks with pdfTeX. + 2020-06-14 Andreas Scherer <https://ascherer.github.io> * texinputs/pdfctimac.tex: New macros for PDF output with hyperlinks diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex index 0c0ab27c097..b53d789bc9f 100644 --- a/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex +++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfctwimac.tex @@ -17,7 +17,7 @@ \ifx\pdfoutput\undefined \pdftexfalse \else\ifnum\pdfoutput=0 \pdftexfalse \else \pdftextrue \pdfoutput=1 \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too - \def\Blue{\pdfliteral{0 0 1 rg 0 0 1 RG}} + \def\PDFlinkcolor{\pdfliteral{\pdflinkcolor rg \pdflinkcolor RG}} \fi\fi \newif\ifacro \ifpdf\acrotrue\fi \ifpdftex\acrotrue\fi @@ -237,8 +237,8 @@ \let\yskip=\smallskip \def\?{\mathrel?} \def\note#1#2.{\par\penalty5000 - \Y\noindent{\hangindent2\em - \baselineskip10pt\eightrm#1~\ifacro{\pdfnote#2.}\else#2\fi.\par}} + \Y\noindent{\hangindent2\em\baselineskip10pt + \eightrm#1~\ifacro{\pdfnote#2.}\else#2\fi.\par}} \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newtoks\toksE \newtoks\toksF \newtoks\usersanitizer @@ -254,7 +254,7 @@ \ifpdftex \ifx\pdfannotlink\undefined\let\pdfannotlink\pdfstartlink\fi% for pdfTeX 0.14 \def\pdflink#1#2{\hbox{\pdfannotlink height\ht\strutbox depth\dp\strutbox - attr{/Border [0 0 0]} goto num #1 \Blue #1\Black\pdfendlink}} % changed 3.69 + attr{/Border [0 0 0]} goto num #1 \PDFlinkcolor #1\Black\pdfendlink}} \else\def\pdflink#1#2{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}% \special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight depth \thedepth << /Type /Annot /Subtype /Link @@ -283,9 +283,9 @@ {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0} \def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \def\pdfURL#1#2{\ifpdftex\pdfannotlink height\ht\strutbox depth\dp\strutbox - attr {/Border [0 0 0]} user { /Type /Action /Subtype /Link /A - << /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69 - \else \ifpdf{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}% + attr {/Border [0 0 0]} user {/Type /Action /Subtype /Link /A + << /S /URI /URI (#2) >>}\PDFlinkcolor #1\Black \pdfendlink + \else\ifpdf{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}% \special{pdf: ec}}\special{pdf: ann width \thewidth\space height \theheight \space depth \thedepth\space << /Border [0 0 0] /Type /Action /Subtype /Link /A << /S /URI /URI (#2) >> >>}\box0\relax}% @@ -395,11 +395,10 @@ \def\stsec{\tenpoint\rightskip=0pt % get out of C mode (cf. \B) \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 \noindent\strut{\let\*=\lapstar\bf\secno.\quad}% - \ifpdftex\smash{\raise\baselineskip\hbox to0pt{% - \let\*=\empty\pdfdest num \secstar fith}}% - \else\ifpdf\smash{\raise\baselineskip\hbox to0pt{% - \let\*=\empty\special{% - pdf: dest (\romannumeral\secstar) [ @thispage /FitH @ypos ]}}}\fi\fi} + \ifacro \smash{\raise\baselineskip\hbox to0pt{\let\*=\empty + \ifpdftex \pdfdest num \secstar fith% + \else \special{pdf: dest (\romannumeral\secstar) + [ @thispage /FitH @ypos ]}\fi}}\fi} \def\startsection{\titletrue \line{\smash{\titlefont\title}\quad\hrulefill}\bigskip \let\startsection=\stsec\stsec} @@ -453,10 +452,17 @@ %{\noexpand\the\pageno}{\the\toksE}}}\next % \ZZ{title}{depth}{sec}{page}{ss} \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno} \ifnum#1>0\countB=#1 \advance\countB by-1 - \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi\fi - \ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest - [ @thispage /FitH @ypos ] >>}\fi + \advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi + {\let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let + \pdfoutline goto num \secno count -\expnumber{chunk#1.\secno} + {\the\toksE}} + \else\ifpdf\special{pdf: outline #1 << /Title (\the\toksE) /Dest + [ @thispage /FitH @ypos ] >>}\fi\fi \startsection{\bf\ignorespaces#3.\quad}\ignorespaces} +\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex +\def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1 + \expandafter\xdef\csname#1\endcsname{\the\countA}} % \O is Scandinavian letter O-with-slash % \P is paragraph sign \def\Q{\note{This code is cited in section}} % xref for mention of a section @@ -465,7 +471,7 @@ % \S is section sign \def\T#1{\leavevmode % octal, hex or decimal constant \hbox{$\def\?{\kern.2em}%$% - \def\$##1{\egroup_{\rm##1}\bgroup}% suffix to constant + \def\$##1{\egroup_{\,\rm##1}\bgroup}% suffix to constant \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick) \let\~=\oct \let\^=\hex {#1}$}}%$% \def\U{\note{This code is used in section}} % xref for use of a section @@ -639,9 +645,8 @@ \let\inx=\flushout % No full index at the end \def\fin{\parfillskip 0pt plus 1fil - \ifpdftex \makebookmarks \fi \gtitle={NAMES OF THE SECTIONS} - \let\topsecno=\nullsec \let\next=\relax + \let\topsecno=\nullsec \message{Section names:} \def\note##1##2.{\quad{\eightrm##1~\ifacro{\pdfnote##2.}\else{##2}\fi.}} \def\Q{\note{Cited in section}} % crossref for mention of a section @@ -655,24 +660,15 @@ %\def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% %{\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% %\pdfoutline goto num \the\toksA \expandafter{\the\toksE}} - %\else\ifpdf - %\special{pdf: outline -1 << /Title (\outsecname) + %\else \special{pdf: outline -1 << /Title (\outsecname) %/Dest [ @thispage /FitH @ypos ] >>} %\def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.% %{\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}% %\special{pdf: outline 0 << /Title (\the\toksE) %/A << /S /GoTo /D (\romannumeral\the\toksA) >> >>}} - %\fi\fi\fi + %\fi\fi \readsections} \def\readsections{\relax}%\input \jobname.scn} -\def\makebookmarks{\relax}%\let\ZZ=\writebookmarkline \readcontents\relax} -\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex -\def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1 - \expandafter\xdef\csname#1\endcsname{\the\countA}} -\def\writebookmarkline#1#2#3#4#5{{% - \let\(=\let \let\)=\let \let\[=\let \let\]=\let \let\/=\let - \pdfoutline goto num #3 count -\expnumber{chunk#2.#3} {#5}}} \let\con=\end % no table of contents \def\datethis{} \def\datecontentspage{} @@ -690,7 +686,3 @@ \else\ifnum\pageno=\nextpage\getnextpage\let\next=\Shipout \else\let\next=\Tosspage\fi\fi \next} \newbox\garbage \def\Tosspage{\deadcycles=0\setbox\garbage=} -\def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} % Petr Olsak's macros from texinfo.tex -\def\advancenumber#1{\countA=\expnumber{#1}\relax \advance\countA by1 - \expandafter\xdef\csname#1\endcsname{\the\countA}} |