summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/dataref
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-10-09 21:36:07 +0000
committerKarl Berry <karl@freefriends.org>2014-10-09 21:36:07 +0000
commit31e38ed81d818c82a28f783476266f8945dac537 (patch)
treec8fa9cdb405342188dfd72b356b7e6c8e56fb76b /Master/texmf-dist/tex/latex/dataref
parentf5ec258f88df2f3950b5d8dd03303420a6e947c9 (diff)
dataref (9oct14)
git-svn-id: svn://tug.org/texlive/trunk@35341 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/dataref')
-rw-r--r--Master/texmf-dist/tex/latex/dataref/dataref.sty280
1 files changed, 168 insertions, 112 deletions
diff --git a/Master/texmf-dist/tex/latex/dataref/dataref.sty b/Master/texmf-dist/tex/latex/dataref/dataref.sty
index 1b9e1d2c32d..a08d450e1be 100644
--- a/Master/texmf-dist/tex/latex/dataref/dataref.sty
+++ b/Master/texmf-dist/tex/latex/dataref/dataref.sty
@@ -25,7 +25,7 @@
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{dataref}
- [2014/08/20 v0.2 dataref]
+ [2014/10/09 v0.3 dataref]
\ifx\drefloaded\undefined
\let\drefloaded=\relax
@@ -70,8 +70,8 @@
\def\drefset#1#2{\dref@set{#1}{#2}}
\def\dref@expandable#1{%
- \pgfkeysifdefined{\dref@datapath#1}{%
- \pgfkeysvalueof{\dref@datapath#1}%
+ \pgfkeysifdefined{\dref@datapath\csuse{dref@prefix}#1}{%
+ \pgfkeysvalueof{\dref@datapath\csuse{dref@prefix}#1}%
}{%
\ifdref@ignoremissing%
\dref@defaultvalue%
@@ -81,11 +81,12 @@
}%
}
\def\dref@unexpandable#1{%
- \def\drefcurrentkey{\dref@datapath#1}%
+ \def\drefcurrentkey{\dref@datapath\csuse{dref@prefix}#1}%
\pgfkeysifdefined{\drefcurrentkey}{%
- \immediate\write\@auxout{\noexpand\dref@found{\drefcurrentkey}{\thepage}}%
+ \edef\dref@thepage{\arabic{page}}%
+ \immediate\write\@auxout{\noexpand\dref@found{\drefcurrentkey}{\dref@thepage}}%
}{%
- \immediate\write\@auxout{\noexpand\dref@notfound{\drefcurrentkey}{\thepage}}%
+ \immediate\write\@auxout{\noexpand\dref@notfound{\drefcurrentkey}{\dref@thepage}}%
\ifdref@ignoremissing%
\typeout{Dref warning: undefined key `\drefcurrentkey'}%
\dref@mkannotate{UNDEFINED: \drefcurrentkey}%
@@ -93,26 +94,26 @@
\dref@error{Dref error: undefined key `\drefcurrentkey'}%
\fi%
}%
- \immediate\write\@auxout{\noexpand\dref@referenced{\drefcurrentkey}{\thepage}}%
+ \immediate\write\@auxout{\noexpand\dref@referenced{\drefcurrentkey}{\dref@thepage}}%
}
\newcommand{\drefifdefined}[3]{
- \def\drefcurrentkey{\dref@datapath#1}%
+ \def\drefcurrentkey{\dref@datapath\csuse{dref@prefix}#1}%
\pgfkeysifdefined{\drefcurrentkey}{#2}{#3}%
}
\def\dref{\@ifstar\@@dref\@dref}
\newcommand{\@dref}[2][]{% Unstarred
- \edef\dref@argument{#2}
+ \edef\dref@argument{#2}%
\expandafter\dref@unexpandable\expandafter{\dref@argument}%
\pgfmathparse{\dref@expandable{#2}}%
\dref@format[#1]{\pgfmathresult}%
- \dref@mkannotate{#2}%
+ \dref@mkannotate{\textbackslash dref\{#2\}}%
}
-\newcommand{\@@dref}[2][]{ % Starred
- \edef\dref@argument{#2}
+\newcommand{\@@dref}[2][]{% Starred
+ \edef\dref@argument{#2}%
\expandafter\dref@unexpandable\expandafter{\dref@argument}%
\expandafter\gdef\expandafter\dref@dref@output\expandafter{\expandafter\dref@expandable\expandafter{\dref@argument}}%
\dref@dref@output%
- \dref@mkannotate{#2}%
+ \dref@mkannotate{\textbackslash dref*\{#2\}}%
}
\def\drefvalueof#1{%
\dref@expandable{#1}%
@@ -170,71 +171,64 @@
\dref@let{#1}%
}
-\def\dref@calc@parser@d#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1d%
- \dref@calc@parser@a #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
-}
-
-\def\dref@calc@parser@a#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1a%
- \dref@calc@parser@t #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
+\def\dref@parser#1#2{%
+ \edef\@tempa{#1}%
+ \csdef{dref@parser@result}{}%
+ \csdef{dref@parser@state}{}%
+ \expandafter\dref@parser@parse\@tempa\@nnil%
+ \xdef#2{\csuse{dref@parser@result}}%
}
-\def\dref@calc@parser@t#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1t%
- \dref@calc@parser@A #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
+\def\dref@parser@parse#1#2\@nnil{%
+ %\typeout{#1 State: \csuse{dref@parser@state}}%
+ \ifblank{#1#2}{%
+ \csxdef{dref@parser@result}{\csuse{dref@parser@result}\csuse{dref@parser@state}}%
+ }{%
+ \ifcsdef{dref@parser@\csuse{dref@parser@state}@#1}{%
+ \csuse{dref@parser@\csuse{dref@parser@state}@#1}#2\@nnil%
+ }{%
+ \csxdef{dref@parser@result}{\csuse{dref@parser@result}\csuse{dref@parser@state}#1}%
+ \csdef{dref@parser@state}{}%
+ \ifblank{#2}{}{%
+ \dref@parser@parse#2\@nnil%
+ }%
+ }%
+ }%
}
-\def\dref@calc@parser@A#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1a%
- \dref@calc@parser@P #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
-}
+\csdef{dref@parser@@d}{\csdef{dref@parser@state}{d}\dref@parser@parse}
+\csdef{dref@parser@d@a}{\csdef{dref@parser@state}{da}\dref@parser@parse}
+\csdef{dref@parser@da@t}{\csdef{dref@parser@state}{dat}\dref@parser@parse}
+\csdef{dref@parser@dat@a}{\csdef{dref@parser@state}{data}\dref@parser@parse}
+\csdef{dref@parser@data@(}{\csdef{dref@parser@state}{data(}\dref@parser@parse}
+\csdef{dref@parser@data(@"}{\dref@parser@tillquote}
+\csdef{dref@parser@d@(}{\dref@parser@tillparen}
-\def\dref@calc@parser@P#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1(%
- \dref@calc@parser@Q #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
-}
+\def\dref@parser@tillquote#1")#2\@nnil{%
+ \drefref{\dref@data@math@prefix #1}%
+ \csxdef{dref@parser@result}{\csuse{dref@parser@result}(\drefvalueof{\dref@data@math@prefix #1})}%
+ \csdef{dref@parser@state}{}%
+ \ifblank{#2}{}{\dref@parser@parse#2\@nnil}}
-\def\dref@calc@parser@Q#1#2\@nnil{%
- \ifx&#2&#1\else%
- \if#1"%
- \dref@calc@parser@E #2\@nnil%
- \else%
- #1\dref@calc@parser@d #2\@nnil%
- \fi\fi
-}
+\def\dref@parser@tillparen#1)#2\@nnil{%
+ \drefref{\dref@data@math@prefix #1}%
+ \csxdef{dref@parser@result}{\csuse{dref@parser@result}(\drefvalueof{\dref@data@math@prefix #1})}%
+ \csdef{dref@parser@state}{}%
+ \ifblank{#2}{}{\dref@parser@parse#2\@nnil}}%
-\def\dref@calc@parser@E#1")#2\@nnil{%
- (\drefvalueof{\dref@data@math@prefix#1})\ifx&#2&\else\dref@calc@parser@d #2\@nnil\fi%
-}
+\def\dref@parser@end#1#2\@nnil{}
+\csdef{dref@parser@@}{\typeout{end}\dref@parser@end}
\newcommand{\dref@calc}[1]{%
- \xdef\dref@calc@argA{#1}%
- \xdef\dref@calc@@argA{\expandafter\dref@calc@parser@d \dref@calc@argA\@nnil}%%
- % \typeout{>>>> \dref@calc@argA -> \dref@calc@@argA}%
- \pgfmathparse{\dref@calc@@argA}
+ %\typeout{Before: '#1'}%
+ \dref@parser{#1}{\dref@calc@@argA}%
+ %\typeout{After: \dref@calc@@argA}%
+ \pgfmathparse{\dref@calc@@argA}%
}
+
\pgfset{/dref/let/.code={\dref@let{#1}}}
+\pgfset{/dref/prefix/.code={\csdef{dref@prefix}{#1}}}
+\def\drefprefix#1{\csdef{dref@prefix}{#1}}
\def\drefresult{0}
\def\drefcalc{\@ifstar\@@drefcalc\@drefcalc}
\newcommand{\@drefcalc}[2][]{% Unstarred
@@ -244,7 +238,7 @@
\pgfmathprintnumberto[fixed,assume math mode=true,precision=10,1000 sep={}]{\pgfmathresult}{\drefresult}
\xdef\drefresult{\drefresult}%
\dref@format{\pgfmathresult}%
- \dref@mkannotate{#2}%
+ \dref@mkannotate{\textbackslash drefcalc\{#2\}}%
\endgroup%
}
\newcommand{\@@drefcalc}[2][]{ % Starred
@@ -286,44 +280,62 @@
\newtoks\dref@toks
+\newcount\drefcellcount
\newcommand{\dref@makerow}[2]{%
{\global\dref@toks={}%
- \@tempcnta=\z@%
- \def\inner##1##2{#2}%
- \renewcommand*{\do}[1]{%
- \advance\@tempcnta\@ne%
- \csdef{@cell\number\@tempcnta}{\inner{##1}{\number\@tempcntb}}%
+ \drefcellcount=\z@%
+ \def\do##1{%
+ \advance\drefcellcount\@ne%
+ \def\@tempa{\doX{##1}}%
+ \expandafter\@tempa\expandafter{\the\drefcellcount}%
+ }%
+ \def\doX##1##2{%
+ \csxdef{@cell\the\drefcellcount}{\detokenize{%
+ #2%
+ }}%
}%
\expandafter\def\expandafter\arglist\expandafter{#1}%
\expandafter\docsvlist\expandafter{\arglist}%
- \@tempcntb=\z@
- {\loop\ifnum\@tempcntb<\@tempcnta
- \advance\@tempcntb\@ne
- \edef\next{%
- \ifnum\@tempcntb=\@ne\else&\fi
- \csuse{@cell\number\@tempcntb}}%
- \global\dref@toks=\expandafter{\the\expandafter\dref@toks\next}%
- \repeat}%
+ \@tempcntb=0\relax
+ {\loop\ifnum\@tempcntb<\drefcellcount
+ \advance\@tempcntb by 1\relax%
+ \ifnum \@tempcntb = 1%
+ \edef\@@next{\csuse{@cell\the\@tempcntb}}%
+ \else%
+ \edef\@@next{&\csuse{@cell\the\@tempcntb}}%
+ \fi%
+ \global%
+ \dref@toks%
+ \expandafter=%
+ \expandafter{%
+ \the%
+ \expandafter\dref@toks%
+ \@@next}%
+ \repeat}%
}%
- \the\dref@toks}
+ \typeout{LINE: \the\dref@toks}%
+ \expandafter\scantokens\expandafter{\the\dref@toks}}
+
\long\def\drefrow{\@ifstar\@@drefrow\@drefrow}
-\def\@drefrow#1#2{\dref@makerow{#1}{\drefvalueof{#2}}} % Unstarred
+\def\@drefrow#1#2{\dref@makerow{#1}{\dref{#2}}} % Unstarred
\def\@@drefrow#1#2{\dref@makerow{#1}{#2}} % Starred
\expandafter\ifstrequal\expandafter{\dref@annotate}{pdfcomment}{
\RequirePackage{pdfcomment}
}
+\def\dref@mkannotate@none#1{\relax}
+\def\dref@mkannotate@footnote#1{\footnote{\texttt{#1}}}
+\def\dref@mkannotate@pdfcomment#1{\pdfcomment[opacity=0.4,voffset=2ex]{#1}}
+
\newcommand{\dref@mkannotate}[1]{%
- \expandafter\ifstrequal\expandafter{\dref@annotate}{none}%
- {\relax}%
- {\expandafter\ifstrequal\expandafter{\dref@annotate}{footnote}%
- {\footnote{#1}}%
- {\expandafter\ifstrequal\expandafter{\dref@annotate}{pdfcomment}%
- {\pdfcomment[opacity=0.4,voffset=2ex]{#1}}%
- {\dref@error{Value for annotate not supported: '\dref@annotate'}%
- }}}}%
+ \ifcsdef{dref@mkannotate@\dref@annotate}{%
+ \csuse{dref@mkannotate@\dref@annotate}{#1}%
+ }{%
+ \dref@error{Value for annotate not supported: '\dref@annotate'}%
+ }%
+}
\newcommand{\drefannotate}[1]{%
\renewcommand{\dref@annotate}{#1}%
@@ -331,7 +343,7 @@
%% Usagereport
\ifdref@usagereport
- \RequirePackage{longtable}
+ \RequirePackage{xtab}
\RequirePackage{booktabs}
\fi
\newcommand{\dref@usagereport@notfound}[2]{}
@@ -362,16 +374,33 @@
\dolistcsloop{dref@usagereport@referenced@#1}%
\endgroup%
}
+\newif\ifdref@usagereport@keyheader@first
+\dref@usagereport@keyheader@firsttrue
\newcommand{\dref@usagereport@keyheader}[1]{%
+ \ifdref@usagereport@keyheader@first%
+ \global\dref@usagereport@keyheader@firstfalse%
+ \else%
+ \\%
+ \fi%
\textbf{\ifdef{\hypertarget}%
{\hypertarget{#1}{\dref@usagereport@strippath{#1}}}%
{\dref@usagereport@strippath{#1}}}%
& \dref@usagereport@formatreferencelist{#1}%
- & \pgfkeysifdefined{#1}{\pgfkeysvalueof{#1}}{\textbf{\color{red}undefined}} \\%
+ & \pgfkeysifdefined{#1}{\pgfkeysvalueof{#1}}{\textbf{\color{red}undefined}}%
}
+\newif\ifdref@withhelp
+\errorcontextlines=23
+\newlength{\dreflinewidth}%
\newcommand{\dref@usagereport@forhelp}[1]{%
\begingroup%
- \noindent\csuse{dref@help@#1}
+ \dref@withhelpfalse%
+ \renewcommand{\do}[1]{%
+ \dref@help@match{#1}{##1}{%
+ \dref@withhelptrue%
+ }{}%
+ }%
+ \dolistcsloop{dref@usagereport@keys}%
+ \dref@usagereport@keyheader@firsttrue%
\renewcommand{\do}[1]{%
\dref@help@match{#1}{##1}{%
\dref@usagereport@keyheader{##1}%
@@ -380,42 +409,56 @@
}%
}{}%
}%
- \begin{longtable}{@{\extracolsep{\fill}}lll@{}}\toprule%
- & Page(s) & Value \\ \midrule
- \endhead
- \bottomrule%
- \endfoot
- \dolistcsloop{dref@usagereport@keys}%
- \end{longtable}%
+ \ifdref@withhelp
+ \tablehead{\hline & Page & Value \\\hline}%
+ \setlength\tabcolsep{3pt}%
+ \dreflinewidth=\linewidth%
+ \advance\dreflinewidth by -6\tabcolsep%
+ \begin{xtabular}{|p{0.7\dreflinewidth}|p{0.15\dreflinewidth}|p{0.15\dreflinewidth}|}%
+ \dolistcsloop{dref@usagereport@keys}\\\hline
+ \multicolumn{3}{|p{\linewidth}|}{\csuse{dref@help@#1}}\\\hline
+ \end{xtabular}%
+ \fi%
+
\endgroup%
}
+\newif\ifdref@withouthelp
\newcommand{\dref@usagereport@withouthelp}{%
+ \begingroup%
+ \dref@withouthelpfalse%
+ \renewcommand{\do}[1]{%
+ \ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
+ \dref@withouthelptrue%
+ }%
+ }%
+ \dolistcsloop{dref@usagereport@keys}%
+ \dref@usagereport@keyheader@firsttrue%
\renewcommand{\do}[1]{%
\ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
\dref@usagereport@keyheader{##1}%
}%
}%
- \begin{longtable}{@{\extracolsep{\fill}}lll@{}}\toprule%
- Keys without Help & Page(s) & Value \\\midrule
- \endhead
- \bottomrule
- \endfoot
- \dolistcsloop{dref@usagereport@keys}%
- \end{longtable}%
+ \ifdref@withouthelp%
+ \tablehead{\hline Keys without Description & Page & Value \\\hline}%
+ \setlength\tabcolsep{3pt}%
+ \dreflinewidth=\linewidth%
+ \advance\dreflinewidth by -6\tabcolsep%
+ \begin{xtabular}{|p{0.7\dreflinewidth}|p{0.15\dreflinewidth}|p{0.15\dreflinewidth}|}%
+ \dolistcsloop{dref@usagereport@keys}\\\hline
+ \end{xtabular}%
+ \fi%
+ \endgroup%
}
\newcommand{\drefusagereport}{%
\ifdref@usagereport%
\ifcsvoid{dref@usagereport@keys}{\typeout{EMPTY}}{%
\begingroup%
- \setlength{\LTleft}{2em}%
- \setlength{\LTright}{0pt}%
\renewcommand{\do}[1]{%
\ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
\dref@usagereport@forhelp{##1}%
}%
}%
\dolistcsloop{dref@helps} % For all help text
- \setlength{\LTleft}{0em}%
\dref@usagereport@withouthelp\relax
\endgroup%
}% csempty @keys
@@ -438,6 +481,7 @@
\newif\if@dref@valuemustderef%
\newif\if@dref@basemustderef%
\newif\if@dref@increase%
+\newif\if@dref@product%
\newif\if@dref@factor%
\newif\if@dref@delta%
\newif\if@dref@percent%
@@ -463,6 +507,12 @@
delta/.is if=@dref@delta,%
delta/.default=true,%
delta=false,%
+ scale/.is if=@dref@product,%
+ scale/.default=true,%
+ scale=false,%
+ product/.is if=@dref@product,%
+ product/.default=true,%
+ product=false,%
increase/.is if=@dref@increase,%
increase/.default=true,%
increase=false,%
@@ -485,6 +535,7 @@
\newcommand{\@drefrel}[2][]{%
\@@drefrel[#1]{#2}%
\@@drefrel@result%
+ \dref@mkannotate{\textbackslash{}drefrel[#1]\{#2\}}%
}
\newcommand{\@@drefrel}[2][]{%
@@ -517,7 +568,12 @@
\pgfmathparse{(\drefvalue) - (\drefbase)}%
\def\drefresult{\pgfmathresult}%
\else%
- \def\drefresult{\drefvalue}%
+ \if@dref@product%
+ \pgfmathparse{(\drefvalue) * (\drefbase)}%
+ \def\drefresult{\pgfmathresult}%
+ \else
+ \def\drefresult{\drefvalue}%
+ \fi
\fi%
\fi%
\fi%