diff options
author | Karl Berry <karl@freefriends.org> | 2016-12-09 22:52:26 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-12-09 22:52:26 +0000 |
commit | 30ed8d918cbb70e45a28309fba2e067c46d6c5d5 (patch) | |
tree | 5e32b6ae11ec75aec9614420c30431347b571dc5 /Master/texmf-dist/source/latex/dtxdescribe | |
parent | 71acfa00b64d95aa6d981e5af4b7253a8094da30 (diff) |
dtxdescribe (9dec16)
git-svn-id: svn://tug.org/texlive/trunk@42661 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/dtxdescribe')
-rw-r--r-- | Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.dtx | 1771 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.ins | 47 |
2 files changed, 1818 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.dtx b/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.dtx new file mode 100644 index 00000000000..95790045699 --- /dev/null +++ b/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.dtx @@ -0,0 +1,1771 @@ + +% \iffalse meta-comment +% +% Copyright 2016 Brian Dunn +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% 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.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% \fi + +% +% \iffalse +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{dtxdescribe} +%<package> [2016/12/08 v0.10 Describe additional object types in dtx source files.] +% +%<*driver> +\documentclass{ltxdoc} + +\newcommand*{\mypackagename}{dtxdescribe} +\newcommand{\quicksummary}{Describe additional object types in \texttt{dtx} source files.} + + +\usepackage{lmodern} +% \usepackage{libertine} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{textcomp} % provides \degree, \textquotesingle, \textmu + + + + + +% copy/paste special unicode symbols: +\input{glyphtounicode} +\pdfglyphtounicode{prime}{2032}% hex +\pdfglyphtounicode{diameter}{2300}% diameter +\pdfglyphtounicode{warningsign}{26A0}% warning sign +\pdfgentounicode=1 + +\usepackage{newunicodechar} +\newunicodechar{ff}{ff} +\newunicodechar{fi}{fi} +\newunicodechar{fl}{fl} +\newunicodechar{ffi}{ffi} +\newunicodechar{ffl}{ffl} +% \newunicodechar{°}{\degree} +\newunicodechar{ρ}{\ensuremath{\rho}} +\newunicodechar{⨯}{\texttimes} +\newunicodechar{⁄}{\textfractionsolidus} +% \newunicodechar{®}{\textregistered} +% \newunicodechar{©}{\textcopyright} +\newunicodechar{—}{---} +\newunicodechar{–}{--} +% \newunicodechar{”}{''} +% \newunicodechar{“}{``} +% \newunicodechar{§}{\S} +% \newunicodechar{¶}{\P} +% \newunicodechar{†}{\dag} +\newunicodechar{‡}{\ddag} +\newunicodechar{⚠}{\warningsign} + +\usepackage{microtype} + +% widows and orphans: +\usepackage[all,defaultlines=2]{nowidow} + + +\usepackage{etoolbox} + +\usepackage[log-declarations=false]{xparse} + + + +% \usepackage{graphicx} +% \graphicspath{{images/}} + +% \usepackage{enumitem} + +% \usepackage{array} +% \usepackage{booktabs} +% \usepackage{threeparttable} + +% \usepackage{fancybox}% must be loaded before fancyvrb +% \usepackage{fancyvrb} + + + +% \captionsetup{labelfont={small,bf},textfont={small,bf}} +% +% \captionsetup*[figure]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=2ex, +% labelfont={small,bf},textfont={small,bf} +% } +% +% \captionsetup*[table]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=1ex, +% labelfont={small,bf},textfont={small,bf} +% } +% +% \captionsetup*[subfigure]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=2ex, +% labelfont={small},textfont={small} +% } +% +% \captionsetup*[subtable]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=1ex, +% labelfont={small},textfont={small} +% } +% +% \captionsetup*[example]{ +% format=plain, justification=justified, +% margin=0pt, parskip=0pt, skip=0ex, +% labelfont={bf},textfont={bf} +% } +% +% \captionsetup*[wrapfigure]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=2ex, +% labelfont={small,bf},textfont={small,bf} +% } +% +% \captionsetup*[wraptable]{ +% style=default, justification=centering, +% margin=0pt, parskip=0pt, skip=1ex, +% labelfont={small,bf},textfont={small,bf} +% } + + + +% \usepackage{lipsum} + + + +% \usepackage{tikz} +% \usetikzlibrary{positioning,fit,backgrounds,calc,shapes.geometric,shadows} +% +% \usepackage[framemethod=tikz]{mdframed} +% +% \mdfdefinestyle{boxroundshadow}{linewidth=1pt,innerleftmargin=0in,innerrightmargin=0in,% +% innertopmargin=0in,innerbottommargin=0in,% +% align=center,roundcorner=3pt,shadow=true,shadowcolor=black!50,shadowsize=4pt,% +% leftmargin=0pt,rightmargin=0pt,% +% frametitlebackgroundcolor=black!15,% +% skipabove=0ex,skipbelow=0ex,% +% frametitlerulewidth=1pt,frametitleaboveskip=5pt,% +% } +% +% \newmdenv[style=boxroundshadow,align=center]{mdtightframe} +% +% \newmdenv[style=boxroundshadow,align=center,% +% innertopmargin=3pt,innerbottommargin=3pt,% +% innerleftmargin=3pt,innerrightmargin=3pt]{mdlooseframe} + + +% \usepackage[normalem]{ulem} + + +% \usepackage{comment} +% \excludecomment{testing} + +% \usepackage{morefloats} +% \usepackage{marginfix} + +\usepackage{tocloft} +\setlength{\cftsubsecnumwidth}{3em} +\setlength{\cftsubsubsecindent}{2.8em} +\setlength{\cftsubsubsecnumwidth}{4em} +\setlength{\cftbeforesubsecskip}{1ex} + +% \usepackage{titletoc} + + + + +\usepackage{titleps} + +\newpagestyle{pageheadfoot}{ + \headrule + \sethead{\pkg{\mypackagename}}{}{\thepage} +% \renewcommand{\makefootrule}{\rule[2.5ex]{\linewidth}{.4pt}} + \setfoot{}{}{} +} + +\pagestyle{pageheadfoot} + + + + +\newcommand*{\lmacro}[1]{\textbackslash#1} +\newcommand*{\cmds}[1]{\texttt{#1}} +\newcommand*{\env}[1]{\texttt{#1}} +\newcommand*{\pkg}[1]{\textsf{#1}} +\newcommand*{\acro}[1]{\textsc{\lowercase{#1}}} + + + + + + + + +% % \newcommand*{\tikz}{Ti\textit{k}z} +% \newcommand*{\htmlfive}{\acro{HTML}\oldstylenums{5}} +% \newcommand*{\cssthree}{\acro{CSS}\oldstylenums{3}} +% +% \newcommand*{\goesto}{$\Rightarrow$} + +% \newenvironment{docsidebar}[1][] +% {\par\addvspace{1.5ex}% +% \hfill\minipage{.9\linewidth}\raggedright#1\smallskip\hrule\medskip} +% {\smallskip\hrule\endminipage\hspace*{\fill}\par\addvspace{1.5ex}} + + + + + +% \setlength{\marginparsep}{1em} +% \setlength{\marginparpush}{2ex} +\setlength{\parindent}{0em} +\setlength{\parskip}{2ex} +\setlength{\IndexMin}{40ex} + + + + + +\usepackage{\mypackagename} + + +\usepackage[pdftex,bookmarks=true,hidelinks,% +colorlinks,linkcolor=mylinkcolor,urlcolor=myurlcolor,% +pageanchor=true,hyperindex=true, +]{hyperref} + +\hypersetup{% +pdfinfo={% +Title={The LaTeX \mypackagename\ package},% +Author={Brian Dunn},% +Subject={Describe additional object types in dtx source files.]},% +Keywords={LaTeX, dtx, source, DescribeMacro}% +}} + + +\usepackage{cleveref} + + +\setcounter{IndexColumns}{2} + +\DisableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{\mypackagename.dtx} +\end{document} +% +%</driver> +% +% \fi +% +% \iffalse +%<*package> +% \fi +% +% \CheckSum{369} +% +% \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.10}{2016/12/08}{\ 2016/12/08 Initial ver} + + + + +% \GetFileInfo{\mypackagename.sty} +% +% \DoNotIndex{\newcommand,\renewcommand,\addtocounter,\begin,\end,\begingroup,\endgroup} +% \DoNotIndex{\global,\ifbool,\ifthenelse,\isequivalentto,\let} +% \DoNotIndex{\booltrue,\boolfalse} +% \expandafter\DoNotIndex\expandafter{\detokenize{\(,\),\,,\\,\#,\$,\%,\^,\_,\~,\ ,\&,\{,\}}} +% +% +% \thispagestyle{empty} +% \begin{center} +% \vfill +% ^^A \includegraphics[width=.3\linewidth]{\mypackagename_logo.pdf} +% \vfill +% {\Huge The \LaTeX\ \pkg{\mypackagename} Package} +% \bigskip +% +% \fileversion{} --- \filedate +% +% \bigskip +% +% {\small\copyright{} 2016} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com} +% +% \vspace{.5in} +% +% {\Large \textup{\quicksummary}} +% +% +% +% ^^A % \title{The \pkg{keyfloat} package\thanks{This document +% ^^A % corresponds to \pkg{keyfloat}~\fileversion, +% ^^A % dated \filedate.}} +% ^^A % \author{{\small\copyright{} 2016} Brian Dunn\\ \small \texttt{bd@BDTechConcepts.com}} +% ^^A % \published{} +% ^^A % \subtitle{\textup{Subtitle}} +% ^^A % +% ^^A % \maketitle +% +% \vfill +% +% +% \begin{abstract} +% \noindent +% The \pkg{doc} package includes tools for describing macros and environments +% in \LaTeX\ source |dtx| format. +% The \pkg{dtxdescribe} package adds additional tools for describing +% booleans, lengths, counters, keys, packages, classes, options, +% files, commands, arguments, and other objects. +% +% Each item is given a margin tag similar to \cs{DescribeEnv}, +% and is listed in the index by itself and also by category. +% Each item may be sorted further by an optional class. +% All index entries except code lines are hyperlinked. +% +% Descriptions are best accompanied by examples, so the +% environment \env{dtxexample} is provided. +% Contents are displayed verbatim along with a caption and cross-referencing. +% They are then \cs{input} and executed, and the result is shown. +% \end{abstract} +% +% \vfill +% +% \end{center} +% \clearpage +% +% \tableofcontents +% \listofdtxdexamples +% \listoffigures +% ^^A \listoftables +% +% +% +% \clearpage +% +%^^A \part{dtxdescribe.sty} +% +% \section{Introduction} +% +% The \pkg{doc} package provides \cs{DescribeMacro} and \cs{DescribeEnv} +% to help document new macros and environments. +% Each generates a heading in the documentation, to which \cs{marg}, +% \cs{oarg}, and \cs{parg} may be added to identify arguments to be +% passed to the new object. +% Their names are added to the margin, and index entries are added, +% as well as group of entries for environments. +% +% \pkg{dtxdescribe} extends this concept to include a number of +% additional objects, such as booleans and keys. +% To help identify what is being described in the margin, small tags +% added to the name, such as ``Env'', ``Bool'', or ``Key''. +% These new objects are also listed in the index with the same tag +% shown after their names, and also by group. +% Optional classes may be used to further categories index entries. +% +% Modifications have been made to interact with \pkg{hyperref} to +% provide hyper links for regular index entries as well as the new +% \cs{Describe} entries. +% +% Additional macros are provided to generate colored margin tags and +% warnings, and a new |dtxexample| environment demonstrates code examples. +% +% This documentation and its index show examples of these macros in use. +% +% While the index may appear to be overkill for a small package, +% \margintag{Too much!} +% keep in mind that it includes a number of fictional entries from the examples. +% Extensive cross-referencing can be useful for larger works. +% And, of course, you need not cross-reference everything! + + +% \clearpage +% \section{Using \pkg{dtxdescribe}} + +% Place |\usepackage{dtxdescribe}| in the |.dtx| file's driver section: +% \begin{verbatim} +% %<*driver> +% \documentclass{ltxdoc} +% ... +% \usepackage{lmodern} +% ... +% \usepackage{dtxdescribe} +% ... +% \usepackage{packagename} % the name of your new package +% ... +% \usepackage[...]{hyperref} +% \usepackage{...]{cleveref} +% ... +% %</driver> +% \end{verbatim} + +% Various objects inside the |dtx| file may be described with \cs{DescribeBoolean}, +% \cs{DescribeLength}, \cs{DescribeCounter}, and related macros, +% similar to the already-familiar \cs{DescribeMacro} and \cs{DescribeEnv}. + +% Optional ``classes'' may be assigned to the objects being described, including the new verisons +% of \cs{DescribeMacro} and \cs{DescribeEnv}. +% These classes are printed in the margin tag and index entry for each item, +% and also generate additional index entries sorted by class. This is +% especially useful for key/value sets, where several sets may appear in the same +% document. +% +% The margin tag is not printed if +% \margintag{inside a float} +% the \cs{Describe} macros are used inside a float such as a table, +% but the index entries are still made. +% +% |\margintag{text}| may be used to place a colored tag in +% \margintag{\cs{margintag} text} +% the margin to summarize paragraph +% contents or draw attention to an index destination. +% +% |\watchout[optional text]| may be used to place a red warning sign +% \watchout[\cs{watchout} text] +% in the margin, along with optional text. +% +% The \env{dtxexample} environment may be used to typeset and execute small pieces of \LaTeX\ code +% as examples of its use. Optional cross-referencing notes may be used to refer to any +% example float being generated. + + + +% \clearpage +% \section{The Macros, and the \env{dtxexample} Environment} + + + +% \subsection{Pre-existing Macros} +% +% \DescribeMacro{\DescribeMacro} \oarg{class} \marg{\cs{name}} +% +% The pre-existing macro from the \pkg{doc} is redefined to +% allow hyperlinked index entries and an optional class. +% A margin tag is created and an index entry is made. +% When the optional class is used, it is displayed in front of +% the margin tag, and is used to group an index entry by +% macro name and another index entry by class. +% An example would be to describe +% the float creation and caption setup for a new class of float, +% such as the |dtxexample| float and the example ``photograph'' float +% both found in the index for this document. +% See \cref{ex:macro} on \cpageref{ex:macro} for examples. +% +% \DescribeMacro{\DescribeEnv} \oarg{class} \marg{environment name} +% +% The pre-existing macro from the \pkg{doc} is redefined to +% allow hyperlinked index entries, and also to place +% an `Env' tag in front of the name in the margin. +% See \cref{ex:environment} on \cpageref{ex:environment}. +% + + +% \subsection{Macro Arguments} +% +% The \cs{Describe}\rule{.25in}{.4pt} macros +% may be followed by \cs{marg}, \cs{oarg}, and \cs{parg} to +% describe arguments passed to the macros. +% +% \DescribeMacro{\marg} \marg{text} +% +% Shows a mandatory argument for a macro or environment. +% +% The results looks like \marg{mandatory}. +% + +% \DescribeMacro{\oarg} \marg{text} +% +% Shows an optional argument for a macro or environment. +% +% The results looks like \oarg{optional}. +% + +% \DescribeMacro{\parg} \marg{text} +% +% Used for ``picture'' arguments, such as coordinates. +% +% The result looks like \parg{coordinate}. +% + +% \DescribeMacro{\DescribeArgument} \oarg{class} \marg{argument} +% +% May be used to describe actions taken when given certain macro arguments. +% These will be given an `Arg' margin tag and will appear in the index. +% The |class| may be used to categorize arguments by their macro or environment name. +% See \cref{ex:arguments} on \cpageref{ex:arguments}. + + +% \subsection{Common \LaTeX\ Elements} +% +% See \cref{ex:common} on \cpageref{ex:common}. +% +% \DescribeMacro{\DescribeBoolean} \oarg{class} \marg{name} +% +% Describes a boolean. Given a `Bool' tag in the margin and index. +% +% +% \DescribeMacro{\DescribeLength} \oarg{class} \marg{name} +% +% Describes a length. Given a `Len' tag in the margin and index. +% +% +% \DescribeMacro{\DescribeCounter} \oarg{class} \marg{name} +% +% Describes a counter. Given a `Ctr' tag in the margin and index. +% +% +% \DescribeMacro{\DescribeKey} \oarg{class} \marg{name} +% +% Describes a key. Given a `Key' tag in the margin and index. +% The |class| may be used to categorize keys by their kev/value group. +% See \cref{ex:key} on \cpageref{ex:key}. + + +% \subsection{References to External Packages and Classes} +% +% \DescribeMacro{\DescribePackage} \oarg{class} \marg{name} +% +% Describes a package. Given a `Pkg' tag in the margin and index. +% +% +% \DescribeMacro{\DescribeClass} \oarg{class} \marg{name} +% +% Describes a \LaTeX\ class. Given a `Cls' tag in the margin and index. +% +% +% \DescribeMacro{\DescribeOption} \oarg{class} \marg{name} +% +% Describes a \LaTeX\ package or class option. Given an `Opt' tag in the margin and index. +% +% + +% \subsection{Files, Programs, and Commands} +% +% \DescribeMacro{\DescribeFile} \oarg{class} \marg{name} +% +% Describes an operating-system file. Given a `File' tag in the margin and index. +% The filename may have underscores. +% +% +% \DescribeMacro{\DescribeProgram} \oarg{class} \marg{name} +% +% Describes an operating-system program. Given a `Prog' tag in the margin and index. +% The program name may have underscores. +% +% +% \DescribeMacro{\DescribeCommand} \oarg{class} \marg{name} +% +% Describes an operating-system command. Given a `Cmd' tag in the margin and index. +% The command name may have underscores. +% +% + + +% \subsection{Other Source Objects} +% +% \DescribeMacro{\DescribeObject} \oarg{class} \marg{name} +% +% Describes an arbitrary programming object, such as a color definition or caption setup. +% A margin tag and index entry are created with \cs{ttfamily} type. +% When a class is used, it is pre-pended to the margin tag, appended to the +% index entry, and a second index entry is created grouped by class. +% If a macro name is to be described, use \cs{DescribeMacro} instead. +% See \cref{ex:object} on \cpageref{ex:object}. +% +% +% \DescribeMacro{\DescribeOther} \oarg{class} \marg{name} +% +% Describes an arbitrary non-programming object, such as a license agreement +% or credits. A margin tag and index entry are created in roman type. +% When a class is used, it is pre-pended to the margin tag, appended to the +% index entry, and a second index entry is created grouped by class. +% See \cref{ex:other} on \cpageref{ex:other}. + + +% \subsection{Additional Tags} +% +% +% \DescribeMacro{\margintag} \marg{text} +% +% Creates a colored margin tag. +% May be used to identify the topic of a paragraph or the destination of +% an arbitrary index entry. + +% +% \DescribeMacro{\watchout} \oarg{text} +% +% Creates a red margin tag with a warning sign and +% optional text. May be used to warn the reader of special instructions, etc. + + +% \subsection{\env{dtxexample} Environment} +% +% \DescribeEnv{dtxexample} * \oarg{Notes/cross-references} \marg{caption \& label} +% +% The \env{dtxexample} environment is useful for demonstrating a piece of \LaTeX\ code. +% The example is a simulated float with its own caption and optional label, +% along with optional notes and/or cross-referencing commands. +% The contents of the \env{dtxexample} environment are printed verbatim, then +% loaded and executed as \LaTeX\ code, showing the results just below the printed code. +% In the case of float commands, the floats are generated as expected somewhere nearby, +% and should be given their own labels. +% References to the float's labels may be placed in the optional argument to +% the \env{dtxexample} environment, and will be printed below the code. +% +% +% The unstarred version places the code inside a +% minipage, forbidding a page break in the middle of the code listing. The starred +% version does not use a minipage. This is required when the code is too large to fit +% on a single page. +% +% See \cref{ex:dtxexample} for a demonstration of how \env{dtxexample} works. + + + +% \clearpage +% +% \section{Examples} + + +% \begin{dtxexample}{Macros\label{ex:macro}} +% \DescribeMacro{\mymacro} \oarg{optional} \marg{mandatory} +% A typical macro definition. +% +% \DescribeMacro[photograph]{\DeclareFloatingEnvironment} +% Create a photograph float. \bigskip + +% \DescribeMacro[photograph]{\captionsetup} +% Caption settings for a photograph float. + +% \DescribeMacro[photograph]{\cnameref} +% \pkg{cleveref} name for the photograph float. +% \end{dtxexample} +% +% +% The optional class is used to label and group tags and index entries. +% See this document's index entries for examples of this ``photograph'' +% class and the \env{dtxexample} class of macros. +% +% The re-defined \cs{DescribeMacro}, \cs{DescribeEnv}, and +% all the following macros create hyperlinked index entries, +% \margintag{hyperlinks} +% along with regular uses of \cs{index}. +% +% +% \clearpage +% +% \begin{dtxexample}{Environment\label{ex:environment}} +% \DescribeEnv{myenvironment} \marg{argument} Short description. +% \end{dtxexample} +% +% The re-defined \cs{DescribeEnv} adds an `Env' tag to the margin, +% \margintag{add'l tags} +% and adds ``(environment)'' to its own index entry. +% Note that environments and all the other new objects +% defined\margintag{index groups}\index{index>by group}\index{group of objects} +% by this package each receives two index entries, one by name, +% and one grouped with others of its kind. + +% \Cref{ex:environment} shows descriptive text +% \watchout[too much text] +% on the same line as the \cs{DescribeEnvironment}. +% For macros and environments with many arguments after the name, +% it may be better to place any additional text in a following paragraph. + +% \begin{dtxexample}{Second Environment} +% \DescribeEnv[kindofenvironment]{otherenvironment} +% \oarg{opt args} \parg{coordinates} A description. +% \end{dtxexample} +% +% The \env{otherenvironment} will be indexed by itself and also +% with \env{myenvironment} under the index entry ``environments'', +% and also under the class |kindofenvironment|. +% +% +% \clearpage +% +% \begin{dtxexample}{Booleans and Counters\label{ex:common}} +% \DescribeBoolean[examples]{sampleboolean} Some description. +% +% \DescribeCounter[examples]{samplecounter} Some description. +% \end{dtxexample} +% +% Most of the new \cs{Describe}\rule{.25in}{.4pt} macros behave like the +% new \cs{DescribeEnv}, placing a tag in the margin, an index entry +% by name, and another index entry by group. +% + + +% \begin{dtxexample}{Lengths\label{ex:length}} +% \DescribeLength[photograph]{\photowidth} Some description. +% \end{dtxexample} + +% Lengths have a leading backslash, but are otherwise described +% the same as the rest of the objects. + + +% \clearpage +% +% +% \begin{dtxexample}{Packages, Classes, and Options} +% \DescribePackage[examples]{samplepackage} +% About a \LaTeX\ package. +% +% \DescribeClass[examples]{sampleclass} +% About a \LaTeX\ class. +% +% \DescribeOption[examples]{sampleoption} +% About an option for a package or class. +% \end{dtxexample} +% +% +% \begin{dtxexample}{Files, Commands, and Programs\label{ex:file}} +% \DescribeFile[bigfiles]{really_big_file.txt} Some description. +% +% \DescribeFile[bigfiles]{another_big_file.txt} Some description. +% +% \DescribeFile{lone_file.txt} Some description. +% +% \DescribeCommand{OS_command} An operating-system command. +% +% \DescribeProgram{program_name} An operating-system program. +% \end{dtxexample} +% +% Filenames, program names, and command names may have underscores, +% such as tested here. +% A class is used to group ``bigfiles'' together in the index. + + +% \clearpage +% +% \begin{dtxexample}{Keys\label{ex:key}} +% \DescribeKey[groupofkeys]{firstkey} About the first key +% of the |groupofkeys| set. +% +% \DescribeKey[groupofkeys]{secondkey} About the second key +% of |groupofkeys|. +% +% \DescribeKey[examples]{samplekey} About some key of |otherkeys|. +% +% \DescribeKey[examples]{sampletwokey} About another key of |otherkeys|. +% +% \DescribeKey{lonekey} A key without a class. +% \end{dtxexample} +% +% See the index key groups. +% +% +% \clearpage +% +% \begin{dtxexample}{Arguments\label{ex:arguments}} +% \DescribeArgument[figure]{[H]} +% What happens when a figure is [H]ere. +% +% \DescribeArgument[figure]{[M]} +% What happens when a figure is in the [M]argin. +% +% \DescribeArgument[\cs{mymacro}]{bold} +% What happens when \cs{mymacro} is given the |bold| argument. +% \end{dtxexample} +% +% Arguments behave like keys, and may have an optional class to +% identify their macro or environment, and group their entries +% in the index. +% +% Note the need to use |\cs{mymacro}| for the macro's name. +% \watchout[macro names] +% +% +% \clearpage +% +% \begin{dtxexample}{Object\label{ex:object}} +% \DescribeObject[color]{somecolor} +% The color of something. +% +% \DescribeObject[color]{othercolor} +% The other color. +% \end{dtxexample} +% +% Describes an arbitrary programming object, using \cs{ttfamily} text. + + +% \begin{dtxexample}{Other\label{ex:other}} +% \DescribeOther{license agreement} +% The following is the fictional license agreement: +% +% \DescribeOther{Before \env{myenvironment}} +% Actions to be done \cs{BeforeBeginEnvironment}. +% +% \DescribeOther[otherclass]{Other Item} About the other item. +% +% \DescribeOther[otherclass]{Additional Item} About the add'l item. +% \end{dtxexample} +% +% Describes an arbitrary non-programming object, using roman text. + +% \clearpage +% +% +% \begin{dtxexample}[See \cref{fig:afigure}] +% {\env{dtxexample}\label{ex:dtxexample}} +% \begin{figure} +% \centering\fbox{Contents of the figure.} +% \caption{A Figure}\label{fig:afigure} +% \end{figure} +% \end{dtxexample} + +% \Cref{ex:dtxexample}, typeset above, was created with the following code: +% \begin{verbatim} +% \begin{dtxexample}[See \cref{fig:afigure}] +% {\env{dtxexample}\label{ex:dtxexample}} +% \begin{figure} +% \centering\fbox{Contents of the figure.} +% \caption{A Figure}\label{fig:afigure} +% \end{figure} +% \end{dtxexample} +% \end{verbatim} +% +% When the example was created: +% \begin{enumerate} +% \item The ``float'' of type |example| was created, +% with the caption ``|dtxexample|'' +% and the label |ex:dtxexample|, which points to \cref{ex:dtxexample}. +% \item The code was displayed verbatim. +% \item The code was written to the file |ex_cut.tex|. +% \item The code was \cs{input} from |ex_cut.tex|. +% \item Executing the code created the figure with +% caption ``A Figure'' and label |fig:afigure|, which +% points to \cref{fig:afigure}. +% \item The cross-reference to the figure was shown on the optional display line +% by the optional argument to \env{dtxexample}. +% \item The starred form of \env{dtxexample} was used to create the closing +% rule below the code, since a float was being generated and nothing followed the +% code inline. An unstarred version would have created an extra rule. +% \end{enumerate} + + + + + +% \clearpage +% +% \section{Usage Notes} +% +% \begin{description} +% +% \item[Placement of \cs{Describe} macros:] +% Typically \LaTeX\ macro and environment definitions are enclosed in +% \env{macro} and \env{environment} environments at their place in the source code. +% \cs{DescribeMacro} and \cs{DescribeEnv} would be used elsewhere in the manual +% to describe how to use the code. \cs{DescribeBoolean} and such might be at +% their place in the source code, unless they are worthy of discussion for the +% end-user, in which case they should be in the ``User's Manual'' section of the +% document.\footnote{Future versions may include \cs{DeclareBoolean} for +% use at the point where the boolean is defined, creating an index entry +% with a code line number, and \cs{DescribeBoolean} with a page number index entry for +% the related discussion in the User's Manual portion of the document.} +% It may be useful to use \cs{DeclareBoolean} and friends both at the code location +% and also in the User's Manual section. +% +% \item[Extra spaces:] When placing multiple \cs{Describe}, \cs{index}, \cs{margintag}, and +% \cs{watchout} macros +% together, care must be taken to avoid extra space in the printed text where +% these macros occur. Try to place the first one directly connected to a word, +% and the others may follow on the next line if necessary. +% \begin{verbatim} +% text text text\margintag{A comment.}\index{An entry} +% \index{Another entry} +% more inline text text text +% \end{verbatim} +% +% \item[\cs{margintag} placement:] To have the margin tag appear next to the first +% line of a paragraph, place the \cs{margintag} or \cs{watchout} +% somewhere after the first few words +% in the paragraph. The \cs{margintag} may be on its own line, +% and the rest of the paragraph may follow on the next line. +% If too many words are printed before the \cs{margintag}, +% the words may wrap to the next line before the tag occurs. +% +% \item[Margin tag overlap:] To keep margin tags in proper alignment, +% use a new paragraph or multiple lines +% between \cs{margintag}, \cs{watchout}, or \cs{Declare} macros +% +% \item[\cs{Describe} inside floats:] When these macros are used inside a float, +% \margintag{missing tags}\index{margin tag missing} +% the margin tag is supressed (there is no margin in a float), but the +% index entries are still created. +% +% \end{description} + + + + + +% \clearpage + +% \StopEventually{\PrintChanges\PrintIndex} + + + +% \section{Code} + + +% \subsection{Required Packages} +% +% \DescribePackage{etoolbox} v2.6 or later +% for \cs{BeforeBeginEnvironment}, \cs{AfterEndEnvironment} +% \begin{macrocode} +\RequirePackage{etoolbox}[2011/01/03]% +% \end{macrocode} + +% \DescribePackage{xparse} Used for the examples. +% \begin{macrocode} +\RequirePackage{xparse} +% \end{macrocode} + +% \DescribePackage{xifthen} Used for the examples. +% \begin{macrocode} +\RequirePackage{xifthen} +% \end{macrocode} +% +% + + +% \DescribePackage{xcolor} Used for the examples. +% \begin{macrocode} +\RequirePackage{xcolor} +\definecolor{myurlcolor}{rgb}{0,0,.7} +\definecolor{mylinkcolor}{rgb}{.7,0,0} +% \end{macrocode} + + +% \DescribePackage{caption} Used for the examples. +% \begin{macrocode} +\RequirePackage{caption} +% \end{macrocode} + + +% \DescribePackage{newfloat} Used for the examples. +% \begin{macrocode} +\RequirePackage{newfloat} +% \end{macrocode} + + +% \DescribePackage{fancyvrb} Used for the examples. +% \begin{macrocode} +\RequirePackage{fancyvrb} +% \end{macrocode} + + +% \DescribePackage{xstring} Used for \cs{StrSubstitute} for \cs{DescribeFile}. +% \begin{macrocode} +\RequirePackage{xstring} +% \end{macrocode} + + + + +% ^^A Several versions of the \warningsign symbol: + +% ^^A This version relies on the presence of the fourier font: +% ^^A \newcommand*{\TakeFourierOrnament}[1]{{% +% ^^A \fontencoding{U}\fontfamily{futs}\selectfont\char#1}} +% +% ^^A \newcommand*{\warningsign}{\TakeFourierOrnament{66}} + +% ^^A from: http://tex.stackexchange.com/questions/159669/how-to-print-a-warning-sign-triangle-with-exclamation-point +% ^^A This version copy/pastes extraneous characters: +% ^^A \newcommand\warningsign{% +% ^^A \makebox[1em][c]{% +% ^^A \makebox[0pt][c]{\raisebox{.1em}{\textbf{\tiny!}}}% +% ^^A \makebox[0pt][c]{$\bigtriangleup$}}}% + + +% \DescribePackage{pict2e} +% \begin{macrocode} +\RequirePackage{pict2e} +\setlength{\unitlength}{1pt} +% \end{macrocode} + +% \begin{macro}{\warningsign} Prints an exclamation point inside a triangle. +% +% Creates a warning sign without relying on the presence of the fourier font. +% During copy/paste, this shows up as a simple exclamation point. +% \begin{macrocode} +\newcommand*{\warningsign}{% +\begin{picture}(10,9) +\put(4,1){\scriptsize!} +\put(0,0){\line(500,866){5}} +\put(10,0){\line(-500,866){5}} +\put(0,0){\line(1,0){10}} +\end{picture} +} +% \end{macrocode} +% \end{macro} + + + +% \subsection{Support Macros} + + +% \begin{macrocode} +\renewcommand*{\PrintEnvName}[1] + {\strut{\scriptsize{}Env}\quad\MacroFont#1\ } +% \end{macrocode} + + + + +% +% \begin{macro}{\DTXD@printtype} \marg{text} +% +% Used to print the object class in the margin: +% \begin{macrocode} +\newcommand*{\DTXD@printtype}[1] + {\raggedleft\strut{\scriptsize#1}\quad\MacroFont} +% \end{macrocode} +% \end{macro} + + + + +% \begin{macro}{\usage} \marg{text} +% +% Allow hyperlinks in the ``usage'' index entries: +% \begin{macrocode} +\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\DTXD@origwrindex} Used to bypass \pkg{hyperref} index modifications. +% \begin{macrocode} +\let\DTXD@origwrindex\@wrindex +% \end{macrocode} +% \end{macro} + + + +% \begin{macro}{\DTXD@margintag} \marg{class} \marg{name} \marg{margin tag} +% +% Creates the margin tag for the object being described. +% +% The |class| is used to sub-categories keys into their key/value groups. +% +% \begin{macrocode} +\newcommand*{\DTXD@margintag}[3]{% +\@ifundefined{@captype}{% not float? +\leavevmode% +\marginpar{% +\DTXD@printtype{% +#3% margintag +\ifblank{#1}{}{ \texttt{#1}}% class +}% Desc@Type +\texttt{#2}% name +}% marginpar +}{}% not float? +} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\DTXD@index} +% \marg{class} \marg{name} \marg{margin tag} \marg{index tag} \marg{main/usage} +% +% Creates the index entries for the object being described, where +% name has no backslash or underscore. +% +% The |class| is used to sub-categories keys into their key/value groups. +% |main| prints code lines in the index, and |usage| prints page numbers. +% +% \begin{macrocode} +\newcommand*{\DTXD@index}[5]{% +% \end{macrocode} +% The |makeindex| program allows each index entry to call a macro by appending +% a vertical bar and a macro name to each entry. +% \pkg{hyperref} adds a call by \cs{hyperpage} to each index entry, by appending +% the phrase \verb+|hyperpage+ to the entry in the |.idx| file. +% The \pkg{doc} package uses the same mechanism to +% distinguish between code line entries (\verb+|main+) and +% references to the use of a macro (\verb+|usage+). The problem is that |makeindex| +% can only handle one macro call, but \pkg{hyperref} tries to append its \verb+|hyperpage+ +% to the already-existing \verb+|usage+ or \verb+|main+. +% +% The solution used for \pkg{dtxdescribe} is to allow \pkg{hyperref} to modify all +% regular index entries, but use the original definition of \cs{@wrindex} +% for the \cs{Describe}\rule{.25in}{.4pt} macros, before \pkg{hyperref} modified it. +% Then, the \cs{usage} macro, defined above, manually adds the hyperlink. +% +% Below, \cs{@bsphack} and \cs{@esphack} seem to be required for \cs{@wrindex} to work. +% \cs{ignorespaces} is used in addition because \cs{Declare} and \cs{index} entries often +% come in groups. +% \begin{macrocode} +\@bsphack% +\begingroup% +\DTXD@origwrindex{% +% \end{macrocode} +% Index by name: +% +% Write the name, the formatted name, the index tag, and the class: +% \begin{macrocode} +#2\actualchar{\protect\ttfamily#2} % name +(#4)% index tag +\ifblank{#1}{}{ [#1]}% class +\encapchar #5}% +% \end{macrocode} +% Index by tag and class: +% +% Write the tag and class as a group, under which is the name and the formatted name. +% \begin{macrocode} +\begingroup% +\DTXD@origwrindex{% +#4s:\levelchar% index tag +\ifblank{#1}{}{[#1]:\levelchar}% class +#2\actualchar{\protect\ttfamily#2}% name +\encapchar #5}% +% \end{macrocode} +% Possibly index by class and name: +% \begin{macrocode} +\ifblank{#1}{}{% class given +\begingroup% +\DTXD@origwrindex{% +#1\actualchar[#1]:\levelchar% class +#2\actualchar{\protect\ttfamily#2} % name +(#4)% index tag +\encapchar #5}% +}% class given +% \@esphack% +\@esphack% +\ignorespaces% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\DTXD@margintagindex} +% \marg{class} \marg{name} \marg{margin tag} \marg{index tag} \marg{main/usage} +% +% Creates the margin tag and the index entries. +% The |class| is used to sub-categories keys into their key/value groups. +% \begin{macrocode} +\newcommand*{\DTXD@margintagindex}[5]{% +% \@bsphack% +% \end{macrocode} +% The margin tag and the name: +% \begin{macrocode} +\DTXD@margintag{#1}{#2}{#3}% +% \end{macrocode} +% The index entries: +% \begin{macrocode} +\DTXD@index{#1}{#2}{#3}{#4}{#5}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DTXD@macroname} \marg{control sequence} +% +% Given a control sequence such as \cs{name}, prints its name without the backslash. +% +% From: +% \href{http://tex.stackexchange.com/questions/42318/removing-a-backslash-from-a-character-sequence} +% {http://tex.stackexchange.com/questions/42318/\\ +% \hspace*{.5in}removing-a-backslash-from-a-character-sequence} +% \begin{macrocode} +\begingroup\lccode`\|=`\\ +\lowercase{\endgroup\def\removebs#1{\if#1|\else#1\fi}} +\newcommand*{\DTXD@macroname}[1]{\expandafter\removebs\string#1} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\DTXD@verbatimcmd} \marg{\cs{name}} +% +% While printing to the index file, +% prints the \cs{name} verbatim. +% From \cs{SpecialIndex} in the \pkg{doc} package. +% \begin{macrocode} +\newcommand*{\DTXD@verbatimcmd}[1]{% +\string\verb\quotechar*\verbatimchar\string#1\verbatimchar% +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\DTXD@cmdmargintagindex} +% \marg{class} \marg{name} \marg{margin tag} \marg{index tag} \marg{main/usage} +% +% Creates the margin tag and index entries where name is a \cs{macro}. +% +% \begin{macrocode} +\newcommand*{\DTXD@cmdmargintagindex}[5]{% +\@bsphack% +% \end{macrocode} +% Create a margin tag with the name of the macro: +% \begin{macrocode} +\@ifundefined{@captype}{% not float? +\leavevmode% +\marginpar{% +\DTXD@printtype{% +#3% margin tag +\ifblank{#1}{}{ \texttt{#1}}% class +}% Desc@Type +\cmd{#2}% name +}% marginpar +}{}% not float? +% \end{macrocode} +% +% Create an index entry sorted by the name without its leading backslash, +% followed by the macro name with the backslash, and the tag. +% Prepend with the class if given. +% +% Write (class):>name=csname (indextag)\verb+|usage+ +% \begin{macrocode} +\begingroup% +\DTXD@origwrindex{% +\ifblank{#1}{}{#1\actualchar[#1]:\levelchar}% class +\DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2} % name +(#4)% index tag +\encapchar #5}% +% \end{macrocode} +% Create an index entry grouped by the tag, +% then printed and sorted by the macro name with the backslash, and the tag. +% +% Write indextag:>(class):>csname\verb+|usage+ +% \begin{macrocode} +\begingroup% +\DTXD@origwrindex{% +#4s:\levelchar% index tag +\ifblank{#1}{}{[#1]:\levelchar}% class +\DTXD@verbatimcmd{#2}% name +\encapchar #5}% +\@esphack% +\ignorespaces% +} + +% \end{macrocode} +% \end{macro} +% + + +% \subsection{Pre-existing Macros} + +% \begin{macro}{\DescribeMacro} \oarg{class} \marg{\cs{name}} +% +% Redefined to allow hyperlinked index entries and an optional class: +% \begin{macrocode} +\renewcommand*{\DescribeMacro}[2][]{% +\@bsphack% +% \end{macrocode} +% Create the margin tag with the macro's name: +% \begin{macrocode} +\@ifundefined{@captype}{% not float? +\leavevmode% +\marginpar{% +\raggedleft% +\ifblank{#1}{}{{\scriptsize#1} }% class +\cmd{#2}% name +}% marginpar +}{}% not float? +% \end{macrocode} +% Write the index sorted by the name without the backslash, +% followed by the actual name with the backslash. +% Append the class if given. +% +% Write name=csname>(class)\verb+|usage+ +% \begin{macrocode} +\begingroup% +\DTXD@origwrindex{% +\DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2}% name +\ifblank{#1}{}{\levelchar[#1]}% class +\encapchar usage}% +% \end{macrocode} +% Only if a class was given: +% \begin{macrocode} +\ifthenelse{\isempty{#1}}% +{}% no class +{% class given +% Again, and prepend the class: +% +% Write class=(class):>name=csname\verb+|usage+ +% \begin{macrocode} +\begingroup% +\DTXD@origwrindex{% +#1\actualchar[#1]:\levelchar% +\DTXD@macroname{#2}\actualchar\DTXD@verbatimcmd{#2}% +\encapchar usage}% +}% class given +\@esphack% +\ignorespaces% +} +% \end{macrocode} +% \end{macro} + + + +% \begin{macro}{\DescribeEnv} \oarg{class} \marg{environment name} +% +% Redefined to allow hyperlinked index entries: +% \begin{macrocode} +\renewcommand*{\DescribeEnv}[2][] + {\DTXD@margintagindex{#1}{#2}{Env}{environment}{usage}} +% \end{macrocode} +% \end{macro} + + + + +% \subsection{New Describe Macros} + + + + + +% \begin{macro}{\DTX@filename} Stores the filename with a sanitized underscore. +% \begin{macrocode} +\newcommand*{\DTXD@filename}{} +% \end{macrocode} +% \end{macro} + + +% \begin{macro}{\DTXD@filemarginparindex} +% \marg{class} \marg{name} \marg{margin tag} \marg{index tag} \marg{main/usage} +% +% The name may have underscores. +% \begin{macrocode} +\newcommand*{\DTXD@filemarginparindex}[5]{% +% \end{macrocode} +% Create a detokenized version of the filename\dots +% \begin{macrocode} +\renewcommand{\DTXD@filename}{\detokenize{#2}}% +% \end{macrocode} +% \dots\ then replace any underscores with a detokenized |\_|, +% which will print as an underscore when read back from the index file: +% \begin{macrocode} +\StrSubstitute{\DTXD@filename}% +{\detokenize{_}}{\detokenize{\_}}[\DTXD@filename]% +% \end{macrocode} +% The original filename is printed in the margin. +% Any underscore characters have already been disabled +% by the \cs{catcode} change. +% \begin{macrocode} +\DTXD@margintag{}{#2}{#3}% +% \end{macrocode} +% The detokenized and sanitized version is sent to the index file: +% \begin{macrocode} +\DTXD@index{#1}{\DTXD@filename}{#3}{#4}{#5}% +% \end{macrocode} +% End the group with the disabled underscore, +% and clean up the extra space from the \cs{catcode} command: +% \begin{macrocode} +\endgroup% +\ignorespaces% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\DTXD@DescribeFile} \oarg{class} \marg{name} +% +% The name may have underscores. +% \begin{macrocode} +\newcommand*{\DTXD@DescribeFile}[2][]{% +\DTXD@filemarginparindex{#1}{#2}{File}{file}{usage}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DescribeFile} \marg{name} +% +% The underscore character is temporarily disabled, then +% the name is passed directly to \cs{DTXD@DescribeFile}. +% \begin{macrocode} +\newcommand*{\DescribeFile}{% +\begingroup\catcode`\_=12 \DTXD@DescribeFile% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DTXD@DescribeProgram} \oarg{class} \marg{name} +% +% The name may have underscores. +% \begin{macrocode} +\newcommand*{\DTXD@DescribeProgram}[2][]{% +\DTXD@filemarginparindex{#1}{#2}{Prog}{program}{usage}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DescribeProgram} \marg{name} +% +% The underscore character is temporarily disabled, then +% the name is passed directly to \cs{DTXD@DescribeProgram}. +% \begin{macrocode} +\newcommand*{\DescribeProgram}{% +\begingroup\catcode`\_=12 \DTXD@DescribeProgram% +} +% \end{macrocode} +% \end{macro} +% + + +% \begin{macro}{\DTXD@DescribeCommand} \oarg{class} \marg{name} +% +% The name may have underscores. +% \begin{macrocode} +\newcommand*{\DTXD@DescribeCommand}[2][]{% +\DTXD@filemarginparindex{#1}{#2}{Cmd}{command}{usage}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DescribeCommand} \marg{name} +% +% The underscore character is temporarily disabled, then +% the name is passed directly to \cs{DTXD@DescribeCommand}. +% \begin{macrocode} +\newcommand*{\DescribeCommand}{% +\begingroup\catcode`\_=12 \DTXD@DescribeCommand% +} +% \end{macrocode} +% \end{macro} +% + + + +% +% +% \begin{macro}{\DescribePackage} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribePackage}[2][] + {\DTXD@margintagindex{#1}{#2}{Pkg}{package}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeClass} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribeClass}[2][] + {\DTXD@margintagindex{#1}{#2}{Cls}{class}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeOption} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribeOption}[2][] + {\DTXD@margintagindex{#1}{#2}{Opt}{option}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeArgument} \oarg{class} \marg{name} +% +% The |class| may be used to categorize arguments by their macro or environment name. +% \begin{macrocode} +\newcommand*{\DescribeArgument}[2][] + {\DTXD@margintagindex{#1}{#2}{Arg}{argument}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeBoolean} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribeBoolean}[2][] + {\DTXD@margintagindex{#1}{#2}{Bool}{boolean}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeLength} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribeLength}[2][] + {\DTXD@cmdmargintagindex{#1}{#2}{Len}{length}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeCounter} \oarg{class} \marg{name} +% \begin{macrocode} +\newcommand*{\DescribeCounter}[2][] + {\DTXD@margintagindex{#1}{#2}{Ctr}{counter}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeKey} \oarg{class} \marg{name} +% +% The |class| may be used to categorize keys by their kev/value group. +% \begin{macrocode} +\newcommand*{\DescribeKey}[2][] + {\DTXD@margintagindex{#1}{#2}{Key}{key}{usage}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeObject} \oarg{class} \marg{name} +% +% May be used to describe an arbitrary piece of code. +% Creates a margin tag and index entries with \cs{ttfamily}. +% \begin{macrocode} +\newcommand*{\DescribeObject}[2][]{% +\@ifundefined{@captype}{% not float? +\@bsphack% +\leavevmode\marginpar{\raggedleft{\scriptsize#1} \texttt{#2}}% +}{}% not float? +\ifthenelse{\isempty{#1}} +{\begingroup% +\DTXD@origwrindex{% +#2\actualchar{\protect\ttfamily#2}% +\encapchar usage% +}% +}% +{% +\begingroup% +\DTXD@origwrindex{% +#2\actualchar{\protect\ttfamily#2} [#1]% +\encapchar usage% +}% +\begingroup% +\DTXD@origwrindex{% +#1\actualchar[#1]:\levelchar#2\actualchar{\protect\ttfamily#2}% +\encapchar usage% +}% +}% +\@esphack% +% \ignorespaces% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DescribeOther} \oarg{class} \marg{name} +% +% May be used to describe an arbitrary non-programming object. +% Creates a margin tag and index entries with roman type. +% \begin{macrocode} +\newcommand*{\DescribeOther}[2][]{% +\@ifundefined{@captype}{% not float? +\@bsphack% +\leavevmode\marginpar{\raggedleft{\scriptsize#1} #2}% +}{}% not float? +\ifthenelse{\isempty{#1}} +{% +\begingroup% +\DTXD@origwrindex{#2\encapchar usage}% +}% +{% +\begingroup% +\DTXD@origwrindex{#2 [#1]\encapchar usage}% +\begingroup% +\DTXD@origwrindex{#1\actualchar[#1]:\levelchar#2\encapchar usage}% +}% +\@esphack% +% \ignorespaces% +} +% \end{macrocode} +% \end{macro} + + + +% \subsection{New Margin Tags} + +% \begin{macro}{\margintag} \marg{text} +% +% Prints a colored margin tag. +% \begin{macrocode} +\newcommand{\margintag}[1]{% +\@ifundefined{@captype}{% not float? +\marginpar{\raggedleft\textcolor{blue!70!black}{#1}}% +\ignorespaces% +}{}% not float? +} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\watchout} \oarg{text} +% +% Prints a warning sign and optional text. +% \begin{macrocode} +\newcommand{\watchout}[1][]{% +\@ifundefined{@captype}{% not float? +% \@bsphack% +\marginpar{\hspace*{\fill}% +\textcolor{red!50!black}{\warningsign\normalsize\quad#1}}% +% \@esphack% +\ignorespaces% +}{}% not float? +} +% \end{macrocode} +% \end{macro} +% + + +% \subsection{The \env{dtxexample} Environment} +% +% Also see \cref{ex:dtxexample} on page \cpageref{ex:dtxexample}. +% +% \DescribeFile{ex_cut.tex} Used to store then \cs{input} example code. + +% \DescribeObject[color]{DTXD@examplerulecolor} The color of the middle rule in the dtxexample. +% \begin{macrocode} +\definecolor{DTXD@examplerulecolor}{rgb}{.9,.9,.9} +% \end{macrocode} + + +% \begin{environment}{dtxexample} * \oarg{notes/cross-references} \marg{caption \& label} +% +% Reads the code listing as a verbatim input using +% the \pkg{fancybox} package, then displays the code listing +% as a verbatim output, and also executes the code +% and displays the result. +% A title caption is specified, +% along with optional cross-referencing commands or notes to +% refer to the results. +% The unstarred version places the code inside a minipage, forbidding a page break in the +% middle of the code listing. +% The starred version does not use a minipage. This is required when the code is too large +% to fit on a single page. + + +% \begin{macrocode} +\NewDocumentEnvironment{dtxexample}{s +O{} m} +{% start dtxexample +% \end{macrocode} +% Copy the environment's contents to the file |ex_cut.tex|: +% \begin{macrocode} +\VerbatimOut[gobble=2,tabsize=4]{ex_cut.tex}% +}% start dtxexample +% \end{macrocode} +% When the environment closes: +% \begin{macrocode} +{% end dtxexample +% \end{macrocode} +% Finish the verbatim output: +% \begin{macrocode} +\endVerbatimOut +\par +\addvspace{\bigskipamount} +% \end{macrocode} +% If unstarred, typeset the example in a minipage: +% \begin{macrocode} +\IfBooleanTF{#1}{\vspace{\bigskipamount}}{\minipage{\linewidth}}% +% \end{macrocode} +% Emulated a float of type ``example'': +% \begin{macrocode} +\captionsetup{type=dtxdexample}% +\hrule\medskip +\caption{#3} +% \end{macrocode} +% Typeset the contents as verbatim: +% \begin{macrocode} +\textcolor{DTXD@examplerulecolor}{\smallskip\hrule} +\smallskip +{\scriptsize\itshape Code:} +\VerbatimInput[tabsize=4]{ex_cut.tex} +\unskip +\textcolor{DTXD@examplerulecolor}{\hrule} +\smallskip +{\scriptsize\itshape Result:} + +% \end{macrocode} +% Possible add the optional cross-references or notes: +% \begin{macrocode} +\ifstrempty{#2} +{} +{{\itshape\small #2}} +% \end{macrocode} +% If unstarred, close the \cs{minipage}. +% \begin{macrocode} +\IfBooleanTF{#1}{}{\endminipage}% +} % end dtxexample +% \end{macrocode} +% \end{environment} + + +% Outside of the environment's scope, input the example to generate its output +% and labels: +% \begin{macrocode} +\AfterEndEnvironment{dtxexample} +{% +% \end{macrocode} +% Execute the code: +% \begin{macrocode} +\par\unskip\input{ex_cut.tex}% +% \end{macrocode} +% Closing rule:: +% \begin{macrocode} +\medskip\hrule% +} +% \end{macrocode} + + +% \DescribeMacro[dtxexample]{\DeclareFloatingEnvironment} A new float type for the examples. +% \begin{macrocode} +\DeclareFloatingEnvironment[ +fileext=lox, +listname={List of Examples}, +name=Example, +placement=hbp +]{dtxdexample} +% \end{macrocode} + + +% \DescribeMacro[dtxexample]{\captionsetup} Caption setup for the examples. +% \begin{macrocode} +\captionsetup*[dtxdexample]{ +format=hang, +font=bf, +justification=raggedright, +singlelinecheck=false, +skip=0pt, +position=top, +} +% \end{macrocode} + +% \DescribeMacro[dtxexample]{\crefname} Name for \pkg{cleveref}. +% \begin{macrocode} +\AtBeginDocument{ +\@ifpackageloaded{cleveref}{\crefname{dtxdexample}{example}{examples}}{} +} +% \end{macrocode} + + +% +% +% \iffalse +%</package> +% \fi + + + + +% \clearpage +% \pagestyle{plain} +% +% \renewcommand{\partname}{} +% \renewcommand{\thepart}{} +% \part{Change History and Index} +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.ins b/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.ins new file mode 100644 index 00000000000..21713e98406 --- /dev/null +++ b/Master/texmf-dist/source/latex/dtxdescribe/dtxdescribe.ins @@ -0,0 +1,47 @@ +%% dtxdescribe.ins +%% Copyright 2016 Brian Dunn +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% 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.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Brian Dunn. +%% +%% This work consists of the files dtxdescribe.dtx and dtxdescribe.ins +%% and the derived file dtxdescribe.sty. +\input docstrip.tex +\keepsilent +\usedir{tex/latex/ package } +\preamble +This is a generated file. +Copyright 2016 Brian Dunn + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +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.3 or later is part of all distributions of LaTeX +version 2005/12/01 or later. +\endpreamble +\askforoverwritefalse +\generate{\file{dtxdescribe.sty}{\from{dtxdescribe.dtx}{package}}} +\Msg{*********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the} +\Msg{* following file into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space dtxdescribe.sty} +\Msg{*} +\Msg{* To produce the documentation run the file dtxdescribe.dtx} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*********************************************************} +\endbatchfile |