summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/inversepath
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-04-28 00:52:36 +0000
committerKarl Berry <karl@freefriends.org>2007-04-28 00:52:36 +0000
commitca6449b1a40c3ba024f1819af6ff8b7b2ddc22e6 (patch)
treebcc1e0c2925ba96fa89e667fbaa9dd847de587a6 /Master/texmf-dist/source/latex/inversepath
parent82a154912da337be00dd632c0a3b2534acdf57c0 (diff)
new package inversepath (26apr07)
git-svn-id: svn://tug.org/texlive/trunk@4204 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/inversepath')
-rw-r--r--Master/texmf-dist/source/latex/inversepath/inversepath.dtx384
-rw-r--r--Master/texmf-dist/source/latex/inversepath/inversepath.ins59
2 files changed, 443 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/inversepath/inversepath.dtx b/Master/texmf-dist/source/latex/inversepath/inversepath.dtx
new file mode 100644
index 00000000000..fb4eb97a5b2
--- /dev/null
+++ b/Master/texmf-dist/source/latex/inversepath/inversepath.dtx
@@ -0,0 +1,384 @@
+% \iffalse meta-comment
+%
+% Copyright 2007 by Will Robertson <wspr81@gmail.com>
+%
+% Distributable under the LaTeX Project Public License,
+% version 1.3c or higher (your choice). The latest version of
+% this license is at: http://www.latex-project.org/lppl.txt
+%
+% This work is "maintained" (as per LPPL maintenance status)
+% by Will Robertson.
+%
+% This work consists of the file inversepath.dtx
+% and the derived files inversepath.sty and inversepath.pdf.
+%
+%
+%<*internalbatchfile>
+\begingroup
+%</internalbatchfile>
+%<*batchfile>
+\input docstrip.tex
+\keepsilent
+\preamble
+
+ __________________________________
+ Copyright (C) 2007 Will Robertson
+
+ License information appended.
+
+
+\endpreamble
+\postamble
+
+Copyright (C) 2006 by Will Robertson <wspr81@gmail.com>
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status)
+by Will Robertson.
+
+This work consists of the file \jobname.dtx
+ and the derived files \jobname.sty and \jobname.pdf.
+
+\endpostamble
+\askforoverwritefalse
+\generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}}
+\nopreamble\nopostamble
+\generate{\file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}}
+%</batchfile>
+%<batchfile>\endbatchfile
+%<*internalbatchfile>
+\endgroup
+\immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx}
+\immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo}
+%</internalbatchfile>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+\usepackage{dtx-style}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \GetFileInfo{\jobname.sty}
+% \CheckSum{0}
+% \makeatletter
+%
+% \title{Relative inverse path calculation}
+% \author{Will Robertson}
+% \date{\filedate \qquad \fileversion}
+%
+% \maketitle
+%
+% \noindent
+% \pkg{inversepath} is a simple package to calculate inverse relative paths.
+% For example, when writing to an auxiliary file in a subdirectory
+% (or a series of nested subdirectories), it can be useful to know
+% how to get back to the original file.
+%
+% If the absolute path of the original file is specified, this package
+% can also calculate the relative path of a file in parent or sibling
+% directories.
+%
+% \bigskip
+% {\centering\noindent
+% \cmd\inversepath\marg{path}---expands to the inverse of \meta{path}.\par}
+%
+% \bigskip
+% {\raggedleft\noindent
+% \cmd\absolutepath\marg{abs.\ path}---specifies the absolute
+% path for calculating parent/sibling relative paths.\par}
+%
+% \noindent Regular usage:
+% \begin{example}{}
+% \inversepath{one/two/three/four.tex}\par
+% \ip@lastelement\par
+% \ip@directpath
+% \end{example}
+%
+% \noindent Expands to \meta{empty} if the relative path is the same directory:
+% \begin{example}{}
+% [\inversepath{one.tex}]\par
+% \ip@lastelement\par
+% [\ip@directpath]
+% \end{example}
+%
+% \noindent For `back-relative' paths, the absolute path needs to be specified:
+% \begin{example}{}
+% \absolutepath{/xyz/here/there/everywhere/}
+%
+% \inversepath{../../one/two/three.tex}\par
+% \ip@lastelement\par
+% \ip@directpath
+% \end{example}
+%
+% \noindent That's it!
+%
+% \StopEventually{}
+%
+% \part{\pkg{\jobname} implementation}
+%\iffalse
+%<*package>
+%\fi
+% This is the package.
+% \begin{macrocode}
+\ProvidesPackage{inversepath}
+ [26/04/2007 v0.1 Inverse relative paths]
+% \end{macrocode}
+% \begin{macro}{\inversepath}
+% \darg{Path to invert}
+% \begin{macrocode}
+\newcommand\inversepath[1]{%
+% \end{macrocode}
+% \cmd\ip@jobpath\ is preserved to restore after truncation for
+% back-relative paths.
+% \begin{macrocode}
+ \let\ip@origjobpath\ip@jobpath
+ \let\ip@directpath\@empty
+ \let\ip@inversepath\@empty
+ \ip@strippath#1/\@nil/%
+ \let\ip@jobpath\ip@origjobpath
+ \ip@inversepath}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\absolutepath}
+% \darg{Absolute path used for calculating parent/sibling relative paths.}
+% \begin{macrocode}
+% macro to define the absolute path of where we are:
+\newcommand\absolutepath[1]{\def\ip@jobpath{#1}}
+% \end{macrocode}
+% \end{macro}
+% For \cs{ifx} comparisons for relative back-paths:
+% \begin{macrocode}
+\def\ip@literaldotdot{..}
+% \end{macrocode}
+% \begin{macro}{\ip@strippath}
+% This is the macro that does all the work.
+% It takes input like |a/b/c/...x/y/z/\@nil/| and
+% expands to \cmd\ip@inversepath, the inverse path of \ip@directpath
+% (|a/b/.../y/|).
+% \begin{macrocode}
+\def\ip@strippath#1/#2/{%
+ \ifx\@nil#2\relax
+% \end{macrocode}
+% If input is |z/\@nil/| then we've reached the end:
+% \begin{macrocode}
+ \def\ip@lastelement{#1}%
+ \else
+% \end{macrocode}
+% If we're in the middle of the slash-separated list;
+% build up \cmd\ip@directpath:
+% \begin{macrocode}
+ \edef\ip@directpath{\ip@directpath#1/}
+ \def\@tempa{#1}%
+ \ifx\@tempa\ip@literaldotdot
+ \unless\ifdefined\ip@jobpath
+ \PackageError{inversepath}
+ {No absolute path specified}
+ {You must declare the file path of the main
+ file with \protect\absolutepath{} to be able to
+ resolve back-relative paths}%
+ \fi
+% \end{macrocode}
+% If the path is a back-relative path, things are more complex.
+% to get the inverse of |../|, we need the absolute file path.
+% this requires using \cmd\ip@strippath\ on \cmd\ip@jobpath\ itself, so save out
+% our current definitions of \cmd\ip@directpath/\cmd\ip@inversepath\ and
+% (re-)initialise them:
+% \begin{macrocode}
+ \let\ip@olddirectpath\ip@directpath
+ \let\ip@oldinversepath\ip@inversepath
+ \let\ip@directpath\@empty
+ \let\ip@inversepath\@empty
+% \end{macrocode}
+% \cmd\ip@strippath on \cmd\ip@jobpath\ gives us the topmost directory in
+% \cmd\ip@lastelement:
+% \begin{macrocode}
+ \expandafter\ip@strippath\ip@jobpath\@nil/
+ \let\@tempa\ip@lastelement
+% \end{macrocode}
+% \cmd\ip@jobpath is now truncated so \cmd\iplastelement\ in the next
+% iteration is one folder up the hierarchy.
+% \begin{macrocode}
+ \let\ip@jobpath\ip@directpath
+% \end{macrocode}
+% Now we restore everything to how it was: (this would be better
+% with grouping, but I don't want to use \cmd\global)
+% \begin{macrocode}
+ \let\ip@directpath\ip@olddirectpath
+ \let\ip@inversepath\ip@oldinversepath
+% \end{macrocode}
+% Build up the inverse path:
+% \begin{macrocode}
+ \ifx\@tempa\@empty
+ \PackageError{inversepath}
+ {Absolute path too shallow to resolve
+ such a deep relative path}
+ {You're trying to go back more directories than you have!}
+ \fi
+ \edef\ip@inversepath{\@tempa/\ip@inversepath}%
+ \else
+% \end{macrocode}
+% If the path is a simple relative path,
+% then build up the inverse path by prepending |../|:
+% \begin{macrocode}
+ \edef\ip@inversepath{../\ip@inversepath}%
+ \fi
+% \end{macrocode}
+% Iterate:
+% \begin{macrocode}
+ \def\@tempa{\ip@strippath#2/}%
+ \expandafter\@tempa
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+%\iffalse
+%</package>
+%\fi
+%
+%
+%\iffalse
+%<*dtx-style>
+% \begin{macrocode}
+\ProvidesPackage{dtx-style}
+
+\errorcontextlines=999
+
+\def\@dotsep{1000}
+\setcounter{tocdepth}{2}
+\setlength\columnseprule{0.4pt}
+\renewcommand\tableofcontents{\relax
+ \begin{multicols}{2}[\section*{\contentsname}]\relax
+ \@starttoc{toc}\relax
+ \end{multicols}}
+
+\setcounter{IndexColumns}{2}
+\renewenvironment{theglossary}
+ {\small\list{}{}
+ \item\relax
+ \glossary@prologue\GlossaryParms
+ \let\item\@idxitem \ignorespaces
+ \def\pfill{\hspace*{\fill}}}
+ {\endlist}
+
+\usepackage[svgnames]{xcolor}
+\usepackage{amsmath,array,bm,booktabs,calc,enumitem,fancyvrb,graphicx,ifthen,longtable,refstyle,subfig,topcapt,varioref,\jobname,url}
+
+\usepackage[sc,osf]{mathpazo}
+
+\linespread{1.069} % A bit more space between lines
+\frenchspacing % Remove ugly extra space after punctuation
+
+\definecolor{niceblue}{rgb}{0.2,0.4,0.8}
+\newenvironment{example}[1]
+ {\VerbatimEnvironment
+ \def\Options{#1}%
+ \begin{VerbatimOut}[gobble=2]{\examplefilename}}
+ {\end{VerbatimOut}\relax
+ \typesetexample}
+
+\fvset{formatcom=\color{niceblue}}
+\DefineShortVerb{\|}
+
+\def\theCodelineNo{\textcolor{niceblue}{\sffamily\tiny\arabic{CodelineNo}}}
+
+\let\examplesize\normalsize
+\let\auxwidth\relax
+
+\newlength\examplewidth\newlength\verbatimwidth
+\newlength\exoutdent \newlength\exverbgap
+\setlength\exverbgap{1em}
+\setlength\exoutdent{-0.15\textwidth}
+\newsavebox\verbatimbox
+\edef\examplefilename{\jobname.example}
+
+\newcommand\typesetexample{\relax
+ \smallskip
+ \noindent
+ \begin{minipage}{\linewidth}
+ \color{niceblue}
+ \hrulefill\par
+ \edef\@tempa{[gobble=0,fontsize=\noexpand\small,\Options]}%
+ \begin{lrbox}{\verbatimbox}\relax
+ \expandafter\BVerbatimInput\@tempa{\examplefilename}%
+ \end{lrbox}
+ \begin{list}{}{\setlength\itemindent{0pt}
+ \setlength\leftmargin\exoutdent
+ \setlength\rightmargin{0pt}}\item
+ \ifx\auxwidth\relax
+ \setlength\verbatimwidth{\wd\verbatimbox}%
+ \else
+ \setlength\verbatimwidth{\auxwidth}%
+ \fi
+ \begin{minipage}[c]{\textwidth-\exoutdent-\verbatimwidth-\exverbgap}
+ \catcode`\%=14\centering\linespread{1.6}\input\examplefilename\relax
+ \end{minipage}\hfill
+ \begin{minipage}[c]{\verbatimwidth}
+ \usebox\verbatimbox
+ \end{minipage}
+ \end{list}
+ \par\noindent\hrulefill
+ \end{minipage}
+ \smallskip}
+
+\newcommand*\setverbwidth[1]{\def\auxwidth{#1}}
+
+\newcommand*\name[1]{{#1}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\newcommand*\feat[1]{\texttt{#1}}
+\newcommand*\opt[1]{\texttt{#1}}
+
+\newcommand*\note[1]{\unskip\footnote{#1}}
+
+\let\latin\textit
+\def\eg{\latin{e.g.}}
+\def\Eg{\latin{E.g.}}
+\def\ie{\latin{i.e.}}
+\def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}}
+
+\def\STIX{\textsc{stix}}
+\def\MacOSX{Mac~OS~X}
+\def\ascii{\textsc{ascii}}
+\def\OMEGA{Omega}
+\def\CTAN{\textsc{ctan}}
+
+\newcounter{argument}
+\g@addto@macro\endmacro{\setcounter{argument}{0}}
+\newcommand*\darg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\char`\#\theargument~:~}#1\par\noindent\ignorespaces}
+\newcommand*\doarg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\makebox[0pt][r]{[}\char`\#\theargument]:~}#1\par\noindent\ignorespaces}
+
+\def\codeline{\par\hspace{2\parindent}}
+
+\newcommand\unichar[2]{\textsc{\MakeLowercase{u+#1: #2}}}
+
+\setlength\parindent{2em}
+
+% \end{macrocode}
+%</dtx-style>
+%\fi
+%
+% \typeout{*************************************************************}
+% \typeout{*}
+% \typeout{* To finish the installation you have to move the following}
+% \typeout{* file into a directory searched by XeTeX:}
+% \typeout{*}
+% \typeout{* \space\space\space inversepath.sty}
+% \typeout{*}
+% \typeout{*************************************************************}
+%
+\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/inversepath/inversepath.ins b/Master/texmf-dist/source/latex/inversepath/inversepath.ins
new file mode 100644
index 00000000000..2beff053813
--- /dev/null
+++ b/Master/texmf-dist/source/latex/inversepath/inversepath.ins
@@ -0,0 +1,59 @@
+%%
+%% This is file `inversepath.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% inversepath.dtx (with options: `batchfile')
+%%
+%% __________________________________
+%% Copyright (C) 2007 Will Robertson
+%%
+%% License information appended.
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+
+ __________________________________
+ Copyright (C) 2007 Will Robertson
+
+ License information appended.
+
+\endpreamble
+\postamble
+
+Copyright (C) 2006 by Will Robertson <wspr81@gmail.com>
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status)
+by Will Robertson.
+
+This work consists of the file \jobname.dtx
+ and the derived files \jobname.sty and \jobname.pdf.
+
+\endpostamble
+\askforoverwritefalse
+\generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}}
+\generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}}
+\nopreamble\nopostamble
+\generate{\file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}}
+\endbatchfile
+%%
+%% Copyright (C) 2006 by Will Robertson <wspr81@gmail.com>
+%%
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status)
+%% by Will Robertson.
+%%
+%% This work consists of the file inversepath.dtx
+%% and the derived files inversepath.sty and inversepath.pdf.
+%%
+%%
+%% End of file `inversepath.ins'.