% \iffalse meta-comment % http://www.texdev.net/2009/10/06/a-model-dtx-file/ % !TEX program = pdfLaTeX %<*internal> \iffalse % %<*internal> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % %<*install> \input docstrip.tex \keepsilent \askforoverwritefalse \preamble \endpreamble \ifx\fmtname\nameofplainTeX \generate{ \file{\jobname.sty}{\from{\jobname.dtx}{package}} } \fi % %\endbatchfile %<*internal> \ifx\fmtname\nameofplainTeX \expandafter\endbatchfile\else \expandafter\endgroup\fi % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{lmacs} % [2012/05/30 v1.1 Imports local macro files] %<*driver> \documentclass{ltxdoc} %\usepackage{\jobname} %\usepackage[numbered]{hypdoc} %\EnableCrossrefs %\CodelineIndex %\RecordChanges \begin{document} \DocInput{\jobname.dtx} \end{document} % % \fi % %\GetFileInfo{\jobname.sty} % %\title{The \textsf{\jobname} Package} %\author{D. P. Story} %\date{Released \today} % %\maketitle % %\StopEventually{^^A % \PrintChanges % \PrintIndex %} % % \begin{macrocode} %<*package> % \end{macrocode} % \paragraph*{Description.} This package is used to clean up the % preamble of {\LaTeX} files. Some preambles have a (large) number of definitions % in them. To clean up the preamble, move the definitions in the preamble into a separate file, and % use this package in import them into your preamble. Normally, % \textsf{lmacs} would have a position that follows all packages for the % document. % % \textsf{lmacs} stands for \underbar{l}ocal \underbar{mac}ro\underbar{s}. Normally, the files referenced are in the same folder % as the main source file; they should not (but can) be in the search path of {\LaTeX}. % % \paragraph*{Demo files:} \texttt{lmacs\_tst.tex} (a simple latex source) % and \texttt{lmacs\_aeb.tex} (a file that uses the \textsf{web} and \textsf{exerquiz} packages). % These are found in the \texttt{examples} folder. % % \paragraph*{Documentation and Code.} % We begin by requiring \texttt{kvoptions}, this package does not test for the presence % of a class file, so we can use it. It allows us to define key-values as options of the % package. % \begin{macrocode} \RequirePackage{kvoptions}[2009/07/21] % \end{macrocode} % \begin{macrocode} % \end{macrocode} % \begin{macro}{cfg} % \begin{macro}{def} % \begin{macro}{js} % With these keys, you can specify the file with the specified extension be imported. % For example, the following line %\begin{verbatim} % \usepackage[cfg=myconf,def=mydef,js=myjs]{lmacs} %\end{verbatim} % will import (using \cs{InputIfFileExists}) the files \texttt{myconf.cfg}, % \texttt{mydef.def}, and \texttt{myjs.js}. Multiple specifications of the same % extension is permitted, for example, %\begin{verbatim} % \usepackage[def=mydef1,def=mydef2]{lmacs} %\end{verbatim} % \begin{macrocode} \let\LM@inputlist\@empty % \end{macrocode} % \cmd{\LM@input} inputs \texttt{\#1.\#2}, while \cmd{\LM@warning} issues % a package warning if \texttt{\#1.\#2} is not found. % \begin{macrocode} \newcommand{\LM@input}[2]{\InputIfFileExists{#1.#2}{}% {\LM@warning{#1}{#2}}} \newcommand{\LM@warning}[2]{\PackageWarning{lmacs} {The file #1.#2 cannot be found}} % \end{macrocode} % \DescribeMacro{!cfg}\DescribeMacro{!def}\DescribeMacro{!js}For each of these options, we add the specified file to % \cs{LM@inputlist}, this will be executed at the end of the package. The three options % \texttt{!cfg}, \texttt{!def}, \texttt{!js} do nothing, making it easy to include, or % not include a file. % \begin{macrocode} \define@key{lmacs}{cfg}{\g@addto@macro\LM@inputlist{\LM@input{#1}{cfg}}} \define@key{lmacs}{!cfg}{} \define@key{lmacs}{def}{\g@addto@macro\LM@inputlist{\LM@input{#1}{def}}} \define@key{lmacs}{!def}{} \define@key{lmacs}{js}{\g@addto@macro\LM@inputlist{\LM@input{#1}{js}}} \define@key{lmacs}{!js}{} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \begin{macrocode} \ProcessKeyvalOptions{lmacs} % \end{macrocode} % Once the options have been process, we execute the command % \cs{LM@inputlist} which contains a list of the files to be input. % \begin{macrocode} \LM@inputlist % \end{macrocode} % \begin{macrocode} % % \end{macrocode} %\Finale