diff options
author | Karl Berry <karl@freefriends.org> | 2010-04-09 23:57:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-04-09 23:57:07 +0000 |
commit | 6f566f4c50f0a9f580b47c6c30b0f58531baaacf (patch) | |
tree | c24bc651796b8b6274bb8f1f5f5e6f0b65d19c17 /Master/texmf-dist/source | |
parent | 4ae752d402a724ec733722603ac28caec31b6e91 (diff) |
new latex package currfile 0.1 (8apr10)
git-svn-id: svn://tug.org/texlive/trunk@17776 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/currfile/currfile.dtx | 265 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/currfile/currfile.ins | 7 |
2 files changed, 272 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/currfile/currfile.dtx b/Master/texmf-dist/source/latex/currfile/currfile.dtx new file mode 100644 index 00000000000..f2520147cfb --- /dev/null +++ b/Master/texmf-dist/source/latex/currfile/currfile.dtx @@ -0,0 +1,265 @@ +% \iffalse meta-comment +%% Copyright (c) 2010 by Martin Scharrer <martin@scharrer-online.de> +%% ----------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2008/05/04 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Martin Scharrer. +%% +%% This work consists of the files currfile.dtx, currfile.ins +%% and the derived file currfile.sty. +%% +%% $Id: standalone.dtx 1803 2010-04-03 13:59:44Z martin $ +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{currfile.dtx} +%</driver> +%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package>\ProvidesPackage{currfile} +%<*package> + [2010/04/08 v0.1 Current input file name and path] +%</package> +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{currfile}[2010/04/08] +\usepackage{ifpdf} +\usepackage{hyperref} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\providecommand*\pkg{\texttt} +\begin{document} + \DocInput{currfile.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{148} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{v0.1}{2010/04/08}{Initial version} +% +% \GetFileInfo{currfile.dtx} +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \ifpdf +% \hypersetup{% +% pdfauthor = {Martin Scharrer <martin@scharrer-online.de>}, +% pdftitle = {The currfile package}, +% pdfsubject = {Documentation of LaTeX package 'currfile'}, +% pdfkeywords = {current filename, filename, file, name, LaTeX, TeX} +% }% +% \fi +% \clearpage +% \null +% \vspace*{-2em} +% \begin{center} +% {\LARGE\sffamily The \emph{currfile} Package\\[\medskipamount]} +% {\large Martin Scharrer \\[\medskipamount]\normalsize +% \url{martin@scharrer-online.de}\\[.8ex] +% \url{http://www.ctan.org/pkg/standalone/}\\[\bigskipamount]} +% {\large Version \fileversion\ -- \filedate}\\ +% \end{center} +% \vspace{1.2em}% +% +% \begin{abstract} +% This small package provides the file name and path information of the current input file as \LaTeX{} macros. +% \end{abstract} +% +% \section{Usage} +% +% \DescribeMacro{\currfiledir} +% \DescribeMacro{\currfilebase} +% \DescribeMacro{\currfileext} +% \DescribeMacro{\currfilename} +% \DescribeMacro{\currfilepath} +% The directory, base (name without extension), extension (without dot), name (=base+`|.|'+ext) and path (=dir+name) of the current file are provided by these macros. +% This means that the macros returns the file information of the file they are used in. All macros are fully expanded, i.e.\ only hold +% text and not further macros. +% Special care is taken to keep the file information of |\include|d files till the final |\clearpage| command, so that page header and footer of the last page +% will hold the correct data. +% +% Only files loaded with the \LaTeX{} macros |\input| or |\include| and the main file are taken into account. Files loaded using package macros like |\usepackage| or internal +% macros \cs{@input} and \cs{@@input} are ignored. +% +% More detailed information can be found in the implementation section (\ref{sec:impl}) if required. +% +% \subsection*{Package Options} +% The package provides two options |mainext| and |maindir| which can be used to provide the extension and directory of the main file. +% This is required if the above macros should be used for the main file itself and if this does has a file extension other than `|.tex|' (e.g.\ a |.dtx| file) +% or is not located in the current directory. +% +% \section{Similar Packages} +% The |fink| package (\emph{fi}le \emph{n}ame \emph{k}eeper) provides a similar functionality. It has inspired this package in several points (e.g.\ package +% options). However, it does not exclude package and other preamble files and does not take care to change the filename \emph{after} the |\clearpage| of +% |\include|. +% +% \StopEventually{} +% +% +% \section{Implementation}\label{sec:impl} +% +% \iffalse +%<*package> +% \fi +% \subsection{Options} +% +% \begin{macrocode} +\RequirePackage{kvoptions} +\SetupKeyvalOptions{family=currfile,prefix=currfile@} +\DeclareStringOption[tex]{mainext} +\DeclareStringOption[]{maindir} +\ProcessKeyvalOptions*\relax +% \end{macrocode} +% +% +% \subsection{File Hooks} +% The \pkg{filehook} package is used to execute the macros at the correct places. +% The internal, not user, interface is used to make sure that the file names are valid for all other hooks. +% +% \begin{macrocode} +\RequirePackage{filehook} +% \end{macrocode} +% +% \begin{macrocode} +\filehook@prefixwarg\filehook@include@atbegin{% + \currfile@push + \currfile@set{#1}% +} +\filehook@appendwarg\filehook@include@after{% + \currfile@pop +} +\filehook@prefixwarg\filehook@input@atbegin{% + \currfile@push + \currfile@set{#1}% +} +\filehook@appendwarg\filehook@input@atend{% + \currfile@pop +} +% \end{macrocode} +% +% +% \subsection{Set Current Values} +% +% \begin{macro}{\currfile@set} +% Sets the file information which are parsed by \LaTeX's |\filename@parse|. +% \begin{macrocode} +\def\currfile@set#1{% + \begingroup + \filename@parse{#1}% + \global\let\currfiledir\filename@area + \global\let\currfilebase\filename@base + \xdef\currfileext{\ifx\filename@ext\relax tex\else\filename@ext\fi}% + \xdef\currfilename{\currfilebase\ifx\currfileext\empty\else.\currfileext\fi}% + \xdef\currfilepath{\currfiledir\currfilename}% + \endgroup +%<debug> \expandafter\gdef\expandafter\dindent\expandafter{\dindent\space}% +%<debug> \message{^^JDEBUG: \dindent\empty Entering file '\currfilename' ^^J }% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{File Stack} +% The file information are pushed and popped on a stack to save and restore them when +% entering and leaving a sub-file, respectively. This is quite similar to the way +% \LaTeX\ saves file base names and extension as well as the `@' status (letter or other) for +% package and class files. +% +% \begin{macro}{\currfile@push} +% \begin{macrocode} +\def\currfile@push{% + \xdef\currfile@stack{% + {\currfiledir}% + {\currfilebase}% + {\currfileext}% + \currfile@stack + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\currfile@pop} +% \begin{macrocode} +\def\currfile@pop{% +%<debug> \message{^^JDEBUG: \dindent\empty Leaving file '\currfilename' ^^J }% + \ifx\currfile@stack\empty + \PackageWarning{currfile}{File stack underflow!}{}{}% + \global\let\currfile@stack\currfile@stackinit + \fi + \expandafter\currfile@pop@\currfile@stack\relax + \relax\relax\relax +%<debug> \message{^^JDEBUG: \dindent\empty Restoring file '\currfilename' ^^J }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\currfile@pop@} +% \begin{macrocode} +\def\currfile@pop@#1#2#3#4\relax{% + \gdef\currfiledir{#1}% + \gdef\currfilebase{#2}% + \gdef\currfileext{#3}% + \xdef\currfilename{\currfilebase\ifx\currfileext\empty\else.\currfileext\fi}% + \xdef\currfilepath{\currfiledir\currfilename}% + \gdef\currfile@stack{#4}% +%<debug> \expandafter\expandafter\expandafter\gdef +%<debug> \expandafter\expandafter\expandafter\dindent +%<debug> \expandafter\expandafter\expandafter{\expandafter\@gobble\dindent}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\currfile@stack} +% \begin{macro}{\currfile@stackinit} +% Place |\jobname| values on stack and use this as init value. +% \begin{macrocode} +\def\currfile@stack{} +\currfile@set{\currfile@maindir\jobname.\currfile@mainext} +\currfile@push +\let\currfile@stackinit\currfile@stack +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \iffalse +%<debug> \def\dindent{} +% \fi +% +% \iffalse +%</package> +% \fi +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/currfile/currfile.ins b/Master/texmf-dist/source/latex/currfile/currfile.ins new file mode 100644 index 00000000000..9f0428e33f9 --- /dev/null +++ b/Master/texmf-dist/source/latex/currfile/currfile.ins @@ -0,0 +1,7 @@ +% $Id$ +% See file 'currfile.dtx' for copyright and licence. +% +\input docstrip.tex +\keepsilent +\generate{\nopreamble\file{currfile.sty}{\from{currfile.dtx}{package}}} +\endbatchfile |