% $Id: ltxdockit.sty,v 1.2d 2011/03/25 20:33:14 lehman stable $ % % Copyright (c) 2008-2011 Philipp Lehman. % % Permission is granted to copy, distribute and/or modify this % software under the terms of the LaTeX Project Public License % (LPPL), version 1.3. % % The LPPL maintenance status of this software is % 'author-maintained'. % % This software is provided 'as is', without warranty of any kind, % either expressed or implied, including, but not limited to, the % implied warranties of merchantability and fitness for a % particular purpose. \def\ltd@rcsid$#1: #2 #3 #4 #5${#4 v#3} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ltxdockit} [\ltd@rcsid $Id: ltxdockit.sty,v 1.2d 2011/03/25 20:33:14 lehman stable $ LaTeX documentation kit] \RequirePackage{etoolbox} \RequirePackage{listings} \RequirePackage{color} \RequirePackage{xspace} \RequirePackage{ifpdf} \RequirePackage{hyperref} \newcount\ltd@tempcnta \newlength{\ltd@tempdima} \newlength{\marglistwidth} \newlength{\marglistsep} \AtEndPreamble{% \deflength{\marglistwidth}{(\oddsidemargin+1in)*85/100}% \deflength{\marglistsep}{10pt}} \newcommand*{\marglistfont}{\bfseries} \newcommand*{\margnotefont}{} \newcommand*{\optionlistfont}{\bfseries} \newcommand*{\ltxsyntaxfont}{\ttfamily} \newcommand*{\ltxsyntaxlabelfont}{\bfseries} \newcommand*{\changelogfont}{\normalfont} \newcommand*{\changeloglabelfont}{\bfseries} \newcommand*{\verbatimfont}{\ttfamily} \newcommand*{\displayverbfont}{\ttfamily} \renewcommand*{\verbatim@font}{\verbatimfont} \definecolor{spot}{rgb}{0,0.2,0.6} \definecolor{boxframe}{gray}{0.8} \definecolor{boxfill}{rgb}{0.95,0.95,0.99} \newcommand*{\defaultcolor}{\color{black}} \newcommand*{\spotcolor}{\color{spot}} % markup \newrobustcmd*{\cs}[1]{\mbox{\verbatimfont\textbackslash#1}} \newrobustcmd*{\cmd}[1]{\mbox{\verbatimfont\textbackslash#1}} \newrobustcmd*{\env}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\len}[1]{\mbox{\verbatimfont\textbackslash#1}} \newrobustcmd*{\cnt}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\prm}[1]{% \ifblank{#1} {} {\mbox{% \ensuremath\langle \normalfont\textit{#1}% \ensuremath\rangle}}} \newrobustcmd*{\mprm}[1]{% \mbox{% {\verbatimfont\{}\prm{#1}% {\verbatimfont\}}}} \newrobustcmd*{\oprm}[1]{% \mbox{% {\verbatimfont[}\prm{#1}% {\verbatimfont]}}} \newrobustcmd*{\opt}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\kvopt}[2]{{% \verbatimfont#1\penalty\@M \hskip 0em plus 0.15em\relax =\penalty\hyphenpenalty \hskip 0em plus 0.15em\relax #2}} \csdef{*}{\textasteriskcentered} \newrobustcmd*{\file}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\sty}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\bin}[1]{\mbox{\verbatimfont#1}} \newrobustcmd*{\acr}[1]{\mbox{% \ifx\f@family\rmdefault \textsc{\MakeLowercase{#1}}% \else #1% \fi}} \newrobustcmd*{\keyval}{% \begingroup\verbatimfont \prm{key}=\penalty\hyphenpenalty \prm{value}\endgroup \xspace} \ifpdf \pdfstringdefDisableCommands{% \def\cs#1{\textbackslash#1}% \def\cmd#1{\textbackslash#1}% \def\env#1{'#1'}% \def\len#1{\textbackslash#1}% \def\cnt#1{'#1'}% \def\prm#1{'#1'}% \def\mprm#1{\{#1\}}% \def\oprm#1{[#1]}% \def\opt#1{'#1'}% \def\kvopt#1#2{'#1'='#2'}% \def\keyval{'key'='value'}% \let\file\@firstofone \let\sty\@firstofone \let\bin\@firstofone \let\acr\@firstofone}% \def\ltd@pdfbookmark#1#2{% \edef\ltd@pdfanchor{% \the\c@part\ifundef\c@chapter{}{\the\c@chapter}% \the\c@section\the\c@subsection\the\c@subsubsection \the\c@paragraph\the\c@subparagraph \string:\detokenize{#1}}% \belowpdfbookmark{#2}{\ltd@pdfanchor}} \else \let\ltd@pdfbookmark\@gobbletwo \fi \newenvironment*{marglist} {\list{}{% \setlength{\labelwidth}{\marglistwidth}% \setlength{\labelsep}{\marglistsep}% \setlength{\leftmargin}{0pt}% \renewcommand*{\makelabel}[1]{\hss\marglistfont##1}}} {\endlist} \newenvironment*{keymarglist} {\marglist \setlength{\itemsep}{0pt}% \raggedright} {\endmarglist} % references \newcommand*{\secref}{\refs{\S}{\S\S}} \newcommand*{\Secref}{\refs{\S}{\S\S}} \newcommand*{\apxref}{\refs{appendix}{appendices}} \newcommand*{\Apxref}{\refs{Appendix}{Appendices}} \newcommand*{\tabref}{\refs{table}{tables}} \newcommand*{\Tabref}{\refs{Table}{Tables}} \newrobustcmd*{\refs}[3]{% \begingroup \@tempcnta\z@ \def\do##1{\advance\@tempcnta\@ne}% \docsvlist{#3}% \@tempcntb\@ne \def\@tempa{\def\@tempa{% \advance\@tempcntb\@ne \ifnumequal{\@tempcnta}{2} { and } {, }}}% \def\do##1{\@tempa\ref{##1}}% \ifnumgreater{\@tempcnta}{1}{#2}{#1}~\docsvlist{#3}% \endgroup} % syntax \newenvironment*{ltxsyntax} {\list{}{% \setlength{\labelwidth}{\marglistwidth}% \setlength{\labelsep}{0pt}% \setlength{\leftmargin}{0pt}% \renewcommand*{\makelabel}[1]{% \hss\ltxsyntaxfont\ltxsyntaxlabelfont##1}}% \let\csitem\ltd@csitem \let\cmditem\ltd@cmditem \let\envitem\ltd@envitem \let\lenitem\ltd@csitem \let\boolitem\ltd@boolitem \let\cntitem\ltd@item \let\optitem\ltd@item} {\endlist} \def\ltd@itemsave{% \ltd@tempcnta\@itempenalty \ltd@tempdima\itemsep \@itempenalty\@M} \def\ltd@itemrest{% \@itempenalty\ltd@tempcnta \itemsep\ltd@tempdima} \def\ltd@syntaxsetup{% \@makeother\[% \@makeother\]% \@makeother\<% \@makeother\>% \@makeother\|}% \def\ltd@itembreak{% \ltd@goodbreak \let\ltd@goodbreak\goodbreak} \let\ltd@goodbreak\relax \def\ltd@item{% \@ifstar {\boolfalse{@tempswa}\ltd@item@i} {\booltrue{@tempswa}\ltd@item@i}} \def\ltd@item@i#1{% \ifbool{@tempswa} {\ltd@item@ii{#1\hspace\marglistsep}{#1}} {\ltd@item@ii{#1\hspace\marglistsep}{}}} \def\ltd@item@ii#1#2{% \ltd@itemsave \ifhmode \itemsep\z@ \else \ltd@itembreak \fi \item[#1]% \ltd@itemrest \ifblank{#2}{}{\ltd@pdfbookmark{#2}{#1}}} \def\ltd@csitem{% \@ifstar {\boolfalse{@tempswa}\ltd@csitem@i} {\booltrue{@tempswa}\ltd@csitem@i}} \def\ltd@csitem@i#1{% \ifbool{@tempswa} {\ltd@item@ii{\textbackslash#1\hspace\marglistsep}{#1}} {\ltd@item@ii{\textbackslash#1\hspace\marglistsep}{}}} \def\ltd@boolitem#1{% \ltd@item@ii{\textbackslash#1true\hspace\marglistsep}{}% \leavevmode\vspace{-\parsep}% \ltd@item@ii{\textbackslash#1false\hspace\marglistsep}{}% \leavevmode\vspace{\numexpr-2\baselineskip}} \def\ltd@cmditem{% \@ifstar {\boolfalse{@tempswa}\ltd@cmditem@i} {\booltrue{@tempswa}\ltd@cmditem@i}} \def\ltd@cmditem@i#1{% \ifbool{@tempswa} {\ltd@cmditem@ii{\textbackslash#1}{#1}} {\ltd@cmditem@ii{\textbackslash#1}{}}} \def\ltd@cmditem@ii#1#2{% \ltd@itemsave \ifhmode \itemsep-\topsep \else \ltd@itembreak \fi \item[#1]% \ltd@itemrest \ifblank{#2}{}{\ltd@pdfbookmark{#2}{#1}}% \begingroup \ltd@syntaxsetup \ltxsyntaxfont \let\@tempa\@empty \ltd@parseargs} \def\ltd@envitem#1{% \ltd@itembreak \item[\textbackslash begin]\{{\ltxsyntaxfont\ltxsyntaxlabelfont#1}\}% \ltd@pdfbookmark{#1}{#1}% \begingroup \ltd@syntaxsetup \ltxsyntaxfont \def\@tempa{% \ltd@itemsave \itemsep\z@ \item[\textbackslash end]\{{\ltxsyntaxfont\ltxsyntaxlabelfont#1}\}% \ltd@itemrest}% \ltd@parseargs} \def\ltd@parseargs{% \leavevmode \futurelet\@let@token\ltd@parseargs@space} \def\ltd@parseargs@space{% \ifx\@let@token\@sptoken \expandafter\ltd@gobblespace \else \expandafter\ltd@parseargs@i \fi} \def\ltd@parseargs@i{% \ifx\@let@token\\% \expandafter\ltd@printarg@i \else \expandafter\ltd@parseargs@ii \fi} \def\ltd@parseargs@ii{% \ifx\@let@token*% \expandafter\ltd@printarg@ii \else \expandafter\ltd@parseargs@iii \fi} \def\ltd@parseargs@iii{% \ifx\@let@token[%] \expandafter\ltd@printarg@iii \else \expandafter\ltd@parseargs@iv \fi} \def\ltd@parseargs@iv{% \ifx\@let@token(%) \expandafter\ltd@printarg@iv \else \expandafter\ltd@parseargs@v \fi} \def\ltd@parseargs@v{% \ifx\@let@token<%> \expandafter\ltd@printarg@v \else \expandafter\ltd@parseargs@vi \fi} \def\ltd@parseargs@vi{% \ifx\@let@token|% \expandafter\ltd@printarg@vi \else \expandafter\ltd@parseargs@vii \fi} \def\ltd@parseargs@vii{% \ifx\@let@token\bgroup \expandafter\ltd@printarg@vii \else \expandafter\ltd@parseargs@end \fi} \def\ltd@parseargs@end{% \@tempa\endgroup \nobreak\vspace*{\itemsep}} \def\ltd@printarg@i#1{\%\nobreak\par\ltd@parseargs} \def\ltd@printarg@ii#1{{\ltxsyntaxfont\ltxsyntaxlabelfont#1}\ltd@parseargs} \def\ltd@printarg@iii[#1]{[\prm{#1}]\ltd@parseargs} \def\ltd@printarg@iv(#1){(\prm{#1})\ltd@parseargs} \def\ltd@printarg@v<#1>{\prm{#1}\ltd@parseargs} \def\ltd@printarg@vi|#1|{#1\ltd@parseargs} \def\ltd@printarg@vii#1{\{\prm{#1}\}\ltd@parseargs} \csdef{ltd@gobblespace} {\ltd@parseargs} % options \newenvironment*{optionlist} {\list{}{% \setlength{\labelwidth}{\marglistwidth}% \setlength{\labelsep}{\z@}% \setlength{\leftmargin}{0pt}% \renewcommand*{\makelabel}[1]{\hss\optionlistfont##1}}% \ltd@optionlist} {\endlist} \newenvironment*{optionlist*} {\list{}{% \setlength{\labelwidth}{0pt}% \setlength{\labelsep}{0pt}% \setlength{\leftmargin}{0pt}% \renewcommand*{\makelabel}[1]{\hss\optionlistfont##1}}% \ltd@optionlist \let\ltd@pdfbookmark\@gobbletwo \let\ltd@option@i\ltd@option@ii \def\legitem##1{\item[##1]\item\relax}} {\endlist} \def\ltd@optionlist{% \let\optitem\ltd@ol@optitem \let\varitem\ltd@ol@varitem \let\valitem\ltd@ol@valitem \let\choitem\ltd@ol@choitem \let\boolitem\ltd@ol@boolitem \let\intitem\ltd@ol@intitem \let\legitem\ltd@ol@legitem} \newcommand*{\ltd@ol@optitem}[3][]{% \ifblank{#1} {\ltd@option{#2}{#2}{#3}{}} {\ltd@option{#2}{#2}{#3}{\ltd@textverb{#1}}}}% \newcommand*{\ltd@ol@varitem}[3][]{% \ifblank{#1} {\ltd@option{#2}{\prm{#2}}{#3}{}} {\ltd@option{#2}{\prm{#2}}{#3}{\ltd@textverb{#1}}}}% \newcommand*{\ltd@ol@valitem}[3][]{% \ifblank{#1} {\ltd@option{#2}{#2}{\prm{#3}}{}} {\ltd@option{#2}{#2}{\prm{#3}}{\ltd@textverb{#1}}}}% \newcommand*{\ltd@ol@choitem}[3][]{% \ifblank{#1} {\ltd@option{#2}{#2}{\ltd@verblist{#3}}{}} {\ltd@option{#2}{#2}{\ltd@verblist{#3}}{\ltd@textverb{#1}}}}% \newcommand*{\ltd@ol@boolitem}[2][]{% \ifblank{#1} {\ltd@option{#2}{#2}{\ltd@verblist{true,false}}{}} {\ltd@option{#2}{#2}{\ltd@verblist{true,false}}{\ltd@textverb{#1}}}}% \newcommand*{\ltd@ol@intitem}[2][]{% \ifblank{#1} {\ltd@option{#2}{#2}{\prm{integer}}{}} {\ltd@option{#2}{#2}{\prm{integer}}{\ltd@textverb{#1}}}}% \def\ltd@ol@legitem#1{% \item[#1\hspace{\marglistsep}]% \ltd@pdfbookmark{#1}{#1}}% \def\ltd@textverb#1{{\displayverbfont#1}} \def\ltd@verblist#1{% \begingroup \let\@tempa\@empty \def\do##1{\@tempa\ltd@textverb{##1}\def\@tempa{, }}% \docsvlist{#1}% \endgroup} \def\ltd@option#1#2#3#4{% \@ifnextchar[%] {\ltd@option@i{#1}{#2}{#3}{#4}} {\ltd@option@i{#1}{#2}{#3}{#4}[]}} \def\ltd@option@i#1#2#3#4[#5]{% \item[#2]% \ltd@pdfbookmark{#1}{#1}% \begingroup\raggedright \ltd@textverb{=}% \settowidth\@tempdimb{\ltd@textverb{=}}% \@tempdima=\dimexpr\linewidth-\@tempdimb\relax \ifblank{#4} {} {\settowidth\@tempdimb{default: #4}% \@tempdima=\dimexpr\@tempdima-\@tempdimb-2em\relax}% \parbox[t]{\@tempdima}{\raggedright #3}% \ifblank{#4} {} {\hfill default:~#4}% \ifblank{#5} {} {\marginpar{\margnotefont #5}}% \par\endgroup \nobreak\vspace{\itemsep}} \def\ltd@option@ii#1#2#3#4[#5]{% \item[#2]% \ltd@pdfbookmark{#1}{#1}% \begingroup\raggedright \ltd@textverb{=}% \settowidth\@tempdimb{{\optionlistfont#2}\ltd@textverb{=}}% \@tempdima=\dimexpr\linewidth-\@tempdimb\relax \ifblank{#4} {} {\settowidth\@tempdimb{default: #4}% \@tempdima=\dimexpr\@tempdima-\@tempdimb-2em\relax}% \parbox[t]{\@tempdima}{\raggedright #3}% \ifblank{#4} {} {\hfill default:~#4}% \ifblank{#5} {} {\marginpar{\margnotefont #5}}% \par\endgroup \nobreak\vspace{\itemsep}} \newenvironment*{valuelist}[1][] {\list{}{% \ifblank{#1} {\setlength{\labelwidth}{5em}} {\settowidth{\labelwidth}{\optionlistfont#1}}% \setlength{\labelsep}{1em}% \setlength{\leftmargin}{\labelwidth}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{0pt}% \renewcommand*{\makelabel}[1]{\optionlistfont##1\hss}}} {\endlist} \newenvironment*{valuelist*} {\list{}{% \setlength{\labelwidth}{0pt}% \setlength{\labelsep}{0pt}% \setlength{\leftmargin}{0pt}% \renewcommand*{\makelabel}[1]{\hss\optionlistfont##1}% \let\@@item\item \def\item[##1]{% \@itempenalty-\@highpenalty \@@item[##1]% \@itempenalty\@M \@@item\relax}}} {\endlist} \newenvironment*{argumentlist}[1] {\list{}{% \settowidth{\labelwidth}{\displayverbfont#1}% \setlength{\labelsep}{1em}% \setlength{\leftmargin}{\labelwidth}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{0pt}% \renewcommand*{\makelabel}[1]{\displayverbfont##1\hss}}} {\endlist} % changelog \newenvironment*{changelog} {\list{}{% \setlength{\leftmargin}{0pt}% \setlength{\itemsep}{0pt}% \renewcommand*{\makelabel}[1]{##1\hss}% \raggedright\changelogfont}% \def\release##1##2{% \@release{##1}{##2}% \list{}{% \setlength{\leftmargin}{1.5em}% \setlength{\itemindent}{-1.5em}% \setlength{\itemsep}{0pt}}% \samepage \begingroup \def\item{\endgroup\item\@itempenalty\z@}}% \def\endrelease{\endlist}% \def\@release##1##2{% \begingroup \changeloglabelfont \item\relax \ltd@pdfbookmark{##1}{##1 (##2)}% ##1\quad##2\par\nobreak \endgroup} \def\see##1{% \leaders\hbox{$\m@th\mkern4.5mu\hbox{.}\mkern4.5mu$}% \hfill\makebox[3em][l]{\ref{##1}}}} {\endlist} % verbatim \newlength{\lstenvsep} \setlength{\lstenvsep}{\partopsep} \addtolength{\lstenvsep}{\topsep} \lstset{% aboveskip=\lstenvsep, belowskip=\lstenvsep, basicstyle=\displayverbfont\small, commentstyle=\itshape, keywordstyle=\spotcolor, emphstyle=\spotcolor, numbers=none, basewidth=0.5em, fontadjust=true, flexiblecolumns=true, keepspaces=false} \lstdefinestyle{plain}{% escapechar={\#}} \lstdefinestyle{highlight}{% moredelim=[is][\spotcolor]{<<}{>>}} \lstdefinestyle{latex}{% alsoletter={\\}, moredelim=[is][\spotcolor]{<<}{>>}} \lstdefinestyle{ifthen}{% alsoletter={\\}, keywords={\\and,\\or,\\not,\\AND,\\OR,\\NOT}, otherkeywords={=,<,>,\\(,\\)}} \lstnewenvironment{ltxcode}[1][] {\lstset{style=latex,#1}} {} \lstnewenvironment{ltxexample}[1][] {\lstset{% aboveskip=1.5\lstenvsep, xleftmargin=3pt, xrightmargin=3pt, frame=single, backgroundcolor=\color{boxfill}, fillcolor=\color{white}, rulecolor=\color{boxframe}, framesep=2.5pt, framerule=0.5pt, style=latex,#1}} {} \endinput