diff options
-rw-r--r-- | Master/texmf-dist/doc/latex/pstring/README.md | 36 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pstring/pgfmanual-en-macros.tex | 559 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pstring/pstring-doc.pdf | bin | 0 -> 132154 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/pstring/pstring-doc.pre | 11 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pstring/pstring-doc.tex | 241 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/pstring/pstring.sty | 729 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tlpkg-ctan-check | 2 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 | ||||
-rw-r--r-- | Master/tlpkg/tlpsrc/pstring.tlpsrc | 0 |
9 files changed, 1578 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/pstring/README.md b/Master/texmf-dist/doc/latex/pstring/README.md new file mode 100644 index 00000000000..17693770869 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pstring/README.md @@ -0,0 +1,36 @@ +The pstring LaTeX package +========================= + +This package lets you typeset justiļ¬ed sequences, also called pointing strings. +It's used for instance, in research papers about Game Semantics to represent sequence of game moves +with their associated justification pointers. + +See [http://william.famille-blum.org/software/latex/]() for latest information about this package. + +Author +------ + +William Blum (william.blum@gmail.com) + +Platform +-------- + +Tested with MikTeX on Windows. It was reported to work on other platform as well but I have not tested it myself. + +Package dependencies +-------------------- + +The following packages are required when compiling with `latex` to postscript: + + pstricks + pst-node + +If compiling to PDF using `pdflatex` then the `PGF`/`tikz` packages are used instead to render +the pointers: + + pgfcore + +License +------- + +This material is released in the Public domain.
\ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/pstring/pgfmanual-en-macros.tex b/Master/texmf-dist/doc/latex/pstring/pgfmanual-en-macros.tex new file mode 100644 index 00000000000..79f5d185bbb --- /dev/null +++ b/Master/texmf-dist/doc/latex/pstring/pgfmanual-en-macros.tex @@ -0,0 +1,559 @@ +% This is file comes from the documentation of the PGF package by Till Tantau. +% I have only commented out some code that is unnecessary for my purpose here (I just want to use the +% codeexample environment) I hope that I do not break PGF license by releasing the file like this. William Blum + + +% Copyright 2006 by Till Tantau +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Free Documentation License. +% +% See the file doc/generic/pgf/licenses/LICENSE for more details. + +% $Header: /cvsroot/pgf/pgf/doc/generic/pgf/macros/pgfmanual-en-macros.tex,v 1.8 2006/10/11 15:00:27 tantau Exp $ + +\providecommand\href[2]{\texttt{#1}} + +\colorlet{examplefill}{yellow!80!black} +\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8} +\definecolor{codebackground}{rgb}{0.8,0.8,1} + +\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist} +\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut#1\par\topsep=0pt} +\newcommand\pgfmanualbody{\parskip3pt} + + + +\newenvironment{pgflayout}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{\texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}} + \index{#1@\protect\texttt{#1} layout}% + \index{Page layouts!#1@\protect\texttt{#1}}% + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + + +\newenvironment{command}[1]{ + \begin{pgfmanualentry} + \extractcommand#1\@@ + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\def\extractcommand#1#2\@@{% + \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}% + \removeats{#1}% + \index{\strippedat @\protect\myprintocmmand{\strippedat}}} + + +\newenvironment{environment}[1]{ + \begin{pgfmanualentry} + \extractenvironement#1\@@ + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\def\extractenvironement#1#2\@@{% + \pgfmanualentryheadline{{\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2}% + \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% + \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}% + \index{#1@\protect\texttt{#1} environment}% + \index{Environments!#1@\protect\texttt{#1}}} + + +\newenvironment{plainenvironment}[1]{ + \begin{pgfmanualentry} + \extractplainenvironement#1\@@ + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\def\extractplainenvironement#1#2\@@{% + \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}% + \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% + \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}% + \index{#1@\protect\texttt{#1} environment}% + \index{Environments!#1@\protect\texttt{#1}}} + + +\newenvironment{contextenvironment}[1]{ + \begin{pgfmanualentry} + \extractcontextenvironement#1\@@ + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\def\extractcontextenvironement#1#2\@@{% + \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}% + \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}% + \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}% + \index{#1@\protect\texttt{#1} environment}% + \index{Environments!#1@\protect\texttt{#1}}} + + +\newenvironment{shape}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{Shape {\ttfamily\declare{#1}}}% + \index{#1@\protect\texttt{#1} shape}% + \index{Shapes!#1@\protect\texttt{#1}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\newenvironment{predefinednode}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{Predefined node {\ttfamily\declare{#1}}}% + \index{#1@\protect\texttt{#1} node}% + \index{Predefined node!#1@\protect\texttt{#1}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\newenvironment{coordinatesystem}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{Coordinate system {\ttfamily\declare{#1}}}% + \index{#1@\protect\texttt{#1} coordinate system}% + \index{Coordinate systems!#1@\protect\texttt{#1}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\newenvironment{snake}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{Snake {\ttfamily\declare{#1}}}% + \index{#1@\protect\texttt{#1} snake}% + \index{Snakes!#1@\protect\texttt{#1}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\def\pgfmanualbar{\char`\|} +\makeatletter +\newenvironment{pathoperation}[3][]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\path}\ + \ \dots} + \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}% + \def\pgfmanualtest{#1}% + \ifx\pgfmanualtest\@empty% + \index{#2@\protect\texttt{#2} path operation}% + \index{Path operations!#2@\protect\texttt{#2}}% + \fi% + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} +\makeatother + +\def\extractcommand#1#2\@@{% + \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}% + \removeats{#1}% + \index{\strippedat @\protect\myprintocmmand{\strippedat}}} + + +\newenvironment{package}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{{\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX}} + \index{#1@\protect\texttt{#1} package}% + \index{Packages and files!#1@\protect\texttt{#1}}% + \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space plain \TeX}} + \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + + +\newenvironment{pgflibrary}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space + \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}} + \index{#1@\protect\texttt{#1} library}% + \index{Libraries!#1@\protect\texttt{#1}}% + \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}} + \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space + \char`\%\space\space \LaTeX\space and plain \TeX\space when using \tikzname}} + \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space + \char`\%\space\space Con\TeX t\space when using \tikzname}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + +\newenvironment{tikzlibrary}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}} + \index{#1@\protect\texttt{#1} library}% + \index{Libraries!#1@\protect\texttt{#1}}% + \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}} + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + + + +\newenvironment{filedescription}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}% + \index{#1@\protect\texttt{#1} file}% + \index{Packages and files!#1@\protect\texttt{#1}}% + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + + +\newenvironment{packageoption}[1]{ + \begin{pgfmanualentry} + \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}} + \index{#1@\protect\texttt{#1} package option}% + \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}% + \pgfmanualbody +} +{ + \end{pgfmanualentry} +} + + + +\newcommand\opt[1]{{\color{black!50!green}#1}} +\newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}} + +\def\opt{\afterassignment\pgfmanualopt\let\next=} +\def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi} + + + +\def\beamer{\textsc{beamer}} +\def\pdf{\textsc{pdf}} +\def\pgfname{\textsc{pgf}} +\def\tikzname{Ti\emph{k}Z} +\def\pstricks{\textsc{pstricks}} +\def\prosper{\textsc{prosper}} +\def\seminar{\textsc{seminar}} +\def\texpower{\textsc{texpower}} +\def\foils{\textsc{foils}} + +{ + \makeatletter + \global\let\myempty=\@empty + \global\let\mygobble=\@gobble + \catcode`\@=12 + \gdef\getridofats#1@#2\relax{% + \def\getridtest{#2}% + \ifx\getridtest\myempty% + \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1} + \else% + \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat} + \getridofats#2\relax% + \fi% + } + + \gdef\removeats#1{% + \let\strippedat\myempty% + \edef\strippedtext{\stripcommand#1}% + \expandafter\getridofats\strippedtext @\relax% + } + + \gdef\stripcommand#1{\expandafter\mygobble\string#1} +} + +\def\printanat{\char`\@} + +\def\declare{\afterassignment\pgfmanualdeclare\let\next=} +\def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi} + + +\let\textoken=\command +\let\endtextoken=\endcommand + +\def\myprintocmmand#1{\texttt{\char`\\#1}} + +\def\example{\par\smallskip\noindent\textit{Example: }} +\def\themeauthor{\par\smallskip\noindent\textit{Theme author: }} + +\def\itemoption#1{\item \declare{\texttt{#1}}% + \indexoption{#1}% +} + +\def\indexoption#1{% + \index{#1@\protect\texttt{#1} option}% + \index{Graphic options!#1@\protect\texttt{#1}}% +} + +\def\itemstyle#1{\item \texttt{style=}\declare{\texttt{#1}}% + \index{#1@\protect\texttt{#1} style}% + \index{Styles!#1@\protect\texttt{#1}}% +} + + + +\def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}% +\extractclass#1@\par\topsep=0pt} +\def\endclass{\endlist} +\def\extractclass#1#2@{% +\item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}% + \index{#1@\protect\texttt{#1} class}% + \index{Classes!#1@\protect\texttt{#1}}} + +\def\partname{Part} + +\makeatletter +%\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index} +% This index only contains automatically generated entries. A good +% index should also contain carefully selected keywords. This index is +% not a good index. +% \bigskip +%} +%\c@IndexColumns=2 +% \def\theindex{\@restonecoltrue +% \columnseprule \z@ \columnsep 35\p@ +% \twocolumn[\index@prologue]% +% \parindent -30pt +% \columnsep 15pt +% \parskip 0pt plus 1pt +% \leftskip 30pt +% \rightskip 0pt plus 2cm +% \small +% \def\@idxitem{\par}% +% \let\item\@idxitem \ignorespaces} +% \def\endtheindex{\onecolumn} +%\def\noindexing{\let\index=\@gobble} + + +%\newcommand\patternindex[1]{ +% \index{#1@\protect\texttt{#1} pattern}% +% \index{Patterns!#1@\protect\texttt{#1}} +% \texttt{#1}& +% \begin{tikzpicture} +% \path[draw=black!50,very thin,pattern=#1,rounded corners] +% (0pt,0pt) rectangle (1cm,1.5em); +% \end{tikzpicture} +%} +% +% +%\newcommand\symarrow[1]{ +% \index{#1@\protect\texttt{#1} arrow tip}% +% \index{Arrow tips!#1@\protect\texttt{#1}} +% \texttt{#1}& yields thick +% \begin{tikzpicture}[arrows={#1-#1},thick,baseline] +% \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); +% \draw (0pt,.5ex) -- (1cm,.5ex); +% \end{tikzpicture} and thin +% \begin{tikzpicture}[arrows={#1-#1},thin,baseline] +% \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); +% \draw (0pt,.5ex) -- (1cm,.5ex); +% \end{tikzpicture} +%} +% +%\newcommand\sarrow[2]{ +% \index{#1@\protect\texttt{#1} arrow tip}% +% \index{Arrow tips!#1@\protect\texttt{#1}} +% \index{#2@\protect\texttt{#2} arrow tip}% +% \index{Arrow tips!#2@\protect\texttt{#2}} +% \texttt{#1-#2}& yields thick +% \begin{tikzpicture}[arrows={#1-#2},thick,baseline] +% \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); +% \draw (0pt,.5ex) -- (1cm,.5ex); +% \end{tikzpicture} and thin +% \begin{tikzpicture}[arrows={#1-#2},thin,baseline] +% \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex); +% \draw (0pt,.5ex) -- (1cm,.5ex); +% \end{tikzpicture} +%} +% +%\newcommand\carrow[1]{ +% \index{#1@\protect\texttt{#1} arrow tip}% +% \index{Arrow tips!#1@\protect\texttt{#1}} +% \texttt{#1}& yields for line width 1ex +% \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline] +% \useasboundingbox (0pt,-0.5ex) rectangle (1.5cm,2ex); +% \draw (0pt,.5ex) -- (1.5cm,.5ex); +% \end{tikzpicture} +%} +%\def\myvbar{\char`\|} +%\newcommand\plotmarkentry[1]{% +% \index{#1@\protect\texttt{#1} plot mark}% +% \index{Plot marks!#1@\protect\texttt{#1}} +% \texttt{\char`\\pgfuseplotmark\char`\{\declare{#1}\char`\}} & +% \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\ +%} +%\newcommand\plotmarkentrytikz[1]{% +% \index{#1@\protect\texttt{#1} plot mark}% +% \index{Plot marks!#1@\protect\texttt{#1}} +% \texttt{mark=\declare{#1}} & \tikz\draw[color=black!25] +% plot[mark=#1,mark options={fill=examplefill,draw=black}] +% coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\ +%} +% + + +\ifx\scantokens\@undefined + \PackageError{pgfmanual-macros}{You need to use extended latex + (elatex) or (pdfelatex) to process this document}{} +\fi + +\begingroup +\catcode`|=0 +\catcode`[= 1 +\catcode`]=2 +\catcode`\{=12 +\catcode `\}=12 +\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]] +|endgroup + +\begingroup +\catcode`\^=7 +\catcode`\^^M=13 +\catcode`\ =13% +\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^M=13\def^^M{}}% +\endgroup + +\begingroup +\catcode`\%=13 +\catcode`\^^M=13 +\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}} +\gdef\@gobble@till@return#1^^M{} +\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}} +\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par} +\endgroup + +\define@key{codeexample}{width}{\setlength\codeexamplewidth{#1}} +\define@key{codeexample}{graphic}{\colorlet{graphicbackground}{#1}} +\define@key{codeexample}{code}{\colorlet{codebackground}{#1}} +\define@key{codeexample}{execute code}{\csname code@execute#1\endcsname} +\define@key{codeexample}{code only}[]{\code@executefalse} +\define@key{codeexample}{pre}{\def\code@pre{#1}} +\define@key{codeexample}{post}{\def\code@post{#1}} + +\def\code@pre{} +\def\code@post{} + +\newdimen\codeexamplewidth +\newif\ifcode@execute +\newbox\codeexamplebox +\def\codeexample[#1]{% + \code@executetrue + \setlength\codeexamplewidth{4cm+7pt} + \setkeys{codeexample}{#1}% + \parindent0pt + \begingroup% + \par% + \medskip% + \let\do\@makeother% + \dospecials% + \obeylines% + \@vobeyspaces% + \catcode`\%=13% + \catcode`\^^M=13% + \find@example} +\def\endofcodeexample#1{% + \endgroup% + \ifcode@execute% + \setbox\codeexamplebox=\hbox{% + {% + {% + \returntospace% + \commenthandler% + \xdef\code@temp{#1}% removes returns and comments + }% + \colorbox{graphicbackground}{\color{black}\ignorespaces% + \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}% + }% + }% + \ifdim\wd\codeexamplebox>\codeexamplewidth% + \def\code@start{\par}% + \def\code@flushstart{}\def\code@flushend{}% + \def\code@mid{\parskip2pt\par\noindent}% + \def\code@width{\linewidth-6pt}% + \def\code@end{}% + \else% + \def\code@start{% + \linewidth=\textwidth% + \parshape \@ne 0pt \linewidth + \leavevmode% + \hbox\bgroup}% + \def\code@flushstart{\hfill}% + \def\code@flushend{\hbox{}}% + \def\code@mid{\hskip6pt}% + \def\code@width{\linewidth-12pt-\codeexamplewidth}% + \def\code@end{\egroup}% + \fi% + \code@start% + \noindent% + \begin{minipage}[t]{\codeexamplewidth}\raggedright + \hrule width0pt% + \footnotesize\vskip-1em% + \code@flushstart\box\codeexamplebox\code@flushend% + \vskip-1ex + \leavevmode% + \end{minipage}% + \else% + \def\code@mid{\par} + \def\code@width{\linewidth-6pt} + \def\code@end{} + \fi% + \code@mid% + \colorbox{codebackground}{% + \begin{minipage}[t]{\code@width}% + {% + \let\do\@makeother + \dospecials + \frenchspacing\@vobeyspaces + \normalfont\ttfamily\footnotesize + \typesetcomment% + \@tempswafalse + \def\par{% + \if@tempswa + \leavevmode \null \@@par\penalty\interlinepenalty + \else + \@tempswatrue + \ifhmode\@@par\penalty\interlinepenalty\fi + \fi}% + \obeylines + \everypar \expandafter{\the\everypar \unpenalty}% + #1} + \end{minipage}}% + \code@end% + \par% + \medskip + \end{codeexample} +} + +\def\endcodeexample{} + + +\makeatother + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "beameruserguide" +%%% End: diff --git a/Master/texmf-dist/doc/latex/pstring/pstring-doc.pdf b/Master/texmf-dist/doc/latex/pstring/pstring-doc.pdf Binary files differnew file mode 100644 index 00000000000..4888258c690 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pstring/pstring-doc.pdf diff --git a/Master/texmf-dist/doc/latex/pstring/pstring-doc.pre b/Master/texmf-dist/doc/latex/pstring/pstring-doc.pre new file mode 100644 index 00000000000..d758f1cfc5c --- /dev/null +++ b/Master/texmf-dist/doc/latex/pstring/pstring-doc.pre @@ -0,0 +1,11 @@ +\documentclass{article} +\usepackage{pstring} +\usepackage{amssymb} +\usepackage{calc} +\usepackage{a4wide} +\usepackage{url} + +\usepackage{pgfcore} +\input{pgfmanual-en-macros} + + diff --git a/Master/texmf-dist/doc/latex/pstring/pstring-doc.tex b/Master/texmf-dist/doc/latex/pstring/pstring-doc.tex new file mode 100644 index 00000000000..6aa7bc71533 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pstring/pstring-doc.tex @@ -0,0 +1,241 @@ +% Speed-up the compilation with LatexDaemon!!! (http://william.famille-blum.org/software/latexdaemon) +\input{pstring-doc.pre} +% + +\author{William Blum} +\title{The pstring package} +\begin{document} +\maketitle +\begin{abstract} +This is a short documentation for the pstring package for Latex. This package allows you to +typeset justified sequences, also called pointing strings. +The latest version of the package can be downloaded from \url{http://william.famille-blum.org/software/latex/index.html}. + +\begin{codeexample}[width=5cm] +\Pstr[0.65cm]{ \psi = (n){q^0} \ (n4-n,60){q^1} \ (n5-n4){q^2} +\ (n8-n){q^1} \ (n9-n8){q^2} \ (n10-n){q^3} }. +\end{codeexample} +\end{abstract} + +\section{Use and syntax} + +From version 0.3, pstring can use either PSTricks or PGF as a rendering engine. To specify which one +you want, use the option \verb|pstricks| or \verb|pgf| when you load the pstring package. For instance to use PGF you must type: +\begin{codeexample}[code only] +\usepackage{pstring}[pgf] +\end{codeexample} +If no option is specified then by default \verb|pgf| is selected if you are running pdflatex +and \verb|pstricks| is selected if you are running latex. + +You can specifies other options with the following commands: +\begin{command}{\pstrSetLabelStyle\{style\}} +Change the style used to typeset labels on arrows. +\end{command} +\begin{command}{\pstrSetArrowColor\{color\}} +Change the color used to typeset arrows. +\end{command} +\begin{command}{\pstrSetArrowLineWidth\{size\}} +Change the arrows line width. +\end{command} +\begin{command}{\pstrSetArrowLineStyle\{style\}} +Change the arrows line style. Valid styles are: \verb|none|, \verb|dashed|, \verb|dotted| and \verb|solid|. +\end{command} +The default options are as follows: +\begin{codeexample}[code only] +\pstrSetLabelStyle{\color{blue} \tiny} +\pstrSetArrowColor{orange} +\pstrSetArrowLineWidth{0.3pt} +\pstrSetArrowLineStyle{solid} +\end{codeexample} + +\subsection{The succinct syntax} +The syntax for creating a pointing string is as follows: +\begin{command}{\Pstr[raiseamount][nodesep]\{stringspecification\}} +\begin{itemize} +\item \verb|raiseamount| (optional) is the size by which you want +to raise the box containing the sequence. In +PSTricks mode, the bounding box is not computed automatically therefore +it is necessary to specify this value by hand. Using the PGF mode + however, this value is ignored since the bounding box +is computed automatically, +\item \verb|nodesep| (optional) is the vertical distance between +the nodes and the links. +\item \verb|stringspecification| contains commands describing the nodes +of the string. +This parameter can contain normal text and latex commands (with some restriction, see section \ref{subsec:altsyntax}). +Nodes that have link associated to them, or which have a link pointing to them +must be specified with the node specification syntax described hereunder.\end{itemize} +\end{command} + +The syntax for creating nodes is as follows. +If the node has no link associated to it then you just use +the syntax \verb|(nodename){content of the node}| where \verb|nodename| is a name that you give to the node and \verb|content| is the text you want to write inside the node. + +If there is a link attached to the node then you use +the syntax +\begin{verbatim} +(targetnode-nodename,angle:label){content} +\end{verbatim} +where +\begin{itemize} +\item \verb|nodename| is a name that you give to the node, +\item \verb|targetnode| is the name of the node where the link must point to, +\item \verb|angle| (optional) specifies the angle between the horizontal line and the line +tangent to the arrow representing the link at the top of the node, +\item \verb|label| (optional) is a text to be printed out on top of the link, +\item \verb|content| is the content of the node. +\end{itemize} + +The arguments \verb|angle| and \verb|label| are optional. When the angle is not specified it is set to a default value of 45 (degrees). + +Here is an example: +\begin{codeexample}[width=7cm] +\Pstr[20pt]{ +t = \lambda\cdot (app){@} \cdot (ly){\lambda y} +\ldots (y-ly,35:1){y} \cdot +(lx-app,38:1){\lambda \overline{x}} +\ldots (x-lx,30:i){x_i} \cdot +(leta-y,40:i){\lambda \overline{\eta_i}} {\ldots} +}. +\end{codeexample} + + +\subsection{Alternative syntax} +\label{subsec:altsyntax} +You can use an alternative syntax to specify sequences. For instance the previous example +can also be defined as follows: +\begin{codeexample}[width=7cm] +\pstr[0.7cm]{ +\nd t = \lambda \cdot (app){@} +\nd \cdot (ly){\lambda y} +\nd \ldots (y-ly,35:1) {y} +\nd \cdot (lx-app,38:1){\lambda \overline{x}} +\nd \ldots (x-lx,30:i){x_i} +\nd \cdot (letay-y,40:i){\lambda \overline{\eta_i}} +\txt{\ldots} }. +\end{codeexample} +Although this syntax is more cumbersome than the succinct one, it permits to typeset sequences that are not definable with the succinct syntax. The following example is such an example: +\ifLoadPSengine +\begin{codeexample}[width=6cm] +$\pstr[0.7cm][1pt]{ s = \underbrace{\cdots\ \nd(r){r^O} +\cdots }_{s'}\ \nd(n){n^P} +\ \underbrace{\cdots\ \nd(a-r,35){a}^P \cdots }_{u} +\ \nd(m-n,30){m}^O }$. +\end{codeexample} +\else +\vskip 10pt +[Sorry, you need to compile the documentation with latex in order to view this example] +\vskip 10pt +\fi + +{\bf Important note:} +The previous example can only be done using the pstricks engine and using the long syntax. This is due to the use of the +latex command \verb|\overbrace| which embraces several nodes inside the sequence. +This cannot be handled in the PGF rendering mode due to the impossibility to create nodes outside of a PGF environment. +It may be possible to fix this problem by using the overlay feature of PGF/Tikz, however overlays seem to work only +within Tikz environment and not in standard PGF ones. Also overlays have the disadvantage to require two latex compilations in order to resolve node name references, and moreover they work only with pdflatex (not with latex). + +\subsubsection{Adding more links} +It is possible to create additional links starting from a same node: +\begin{codeexample}[width=6cm] +\pstr[0.6cm]{\ldots \nd(r){r} + \nd\ldots (l1){\lambda \overline{\xi}_1} + \nd\ldots (l2){\lambda \overline{\xi}_2 } + \nd\ldots (n-r,45){n} + \arrow{n}{l1}{45}{}{blue}{dotted} + \arrow{n}{l2}{45}{}{blue}{dotted} + }. + \end{codeexample} +The syntax for arrow creation is: +\begin{command}{\arrow\{source\}\{target\}\{angle\}\{label\}\{linecolor\}\{linestyle\}} +\begin{itemize} +\item \verb|source| is the name of the source node, +\item \verb|target| is the name of the target node, +\item \verb|angle| is the arrow angle, +\item \verb|label| is a text to be printed out on top of the link, +\item \verb|linecolor| is the color to be used to draw the link, +\item \verb|linestyle| is a line style used to draw the arrow. Valid styles are: \verb|none|, \verb|dashed|, \verb|dotted| and \verb|solid|. +\end{itemize} +\end{command} + + + +\section{Examples} + +\subsection{A sequence with more links} +\begin{codeexample}[width=7cm] +\Pstr[1cm][2pt]{ +t_2 = (n){\lambda f z} \ (n2){@} +\ (n3-n2,60){\lambda g x} \ (n4-n){f^{[1]}} +\ (n5-n4){\lambda^{[2]}} \ (n6-n3){x} +\ (n7-n2,35){\lambda^{[3]}} \ (n8-n,35){f^{[4]}} +\ (n9-n8,45){\lambda^{[5]}} \ (n10-n,35){z} }. +\end{codeexample} + + +\subsection{Elevation of the links} +A second optional parameter can be passed to \verb|\pstr| in order to elevate the links in the sequence as follows: +\begin{codeexample}[width=5cm] +$\begin{array}{rclrcl} +\mbox{First line} &=& \parbox[t]{8cm}{there should be enough space between the + bottom of this line and the arc of the next line.} \\ + s &=& \Pstr[28pt][10pt]{ s \cdot (m){m} \cdot \ldots \cdot (lmd-m,40) + {\lambda\overline{\xi}} } + \quad \mbox{ the arc is elevated using the raise option of pstr.} +\end{array}$ +\end{codeexample} + +\subsection{Two sequences on the same line} +\begin{codeexample}[width=7cm] +\Pstr[0.8cm]{ +t = (n){\lambda f z}\ (n2){@} \ (n3-n2,60){\lambda g x} \ (n4-n,45){f^{[1]}} +\ (n5-n4,45){\lambda^{[2]}} \ (n6-n3,45){x} \ (n7-n2,35){\lambda^{[3]}} +\ (n8-n,35){f^{[4]}} \ (n9-n8,45){\lambda^{[5]}} \ (n10-n,35){z} +} +\qquad +\Pstr[0.9cm]{ +t\upharpoonright r = (n){\lambda f z} \ (n4-n,50){f}^{[1]} +\ (n5-n4,60){\lambda}^{[2]} \ (n8-n,45){f}^{[4]} +\ (n9-n8,60){\lambda}^{[5]} \ (n10-n,40){z}} +\end{codeexample} + +\subsection{Sequences containing parenthesis} +If you insert text containing parenthesis '(' and ')' between two nodes then you must surround +the text with curly braces otherwise \verb|pstr| will interpret it as a node specification: +\begin{codeexample}[width=7.1cm] +\Pstr[0.8cm]{ {\psi_M(t\upharpoonright r) =\ } +(n){q^0}\ (n4-n,60){q^1}\ (n5-n4,60){q^2} +\ (n8-n,45){q^1}\ (n9-n8,60){q^2} +\ (n10-n,38){q^3} \in [\![ M ]\!] \ .} +\end{codeexample} + +\subsection{Example taken from an article} +%\begin{codeexample}[width=4cm] +\newcommand{\oview}[1]{\llcorner #1 \lrcorner} +{\bf (InputVar)} If $t_1 \cdot x \cdot t_2$ is a traversal with + $x \in N_{var}^{\upharpoonright r}$ and $?(t_1 \cdot x \cdot + t_2)=?(t_1) \cdot x$ then so is \Pstr[0.4cm]{t_1 \cdot (m){x} \cdot t_2 \cdot (n-m,38:i){n}} for all + $\lambda$-node $n$ whose parent occurs in $\oview{t_1 \cdot x}$, $n$ + pointing to some occurrence of its parent node in $\oview{t_1 \cdot x}$. + +\noindent {\bf (Copycat$^@$)} + If \Pstr{t \cdot (app){@} \cdot (lz-app,60:0){\lambda \overline{z}} \ldots (lzv-lz,60:v){v}_{\lambda \overline{z}} } is a traversal then so is +\Pstr[0.6cm]{t \cdot (app){@} \cdot (lz-app,60){\lambda +\overline{z}} \ldots (lzv-lz,60:v){v}_{\lambda \overline{z}} \cdot +(appv-app,45:v){v}_@}. + +\noindent {\bf (Copycat$^\lambda$)} + If \Pstr[0.4cm]{t \cdot \lambda \overline{\xi} \cdot (x){x} \ldots (xv-x,50:v){v}_x} +is a traversal then so is \Pstr[0.6cm]{t \cdot (lmd){\lambda +\overline{\xi}} \cdot (x){x} \ldots (xv-x,50:v){v}_x \cdot +(lmdv-lmd,30:v){v}_{\lambda \overline{\xi}} }. + +\noindent {\bf (Copycat$^{var}$)} +If \Pstr[0.4cm]{t \cdot y \cdot (lmd){\lambda \overline{\xi}} +\ldots (lmdv-lmd,50:v){v}_{\lambda \overline{\xi}} } is a traversal +for some variable $y$ not in $N_{var}^{\upharpoonright r}$ then so +is \Pstr[0.6cm]{t \cdot (y){y} \cdot (lmd){\lambda \overline{\xi}} +\ldots (lmdv-lmd,30:v){v}_{\lambda \overline{\xi}} \cdot +(vy-y,50:v){v}_y }. +%\end{codeexample} +\end{document} diff --git a/Master/texmf-dist/tex/latex/pstring/pstring.sty b/Master/texmf-dist/tex/latex/pstring/pstring.sty new file mode 100644 index 00000000000..9e5f098fa68 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pstring/pstring.sty @@ -0,0 +1,729 @@ +% Copyright 2007 by William Blum (http://william.famille-blum.org/software/latex/index.html) +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{pstring}[2008/04/29 Package for representing strings with pointers] + +\newif\ifRequestPSengine +\newif\ifRequestPGFengine +\newif\ifLoadPSengine +\newif\ifLoadPGFengine +\newif\ifwriteprologuefile + + +\DeclareOption{pstricks}{\RequestPSenginetrue} +\DeclareOption{pgf}{\RequestPGFenginetrue} +\ProcessOptions + +\edef\TheAtCode{\the\catcode`\@} +\catcode`\@=11 + + +\RequirePackage{ifpdf} + +\ifRequestPSengine + \ifpdf + \errmessage{You have requested to use the pstricks engine when you have loaded the pstring package, + moreover you seem to be running pdflatex to produce a pdf file. Since pstricks is not compatible with pdflatex, + I automatically switch to the pgf engine.} + \LoadPGFenginetrue + \LoadPSenginefalse + \else + \LoadPSenginetrue + \fi +\fi + +\ifRequestPGFengine + \LoadPGFenginetrue +\fi + +% If no engine is selected then take PStricks if latex is running and PGF if it is pdflatex +\ifRequestPGFengine \else\ifRequestPSengine \else +\ifpdf + \LoadPGFenginetrue +\else + \LoadPSenginetrue +\fi +\fi\fi + + +\ifLoadPSengine + % Implement pointing string using pstricks + \RequirePackage{pstricks} + \RequirePackage{pst-node} + + % Declare the use of the prologue file (for dvips) + \pstheader{pstring.pro} %\@addtofilelist{pstring.pro} \special{header=pstring.pro} + + % Set the default drawing engine to pstricks + \gdef\@engine{PS} +\fi + +\ifLoadPGFengine + % Implement pointing string using pgf + \RequirePackage{pgfcore} + \usepgfmodule{shapes} + + % Set the default drawing engine to PGF + \gdef\@engine{PGF} +\fi + + +% routines used to draw the nodes and arrow +\gdef\pstr@drawArrow{\csname pstr@\@engine @drawArrow\endcsname} +\gdef\pstr@drawNode{\csname pstr@\@engine @drawNode\endcsname} +\gdef\pstr@createNodeAndArrow{\csname pstr@\@engine @createNodeAndArrow\endcsname} +\gdef\pstr@printText{\csname pstr@\@engine @printText\endcsname} + +% external commands available to the package user (in pgf and pstricks mode) +\gdef\pstr{\csname pstr@\@engine\endcsname} +\gdef\Pstr{\csname Pstr@\@engine\endcsname} +\gdef\pstrSetLabelStyle#1{\gdef\pstr@LabelStyle{#1}} +\gdef\pstrSetArrowColor#1{\gdef\pstr@DefaultArrowColor{#1}} +\gdef\pstrSetArrowAngle#1{\gdef\pstr@DefaultArrowAngle{#1}} +\gdef\pstrSetArrowLabel#1{\gdef\pstr@DefaultArrowLabel{#1}} +\gdef\pstrSetArrowLineWidth#1{\gdef\pstr@ArrowLineWidth{#1}} +\gdef\pstrSetArrowLineStyle#1{\gdef\pstr@DefaultArrowLineStyle{#1}} +\gdef\pstr@linestyledashed{dashed} +\gdef\pstr@linestyledotted{dotted} +\gdef\pstr@linestylesolid{solid} +\gdef\pstr@linestylenone{none} + + +% Default styles and arrow parameters +\pstrSetLabelStyle{\color{blue} \tiny} +\pstrSetArrowLabel{} +\pstrSetArrowColor{orange} +\pstrSetArrowAngle{45} +\pstrSetArrowLineWidth{0.3pt} +\pstrSetArrowLineStyle{\pstr@linestylesolid} % none, solid, dashed or dotted + +\def\@nil{} + + +% define a command \percentchar which can be used to write the percent symbol '%' in the .pro file +\chardef\letter = 11 \chardef\other = 12 +{\catcode`\% = \other \gdef\percentchar{%}}% +\def^^L{\par +}% + + + +\ifLoadPSengine + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Version of the package relying on PSTRICKS + +% If the postscript prologue file does not exist then it needs to be created. +\IfFileExists{pstring.pro}{\writeprologuefilefalse}{\writeprologuefiletrue} + +\ifwriteprologuefile + \newwrite\prologuefile + \immediate\openout\prologuefile = pstring.pro + \newlinechar = `\^^J + \immediate\write\prologuefile{\percentchar } + \immediate\write\prologuefile{\percentchar PostScript prologue for pstring.sty.} + \immediate\write\prologuefile{\percentchar For distribution, see pstring.^^J} +\fi + + +% Calling the following macro with \pstr@def{PROCNAME}<PSCODE> will: +% - create a ps procedure with name PROCNAME and code PSCODE and writes it to the prologue file, +% - define a latex macro with name \PROCNAME containing PROCNAME (the name of the ps procedure). +% +% We could have chosen to include the definitions of our custom Postscript procedures in the dvi file itself +% but as a drawback the postscript code would be copied for each use of the procedure and the +% resulting ps file would be huge. +\def\pstr@def#1<#2>{% + \ifwriteprologuefile% + % Add the code to the postscript prologue file + \immediate\write\prologuefile{/#1 { #2 } def} + \fi + % prologue present: just dump the name of the postscript command (the code being already defined in the .pro file) + \@namedef{#1}{#1 } +} + + + +\pstr@def{pstr@GetEdge}< dup 0 eq { pop begin +%%%%% WB: the cosinus and the sinus are set to 1 and 0 which correspond to a direction going toward the top of the page. This way, the node position computed by the procedure NodePos will correspond exactly to the middle of the top line of the node box (the coordinates returned by NodePos are relative to the center of the node box). + %1 0 NodeMtrx dtransform CM idtransform + %exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos +%%%%% BECOMES + pop 1 /Sin ED 0 /Cos ED /NodeSep ED NodePos +%%%%% +NodeMtrx dtransform CM idtransform +end } +{ 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse > + + +\pstr@def{pstr@GetEdgeA}< NodeSepA AngleA NodeA NodeSepTypeA \pstr@GetEdge +%%%% WB: The offset is not computed the same way as in pst-node: it is an horizontal offset instead of an offset along the line (AB). Thus the line +% OffsetA AngleA AddOffset yA add /yA1 ED xA add /xA1 ED +%%%% becomes: +yA add /yA1 ED xA add OffsetA add /xA1 ED +% This last line computes the absolute position of the connector ending by adding up its relative position to the position of the center of the node box plus the horizontal offset. +%%%% +> + +\pstr@def{pstr@GetEdgeB}< NodeSepB AngleB NodeB NodeSepTypeB \pstr@GetEdge +% OffsetB AngleB AddOffset yB add /yB1 ED xB add /xB1 ED + yB add /yB1 ED xB add OffsetB sub /xB1 ED +> + + +\pstr@def{pstr@NCCurve}<% +%%%%%% Redirect the call to \pstr@GetEdgeA and \pstr@GetEdgeB instead of \tx@GetEdgeA and \tx@GetEdgeB +\pstr@GetEdgeA \pstr@GetEdgeB +xA1 xB1 sub yA1 yB1 sub Pyth +2 div dup +3 -1 roll mul /ArmA ED mul /ArmB ED +/ArmTypeA 0 def /ArmTypeB 0 def GetArmA GetArmB +xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end +xB2 yB2 xB1 yB1 tx@Dict begin ArrowB end +curveto +/LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ] cvx def +/LPutPos { t LPutVar BezierMidpoint } def +/HPutPos { { HPutLines } HPutCurve } def +/VPutPos { { VPutLines } HPutCurve } def> + + +\ifwriteprologuefile + \immediate\write\prologuefile{^^J\percentchar END pstring.pro^^J} + \immediate\closeout\prologuefile +\fi + + + +% We define a new pstricks command: ncHarc. +% The H is for "horizontal". It acts as ncarc +% except that the angle parameter +% angleA (resp. angleB) specifies the angle between the X axis +% and the tangent to the arrow at point A (resp B) instead +% of the angle between the line (AB) and the tangent of the arrow at A (or B). +% +% This kind of arc is not really usefull for graphs however it is easier to specify angles like this for links in justified sequences. +\def\ncHarc{\pst@object{ncHarc}} +\def\ncHarc@i{\check@arrow{\ncHarc@ii}} +\def\ncHarc@ii#1#2{\nc@object{Open}{#1}{#2}{.5}{% +%yB yA sub xB xA sub \tx@Atan + 180 +\psk@arcangleA\space sub /AngleA ED +\psk@arcangleB\space %sub 180 add +/AngleB ED +\psk@ncurvB\space \psk@ncurvA\space \pstr@NCCurve +%\tx@NCCurve +}} + +% Create a link using psttricks +\newcommand{\link}{\@ifstar + \linkStar% + \linkNoStar% +} +\newcommand{\linkNoStar}[2][]{ +\edef\options{#1} +\ifx\options\@empty +\def\opt{[linecolor=\pstr@DefaultArrowColor,linestyle=\pstr@DefaultArrowLineStyle,linewidth=\pstr@ArrowLineWidth,offset=-2pt,nodesep=0pt,arcangleA=-#2, arcangleB=-#2]} +\else +\def\opt{[linecolor=\pstr@DefaultArrowColor,linestyle=\pstr@DefaultArrowLineStyle,linewidth=\pstr@ArrowLineWidth,offset=-2pt,nodesep=0pt,arcangleA=-#2, arcangleB=-#2,#1]} +\fi +\expandafter\ncarc\opt{->} +} + +% the starred version uses ncHarc instead of ncarc. +\newcommand{\linkStar}[2][]{ +\edef\options{#1} +\ifx\options\@empty +\def\opt{[linecolor=\pstr@DefaultArrowColor,linestyle=\pstr@DefaultArrowLineStyle,linewidth=\pstr@ArrowLineWidth,offsetA=0pt,offsetB=2pt,nodesep=1pt,arcangleA=#2, arcangleB=#2]} +\else +\def\opt{[linecolor=\pstr@DefaultArrowColor,linestyle=\pstr@DefaultArrowLineStyle,linewidth=\pstr@ArrowLineWidth,offsetA=0pt,offsetB=2pt,nodesep=1pt,arcangleA=#2, arcangleB=#2, #1]} +\fi +\expandafter\ncHarc\opt{->} +} + +% Label the last link created +\newcommand{\lnklabel}{\@ifstar + \lnklabelStar% + \lnklabelNoStar% +} +\newcommand{\lnklabelStar}[1]{\mput*{\mbox{\pstr@LabelStyle $#1$}}} +\newcommand{\lnklabelNoStar}[1]{\Bput[1pt]{\mbox{\pstr@LabelStyle $#1$}}} + + + + +\newbox\pstr@tempbox +\newdimen\pstr@tempdim + + +%%%%%%%%%%%%%%%% +%% First way of creating a pointing string: user command \Pstr +% \Pstr[0.4cm][1pt]{ (b) this (a-b,45) that } + +\gdef\Pstr@PS{\@ifnextchar[{\Pstr@PS@i}{\Pstr@PS@ii[0cm][1pt]}} +% Pstr with one optional parameter +\gdef\Pstr@PS@i[#1]{\@ifnextchar[{\Pstr@PS@ii[#1]}{\Pstr@PS@ii[#1][1pt]}} +% Pstr with two optional parameters +% [#1] specifies the amount of vertical space to add to the box +% containing the pointing string. +% [#2] specifies the distance between the node and the arc +% #3 contains the specification of the nodes and pointers of the sequence. +\gdef\Pstr@PS@ii[#1][#2]#3{% +\begingroup% + \setlength\pstr@tempdim{#1}% + \def\pstr@arcoptions{#2}% + \setbox\pstr@tempbox=\hbox{$\Pstr@ParseSpecification#3(@-@){}\@nil$}% + \ht\pstr@tempbox\pstr@tempdim% + \leavevmode\box\pstr@tempbox% +\endgroup% +} + +% Prints some text in the sequence (using PSTricks) +\gdef\pstr@PS@printText#1{#1}% + +% Draw a node with PStricks: +% #1 text preceding the node (ignored) +% #2 name of the node +% #3 content of the node +\def\pstr@PS@drawNode#1#2#3{% + \rnode{#2}{#3}% +} + +% Draw an arrow with PStricks +% #1 source node name +% #2 target node name +% #3 angle +% #4 label +% #5 arc color +% #6 line style +\def\pstr@PS@drawArrow#1#2#3#4#5#6{% + \link*[linecolor=#5,linestyle=#6,nodesep=\pstr@arcoptions]{#3}{#1}{#2} \lnklabel{#4}% +} + +% Create the node and store the commands for the creation of the link in the list of tokens tok0 +% (to be executed when the sequence specification is completely parsed) +% +% #1 text to be printed out before the node content +% #2 source node name +% #3 target node name +% #4 arrow angle +% #5 link label +% #6 link color +% #7 node content +\gdef\pstr@PS@createNodeAndArrow#1#2#3#4#5#6#7{% + \pstr@drawNode{#1}{#2}{#7}% + \pstr@drawArrow{#2}{#3}{#4}{#5}{#6}{\pstr@DefaultArrowLineStyle}% +} + + +%%%%%%%%%%%%%%%% +%%Second way of creating a pointing string: user command \pstr +% \pstr[raiseamount][nodesep]{ sequencespecification } +% example: +% \pstr[0.4cm][1pt]{ \nd(b) this \nd(a-b,45) that } + +\gdef\pstr@PS{\@ifnextchar[{\pstr@PS@i}{\pstr@PS@ii[0cm][1pt]}} +% pstr with one optional parameter +\gdef\pstr@PS@i[#1]{\@ifnextchar[{\pstr@PS@ii[#1]}{\pstr@PS@ii[#1][1pt]}} +% pstr with two optional parameters +\gdef\pstr@PS@ii[#1][#2]#3{% +\begingroup% + \setlength\pstr@tempdim{#1}% + \def\pstr@arcoptions{#2}% + \pstr@defineUserCommands% define the command \nd and \txt that the package user can use to define the sequence + \setbox\pstr@tempbox\hbox{$#3$}% + \ht\pstr@tempbox\pstr@tempdim% + \leavevmode\box\pstr@tempbox% +\endgroup% +} +\fi + + +\ifLoadPGFengine + +\newdimen\pstr@mydimA +\newdimen\pstr@mydimB +\newdimen\pstr@mydimC +\newtoks\pstr@ptrlist + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% Version of the package relying on PGF (the Tikz interface is not used) + +% Draw a node with PGF: +% #1 text preceding the node +% #2 name of the node +% #3 content of the node +\def\pstr@PGF@drawNode#1#2#3{% + \pgfsetfillcolor{white!100}% + \pgfset{inner xsep=1pt}% + \pgfset{inner ysep=0.6pt}% +% \pgfnode{rectangle}{base west}{\color{black}${}#1{}$}{#2@Next}{\pgfusepath{discard}}% +% \pgftransformshift{\pgfpointanchor{#2@Next}{base east}}% + \pgfnode{rectangle}{base west}{\color{black}${}#3{}$}{#2}{\pgfusepath{discard}}% + \pgftransformshift{\pgfpointanchor{#2}{base east}}% +} + +% Prints some text in the sequence (using PGF) +\gdef\pstr@PGF@printText#1{% + \def\text{#1}% + \ifx\text\empty% + \else% + \pgfsetfillcolor{white!100}% + \pgfset{inner xsep=1pt}% + \pgfset{inner ysep=0pt}% + \pgfnode{rectangle}{base west}{\color{black}${}#1{}$}{dummy}{\pgfusepath{discard}}% + \pgftransformshift{\pgfpointanchor{dummy}{base east}}% + \fi% +} + + +% Draw an arrow with PGF +% #1 source node name +% #2 target node name +% #3 angle +% #4 label +% #5 line color +% #6 line style +\def\pstr@PGF@drawArrow#1#2#3#4#5#6{% + \def\angleB{#3}% + \count255=180 \advance \count255 by -\angleB% + \def\angleA{\number\count255}% + \def\ptA{\pgfpointdiff{\pgfpoint{0.5pt}{-\pstr@arcoptions}}{\pgfpointanchor{#1}{north}}}% shift the end of the arrow a bit to the right + \def\ptB{\pgfpointdiff{\pgfpoint{0pt}{-\pstr@arcoptions}}{\pgfpointanchor{#2}{north}}}% + \def\bendpt{ \pgfpointintersectionoflines% + {\ptA}{\pgfpointadd{\ptA}{\pgfpointpolar{\angleA}{1cm}}}% + {\ptB}{\pgfpointadd{\ptB}{\pgfpointpolar{\angleB}{1cm}}}}% + + \pgfextracty{\pstr@mydimA}{\ptA}% + \pgfextracty{\pstr@mydimB}{\ptB}% + \pgfextracty{\pstr@mydimC}{\bendpt}% + \def\maxdim{\ifdim\pstr@mydimA>\pstr@mydimB \pstr@mydimA \else \pstr@mydimB \fi}% + \advance \pstr@mydimC by \maxdim% + \divide \pstr@mydimC by 2 % mydimC now contains (max(y_A, y_B) + y_C)/2 + + % control points + \def\cptC{ \pgfpointintersectionoflines{\ptA}{\bendpt}% + {\pgfpoint{0pt}{\pstr@mydimC}}{\pgfpoint{16pt}{\pstr@mydimC}}}% + \def\cptD{ \pgfpointintersectionoflines{\ptB}{\bendpt}% + {\pgfpoint{0pt}{\pstr@mydimC}}{\pgfpoint{16pt}{\pstr@mydimC}}}% + + + %%%% draw using two halves of parabolas + %\pgfpathmoveto{\ptA}\pgfpathparabola{\pgfpointdiff{\ptA}{\bendpt}}{\pgfpointdiff{\bendpt}{\ptB}}% + %%%% + %%%% draw using lines + %\pgfpathmoveto{\ptA}\pgflineto{\bendpt}\pgflineto{\ptB}% + %%%% + %%%% draw using bezier curves + \pgfpathmoveto{\ptA}\pgfpathcurveto{\cptC}{\cptD}{\ptB}% + %%%% + \pgfsetcolor{#5}% + + \def\linestyle{#6} + \ifx\linestyle\pstr@linestyledashed + \pgfsetdash{{3pt}{3pt}}{0cm}% + \pgfusepath{stroke}% + \else + \ifx\linestyle\pstr@linestyledotted + \pgfsetdash{{1pt}{3pt}}{0cm}% + \pgfusepath{stroke}% + \else + \ifx\linestyle\pstr@linestylenone + + \else%solid + \pgfsetdash{}{0pt}% + \pgfusepath{stroke}% + \fi + \fi + \fi + + + %%% Put the label on the link if there is one + \def\label{#4}% + \ifx\label\empty% + \else% +% \pgfsetfillcolor{white!100}% +% \pgfset{inner xsep=1pt}% + \pgfset{inner ysep=1pt}% + %\pgftransformshift{\bendpt} % position the label at the bendpoint + \pgftransformshift{\pgfpointcurveattime{0.5}{\ptA}{\cptC}{\cptD}{\ptB}} % position the label at half-way on the curve + \pgfnode{rectangle}{south}{\color{black} {\pstr@LabelStyle $\label$}}{}{\pgfusepath{discard}}% + \fi% +} + + + + + +%%%%%%% First way of creating a pointing string: user command \Pstr +%%%%%%% (version for the PGF engine mode) +%%%% +%%%% Examples of use: +%%%% \Pstr[0.4cm][1pt]{ (b) this (a-b,45:label) that } +%%%% \Pstr[0.4cm][1pt]{ (b) this (a-b,45) that } +%%%% \Pstr[0.4cm][1pt]{ (b) this (a-b) that } +%%%% \Pstr[0.4cm][1pt]{ (b) this (a) that } + +\gdef\Pstr@PGF{\@ifnextchar[{\Pstr@PGF@i}{\Pstr@PGF@ii[0cm][1pt]}} +% Pstr with one optional parameter +\gdef\Pstr@PGF@i[#1]{\@ifnextchar[{\Pstr@PGF@ii[#1]}{\Pstr@PGF@ii[#1][1pt]}} +% Pstr with two optional parameters +% [#1] ignored in the PGF mode +% [#2] ignored in the PGF mode +\gdef\Pstr@PGF@ii[#1][#2]#3{% +\begin{pgfpicture}% + \def\pstr@arcoptions{#2}% + \pgfsetbaseline{0pt}% + \pgfset{minimum width=0cm}% + \pgfset{minimum height=0pt}% + \pgfset{inner xsep=0pt}% + \pgfset{inner ysep=0.3pt}% + \pgfsetarrows{-stealth}% + \pgfsetlinewidth{\pstr@ArrowLineWidth}% + \pstr@ptrlist={}% Create an empty list of links. + \Pstr@ParseSpecification#3(@-@){}\@nil% + \the\pstr@ptrlist% dump the list of links. +\end{pgfpicture}% +} + +% Create the node and store the commands for the creation of the link in the list of tokens tok0 +% (to be executed when the sequence specification is completely parsed) +% +% #1 text to be printed out before the node content +% #2 source node name +% #3 target node name +% #4 arrow angle +% #5 link label +% #6 line color +% #7 node content +\gdef\pstr@PGF@createNodeAndArrow#1#2#3#4#5#6#7{ + %\pstr@createpgfnode{s}{s}{\mbox{C[1($#1$) 2($#2$) 3($#3$) 4(#4) 5(#5) 6(#6)]} } + \pstr@drawNode{#1}{#2}{#7}% + % add the arrow to the list of arrows + \toks0={\pstr@drawArrow{#2}{#3}{#4}{#5}{#6}{\pstr@DefaultArrowLineStyle}}% + \edef\act{\noexpand\pstr@ptrlist={\the\pstr@ptrlist \the\toks0}}% + \act% +} + + +%%%%%%% Second way of creating a pointing string: user command \pstr +%%%%%%% (version for the PGF engine mode) +%%%% +%%%% Syntax: +%%%% \pstr[raiseamount][nodesep]{ sequencespecification } +%%%% Examples of use: +%%%% \pstr[IGNORED][IGNORED]{ \nd(b) this \nd(a-b,45) that } +%%%% + +% Note that raiseamount is ignored in PGF mode since the bounding box is computed automatically. +\gdef\pstr@PGF{\@ifnextchar[{\pstr@PGF@i}{\pstr@PGF@ii[0cm][1pt]}} +% pstr with one optional parameter +\gdef\pstr@PGF@i[#1]{\@ifnextchar[{\pstr@PGF@ii[#1]}{\pstr@PGF@ii[#1][1pt]}} +% pstr with two optional parameters +\gdef\pstr@PGF@ii[#1][#2]#3{% +\begin{pgfpicture}% + \def\pstr@arcoptions{#2}% + \pgfsetbaseline{0pt}% + \pgfset{minimum width=0cm}% + \pgfset{minimum height=0pt}% + \pgfset{inner xsep=0pt}% + \pgfset{inner ysep=0.3pt}% + \pgfsetarrows{-stealth}% + \pgfsetlinewidth{\pstr@ArrowLineWidth}% + \pstr@ptrlist={}% Create an empty list of links. + \pstr@defineUserCommands% define the command \nd and \txt that the package user can use to define the sequence + #3% + \the\pstr@ptrlist% dump the list of links. +\end{pgfpicture}% +} + +\fi %%% \ifpstricks ... \else ... + +%%%% End of definition of commands specific to the PSTricks mode +%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%% +%%%% Functions common to all rendering modes + +% When executed, the following macro will define two commands which will become available to the package user +% for the definition of the sequence within a \pstr{ } command. +% +% It is called in the \pstr@PS and \pstr@PGF macros. +\gdef\pstr@defineUserCommands{% + % node/link creation + \def\nd##1(##2)##3{% + % print out the text preceding the node specification + \pstr@printText{##1}% + % parse the node specification + \Pstr@ParseNodeSpecif{##1}{##2}{##3}\@nil% + }% + \def\txt##1{% + % print out text + \pstr@printText{##1}% + }% + % creation of an additional arrow + \def\arrow{\pstr@drawArrow}% +} + +%%%% +%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%% +%%%% Code for the succint syntax parser. Used in all modes (pgf and pstricks) +%%%% + +% Parse the specification of the pointing string. +% #1 stuff to be printed in the sequence before the node +% #2 node name and link specification +% #3 node content +\gdef\Pstr@ParseSpecification#1(#2)#3{% + % print out the text preceding the node specification + \pstr@printText{#1} + % parse the node specification + \Pstr@ParseNodeSpecif{#1}{#2}{#3}\@nil + % proceeds to the rest of the specification. + \@ifnextchar\@nil{\@gobble}{\Pstr@ParseSpecification} +} + +\gdef\Pstr@ParseNodeSpecif#1#2#3{% + \Pstr@parselinkparam@Target{#1}(#2-){#3}% +} + +% Parse a node specification +% #1 stuff to be dumped (not part of the node specification) +% #2 source +% #3 link parameters (target,angle:label) +\gdef\Pstr@parselinkparam@Target#1(#2-#3){% +% if it is the the dummy node (@-@){} then skip it +\if#2@ + \def\suite{\Pstr@skipcontent} +\else + % if a target node is specified then create the link for it. + \def\linkparam{#3} + \ifx\linkparam\empty + \def\suite{\Pstr@skiplinkparam{#1}{#2}} + \else + \def\suite{\Pstr@parselinkparam@Target@i{#1}{#2}#3\@nil} % #3 contains an extra '-' at the end that will be removed by this command + \fi +\fi +\suite +} + +\gdef\Pstr@skipcontent#1\@nil{} + +% Parameters #1 and #2 have been parsed already +% #1 dump #2 source node #3 node content +\gdef\Pstr@skiplinkparam#1#2#3\@nil{\pstr@drawNode{#1}{#2}{#3}} + +% remove the extra '-' (which was appended before), adds an extra ',' at the end and look for the next ',' +\gdef\Pstr@parselinkparam@Target@i#1#2#3-\@nil{\Pstr@parselinkparam@Angle{#1}{#2}#3,\@nil} + +\gdef\Pstr@parselinkparam@Angle#1#2#3,#4\@nil{ + \def\reste{#4} + \ifx\reste\empty + \def\suite{\Pstr@parseNodeContent{#1}{#2}{#3}{\pstr@DefaultArrowAngle}{\pstr@DefaultArrowLabel}{\pstr@DefaultArrowColor}} + \else + \def\suite{\Pstr@parselinkparam@Angle@i{#1}{#2}{#3}#4\@nil} % #4 contains an extra ',' at the end that will be removed by this command + \fi + \suite +} +% remove the extra ',' (which was appended before), add an extra ':' at the end and look for the next ':' +\gdef\Pstr@parselinkparam@Angle@i#1#2#3#4,\@nil{\Pstr@parselinkparam@Label{#1}{#2}{#3}#4:\@nil} + +\gdef\Pstr@parselinkparam@Label#1#2#3#4:#5\@nil{ + \def\reste{#5} + \ifx\reste\empty + \def\suite{\Pstr@parseNodeContent{#1}{#2}{#3}{#4}{\pstr@DefaultArrowLabel}{\pstr@DefaultArrowColor}} + \else + \def\suite{\Pstr@parselinkparam@Label@i{#1}{#2}{#3}{#4}#5\@nil} % #5 contains an extra ':' at the end that will be removed by this command + \fi + \suite +} +% remove the extra ':' (which was appended before) add an extra ',' at the end and look for the next ',' +\gdef\Pstr@parselinkparam@Label@i#1#2#3#4#5:\@nil{\Pstr@parselinkparam@Color{#1}{#2}{#3}{#4}#5,\@nil} + +\gdef\Pstr@parselinkparam@Color#1#2#3#4#5,#6\@nil{ + \def\reste{#6} + \ifx\reste\empty + \def\suite{\Pstr@parseNodeContent{#1}{#2}{#3}{#4}{#5}{\pstr@DefaultArrowColor}} + \else + \def\suite{\Pstr@parselinkparam@Color@i{#1}{#2}{#3}{#4}{#5}#6\@nil} % #6 contains an extra ',' at the end that will be removed by this command + \fi + \suite +} +% remove the extra ',' (which was appended before) and then goes on with the parsing +\gdef\Pstr@parselinkparam@Color@i#1#2#3#4#5#6,\@nil{\Pstr@parseNodeContent{#1}{#2}{#3}{#4}{#5}{#6}} + + +% End of the parsing of the link parameter, we just need to parse the node content (#7) +% and we have all the parameters necessary to create the node and the link. +\gdef\Pstr@parseNodeContent#1#2#3#4#5#6#7\@nil{% +\pstr@createNodeAndArrow{#1}{#2}{#3}{#4}{#5}{#6}{#7}% +} + +%%%% +%%%% END OF THE CODE FOR THE PARSER +%%%%%%%%%%%%%%%%%%%%% + + + + + +\catcode`\@=\TheAtCode\relax + +\endinput + +Change log: +----------- +Version 0.3.4 29 Oct 2007: +- updated for use with the latest version of the pgf package +Version 0.3.3 12 Oct 2007: +- it is possible to specify the line style with the option \pstrSetArrowLineStyle +- additional arrows can be created with \arrow in the \pstr syntax mode (but not in \Pstr) + +Version 0.3.2 24 Sep 2007: +- the file pstring.pro was not created when the preamble was precompiled using latexdaemon +Version 0.3.1, 3 May 2007: +- It is now possible to specify the link color individually with the following link specification syntax: + (src-dst,80:label,green) +Version 0.3, 1 Mar 2007: +- added support for pgf as a drawing engine instead of the (hacked) pstricks +- incompatibility with LatexDaemon fixed: before when loading the pstring package from a precompiled +preamble, the prologue file was not included properly during the dvips conversion. + +Version 0.1, 28 Jan 2007 First version + + +Examples: +--------- + +First way of creating a pointing string: user command \Pstr +Examples of use: + \Pstr[0.4cm][1pt]{ (b) this (a-b,45:label) that } + \Pstr[0.4cm][1pt]{ (b) this (a-b,45) that } + \Pstr[0.4cm][1pt]{ (b) this (a-b) that } + \Pstr[0.4cm][1pt]{ (b) this (a) that } + + +Second way of creating a pointing string: user command \pstr +Syntax: + \pstr[raiseamount][nodesep]{ sequencespecification } +Examples of use: + \pstr[10pt][1pt]{ \nd(b) this \nd(a-b,45) that } + +Note: in PGF mode, the 'raiseamount' is ignored, this is because the bounding-box is computed automatically by PGF so the box is already raised appropriately. + + +TODO: +---- + +- Compute the bounding box automatically in PSTricks mode. +- Change the \nd user command so that (optional) extra horizontal space is added +before each node except the first one. This would avoid to have to write '\ ' after each node specification. +- Change the \nd user command so that it looks after the node specification for extra text to be printed out. Then the \txt user command becomes unecessary and can be removed. +- Implement a mode "PGF with overlays" which can be activated with the "overlay" package option. In this mode, each node would be typeset within a seperate PGF environment and using the commands \pgfrememberpicturepositiononpage and +\pgfrememberpicturepositiononpage appropriately so that PGF +remembers the node names across different PGF environments. +The bounding box would need to be computed by ourselves in that case. diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 3bc1589c716..b014cd9f559 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -500,7 +500,7 @@ my @TLP_working = qw( pst-spectra pst-spirograph pst-stru pst-support pst-text pst-thick pst-tools pst-tree pst-tvz pst-uml pst-vectorian pst-vowel pst-vue3d - pst2pdf pstool pstricks pstricks-add pstricks_calcnotes + pst2pdf pstool pstricks pstricks-add pstricks_calcnotes pstring psu-thesis ptex-base ptex-fonts ptex2pdf ptext ptptex punk punk-latex punknova purifyeps pxbase pxchfon pxcjkcat pxfonts pxgreeks pxjahyper diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index fe7a4efa119..2667db1663b 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -819,6 +819,7 @@ depend protocol depend psfragx depend pst-pdf depend pstool +depend pstring depend pxgreeks depend python depend qcm diff --git a/Master/tlpkg/tlpsrc/pstring.tlpsrc b/Master/tlpkg/tlpsrc/pstring.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/pstring.tlpsrc |