From 7339f8c2554ea56f79258fcee0aac72fd23f184d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 5 Oct 2013 21:31:22 +0000 Subject: cnltx (5oct13) git-svn-id: svn://tug.org/texlive/trunk@31843 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/cnltx/README | 35 + Master/texmf-dist/doc/latex/cnltx/cnltx.bib | 374 +++ Master/texmf-dist/doc/latex/cnltx/cnltx_en.pdf | Bin 0 -> 683975 bytes Master/texmf-dist/doc/latex/cnltx/cnltx_en.tex | 2468 ++++++++++++++++++++ Master/texmf-dist/makeindex/cnltx/cnltx.ist | 10 + Master/texmf-dist/tex/latex/cnltx/cnltx-base.sty | 713 ++++++ Master/texmf-dist/tex/latex/cnltx/cnltx-doc.cls | 903 +++++++ .../texmf-dist/tex/latex/cnltx/cnltx-example.sty | 698 ++++++ .../texmf-dist/tex/latex/cnltx/cnltx-listings.sty | 1947 +++++++++++++++ Master/texmf-dist/tex/latex/cnltx/cnltx-tools.sty | 220 ++ Master/texmf-dist/tex/latex/cnltx/cnltx.bbx | 130 ++ Master/texmf-dist/tex/latex/cnltx/cnltx.cbx | 26 + Master/texmf-dist/tex/latex/cnltx/cnltx.dbx | 37 + Master/tlpkg/bin/tlpkg-ctan-check | 2 +- Master/tlpkg/tlpsrc/cnltx.tlpsrc | 0 Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 + 16 files changed, 7563 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/latex/cnltx/README create mode 100644 Master/texmf-dist/doc/latex/cnltx/cnltx.bib create mode 100644 Master/texmf-dist/doc/latex/cnltx/cnltx_en.pdf create mode 100644 Master/texmf-dist/doc/latex/cnltx/cnltx_en.tex create mode 100644 Master/texmf-dist/makeindex/cnltx/cnltx.ist create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx-base.sty create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx-doc.cls create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx-example.sty create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx-listings.sty create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx-tools.sty create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx.bbx create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx.cbx create mode 100644 Master/texmf-dist/tex/latex/cnltx/cnltx.dbx create mode 100644 Master/tlpkg/tlpsrc/cnltx.tlpsrc diff --git a/Master/texmf-dist/doc/latex/cnltx/README b/Master/texmf-dist/doc/latex/cnltx/README new file mode 100644 index 00000000000..8c66b464577 --- /dev/null +++ b/Master/texmf-dist/doc/latex/cnltx/README @@ -0,0 +1,35 @@ +-------------------------------------------------------------------------- +the CNLTX bundle v0.7a 2013/10/04 + + LaTeX tools and documenting facilities + +-------------------------------------------------------------------------- +Clemens Niederberger +Web: https://github.com/cgnieder/cnltx/ +E-Mail: contact@mychemistry.eu +-------------------------------------------------------------------------- +Copyright 2013 Clemens Niederberger + +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 Clemens Niederberger. +-------------------------------------------------------------------------- +The cnltx bundle consists of the files + - cnltx-base.sty, cnltx-doc.cls, cnltx-example.sty, cnltx-listings.sty, + cnltx-tools.sty + - cnltx.ist, cnltx.bib, cnltx.bbx, cnltx.cbx, cnltx.dbx, + - cnltx_en.tex, cnltx_en.pdf + - README +-------------------------------------------------------------------------- +If you have any ideas, questions, suggestions or bugs to report, please +feel free to contact me. +-------------------------------------------------------------------------- + diff --git a/Master/texmf-dist/doc/latex/cnltx/cnltx.bib b/Master/texmf-dist/doc/latex/cnltx/cnltx.bib new file mode 100644 index 00000000000..bcc4b25741d --- /dev/null +++ b/Master/texmf-dist/doc/latex/cnltx/cnltx.bib @@ -0,0 +1,374 @@ +@package{pkg:abbrevs, + title = {abbrevs}, + author = {Matt Swift}, + date = {2001-09-08}, + version = {1.4}, + url = {http://mirror.ctan.org/macros/latex/contrib/frankenstein/abbrevs/} +} +@package{pkg:accsupp, + title = {accsupp} , + author = {Heiko Oberdiek} , + date = {2010-01-16} , + version = {0.3} , + url = {http://mirror.ctan.org/macros/latex/contrib/oberdiek/} +} +@package{pkg:acro, + title = {acro} , + author = {Clemens Niederberger} , + date = {2013-09-24} , + version = {1.4b} , + url = {http://mirror.ctan.org/macros/latex/contrib/acro/} +} +@package{pkg:acromake, + title = {acromake}, + author = {Paul A. Thompson}, + date = {1995-07-16}, + version = {na}, + url = {http://mirror.ctan.org/macros/latex/contrib/acromake/} +} +@package{pkg:acronym, + title = {acronym}, + subtitle = {An Acronym Environment for \LaTeXe}, + author = {Tobias Oetiker}, + date = {2012-10-29}, + version = {1.38}, + url = {http://mirror.ctan.org/macros/latex/contrib/acronym/} +} +@package{pkg:acroterm, + title = {acroterm}, + author = {Jakob Voss}, + date = {2010-11-19}, + version = {0.1}, + url = {http://mirror.ctan.org/macros/latex/contrib/acroterm/} +} +@package{pkg:answers, + title = {answers}, + author = {Mike Piff}, + maintainer = {Joseph Wright}, + date = {2010-10-11}, + version = {2.13}, + url = {http://mirror.ctan.org/macros/latex/contrib/answers/} +} +@package{pkg:babel, + title = {babel} , + author = {Johannes Braams} , + maintainer = {Javier Bezos} , + date = {2013-05-16} , + version = {3.9f} , + url = {http://mirror.ctan.org/macros/latex/required/babel/} +} +@package{pkg:biblatex, + title = {biblatex} , + author = {Philipp Lehman} , + maintainer = {Joseph Wright and Audrey Boruvka and Philip Kime} , + date = {2013-07-14} , + version = {2.7a} , + url = {http://mirror.ctan.org/macros/latex/contrib/biblatex/} +} +@package{pkg:catchfile, + title = {catchfile} , + author = {Heiko Oberdiek} , + date = {2011-03-01} , + version = {1.6} , + url = {http://mirror.ctan.org/macros/latex/contrib/oberdiek/} +} +@package{pkg:chngcntr, + title = {chngcntr} , + author = {Peter Wilson} , + maintainer = {Will Robertson} , + date = {2009-09-02} , + version = {1.0a} , + url = {http://mirror.ctan.org/macros/latex/contrib/chngcntr/} +} +@bundle{bnd:cnltx, + title = {cnltx} , + author = {Clemens Niederberger} , + date = {2013-10-04} , + version = {0.7a} , + url = {http://mirror.ctan.org/macros/latex/contrib/cnltx/} +} +@class{cls:cnpkgdoc, + title = {cnpkgdoc} , + author = {Clemens Niederberger} , + date = {2013-07-13} , + version = {0.3a} , + url = {https://bitbucket.org/cgnieder/cnpkgdoc/} +} +@package{pkg:enumitem, + title = {enumitem}, + author = {Javier Bezos}, + date = {2011-09-28}, + version = {3.5.2}, + url = {http://mirror.ctan.org/macros/latex/contrib/enumitem/} +} +@package{pkg:environ, + title = {environ}, + author = {Will Robertson}, + date = {2013-04-01}, + version = {0.3}, + url = {http://mirror.ctan.org/macros/latex/contrib/environ/} +} +@package{pkg:eqexam, + title = {eqexam}, + author = {D. P. Story}, + date = {2011-09-01}, + version = {3.0k}, + url = {http://mirror.ctan.org/macros/latex/contrib/eqexam/} +} +@package{pkg:esami, + title = {esami}, + author = {Grazia Messineo and Salvatore Vassallo}, + date = {2013-03-08}, + version = {1.0}, + url = {http://mirror.ctan.org/macros/latex/contrib/esami/} +} +@package{pkg:etoolbox, + title = {etoolbox} , + author = {Philipp Lehman} , + date = {2011-01-03} , + version = {2.1} , + url = {http://mirror.ctan.org/macros/latex/contrib/etoolbox/} +} +@class{cls:exam, + title = {exam}, + author = {Philip Hirschhorn}, + date = {2011-05-22}, + version = {2.4}, + url = {http://mirror.ctan.org/macros/latex/contrib/exam/} +} +@package{pkg:examdesign, + title = {examdesign}, + author = {Jason Alexander}, + date = {2001-03-26}, + version = {1.1}, + url = {http://mirror.ctan.org/macros/latex/contrib/examdesign/} +} +@package{pkg:exercise, + title = {exercise}, + author = {Paul Pichaureau}, + date = {2012-05-08}, + version = {1.58}, + url = {http://mirror.ctan.org/macros/latex/contrib/exercise/} +} +@package{pkg:exsol, + title = {exsol}, + author = {Walter Daems}, + date = {2013-05-12}, + version = {0.6}, + url = {http://mirror.ctan.org/macros/latex/contrib/exsol/} +} +@package{pkg:glossaries, + title = {glossaries}, + author = {Nicola L.C. Talbot}, + date = {2013-04-21}, + version = {3.05}, + url = {http://mirror.ctan.org/macros/latex/contrib/glossaries/} +} +@package{pkg:hologo, + title = {hologo} , + author = {Heiko Oberdiek} , + date = {2012-04-26} , + version = {1.10} , + url = {http://mirror.ctan.org/macros/latex/contrib/oberdiek/} +} +@package{pkg:hyperref, + title = {hyperref} , + author = {Heiko Oberdiek and Sebastian Rahtz} , + date = {2012-11-06} , + version = {6.83m} , + url = {http://mirror.ctan.org/macros/latex/contrib/hyperref/} +} +@package{pkg:idxcmds, + title = {idxcmds} , + author = {Clemens Niederberger} , + date = {2013-08-31} , + version = {0.2b} , + url = {http://mirror.ctan.org/macros/latex/contrib/idxcmds/} +} +@package{pkg:ifluatex, + title = {ifluatex} , + author = {Heiko Oberdiek} , + date = {2010-03-01} , + version = {1.3} , + url = {http://mirror.ctan.org/macros/latex/contrib/oberdiek/} +} +@package{pkg:ifxetex, + title = {ifxetex} , + author = {Will Robertson} , + date = {2010-09-12} , + version = {0.6} , + url = {http://mirror.ctan.org/macros/latex/contrib/ifxetex/} +} +@package{pkg:imakeidx, + title = {imakeidx} , + author = {Enrico Gregorio} , + date = {2013-07-11} , + version = {1.3a} , + url = {http://mirror.ctan.org/macros/latex/contrib/imakeidx/} +} +@bundle{bnd:koma-script, + title = {\KOMAScript} , + sorttitle = {KOMA-Script} , + indextitle = {\KOMAScript} , + indexsorttitle = {KOMA-Script} , + author = {Markus Kohm and Frank Neukahm}, + date = {2012-07-29} , + version = {3.11b} , + url = {http://mirror.ctan.org/macros/latex/contrib/koma-script/} +} +@bundle{bnd:l3experimental, + title = {l3experimental} , + author = {The \LaTeX3 Project Team} , + version = {SVN 4582} , + date = {2013-07-28} , + url = {http://mirror.ctan.org/macros/latex/contrib/l3experimental/} +} +@bundle{bnd:l3kernel, + title = {l3kernel} , + author = {The \LaTeX3 Project Team} , + version = {SVN 4582} , + date = {2013-07-28} , + url = {http://mirror.ctan.org/macros/latex/contrib/l3kernel/} +} +@bundle{bnd:l3packages, + title = {l3packages} , + author = {The \LaTeX3 Project Team} , + version = {SVN 4582} , + date = {2013-07-28} , + url = {http://mirror.ctan.org/macros/latex/contrib/l3packages/} +} +@package{pkg:libertine, + title = {libertine} , + author = {Bob Tennent} , + date = {2013-09-02} , + url = {http://mirror.ctan.org/fonts/libertine/} +} +@package{pkg:listings, + title = {listings} , + author = {Carsten Heinz and Brooks Moses} , + maintainer = {Jobst Hoffmann} , + date = {2013-08-26} , + version = {1.5b} , + url = {http://mirror.ctan.org/macros/latex/contrib/listings/} +} +@package{pkg:ltxcmds, + title = {ltxcmds}, + author = {Heiko Oberdiek}, + date = {2011-11-09}, + version = {1.22}, + url = {http://mirror.ctan.org/macros/latex/contrib/oberdiek/} +} +@package{pkg:marginnote, + title = {marginnote} , + author = {Markus Kohm} , + date = {2012-03-29} , + version = {1.1i} , + url = {http://mirror.ctan.org/macros/latex/contrib/marginnote/} +} +@package{pkg:mdframed, + title = {mdframed} , + author = {Marco Daniel} , + date = {2013-07-01} , + version = {1.9b} , + url = {http://mirror.ctan.org/macros/latex/contrib/mdframed/} +} +@package{pkg:mfirstuc, + title = {mfirstuc}, + author = {Nicola L.C. Talbot}, + date = {2012-05-21}, + version = {1.05}, + url = {http://mirror.ctan.org/macros/latex/contrib/glossaries/} +} +@package{pkg:multicol, + title = {multicol} , + author = {Frank Mittelbach} , + date = {2011-06-27} , + version = {1.7a} , + url = {http://mirror.ctan.org/macros/latex/required/tools/multicol/} +} +@package{pkg:multienum, + title = {multienum}, + author = {Dennis Kletzing}, + date = {2005-05-19}, + version = {n.n.}, + url = {http://mirror.ctan.org/macros/latex/contrib/multienum/} +} +@package{pkg:nomencl, + title = {nomencl}, + subtitle = {A Package to Create a Nomenclature}, + author = {Boris Veytsman and Bernd Schandl and Lee Netherton and C.V. Radhakrishnan}, + date = {2005-09-22}, + version = {4.2}, + url = {http://mirror.ctan.org/macros/latex/contrib/nomencl/} +} +@package{pkg:pgf, + title = {TikZ/pgf} , + author = {Till Tantau} , + version = {2.10} , + date = {2010-10-25} , + url = {http://mirror.ctan.org/graphics/pgf/} +} +@package{pkg:pgfopts, + title = {pgfopts} , + author = {Joseph Wright} , + date = {2011-06-02} , + version = {2.1} , + url = {http://mirror.ctan.org/macros/latex/contrib/pgfopts/} +} +@package{pkg:polyglossia, + title = {polyglossia} , + author = {Fran\c{c}ois Charette} , + maintainer = {Arthur Reutenauer} , + date = {2013-06-27} , + version = {1.33.4} , + url = {http://mirror.ctan.org/macros/latex/contrib/polyglossia/} +} +@package{pkg:probsoln, + title = {probsoln}, + author = {Nicola L. C. Talbot}, + date = {2012-08-23}, + version = {3.04}, + url = {http://mirror.ctan.org/macros/latex/contrib/probsoln/} +} +@package{pkg:ragged2e, + title = {ragged2e} , + author = {Martin Schröder} , + date = {2009-05-21} , + version = {2.1} , + url = {http://mirror.ctan.org/macros/latex/contrib/ms/ragged2e/} +} +@package{pkg:translations, + title = {translations} , + author = {Clemens Niederberger} , + date = {2013-09-30} , + version = {1.1a} , + url = {http://mirror.ctan.org/macros/latex/contrib/translations/} +} +@package{pkg:trimspaces, + title = {trimspaces} , + author = {Will Robertson} , + date = {2009-09-17} , + version = {1.1} , + url = {http://mirror.ctan.org/macros/latex/contrib/trimspaces/} +} +@package{pkg:ulem, + title = {ulem} , + author = {Donald Arseneau} , + date = {2011-03-18} , + url = {http://mirror.ctan.org/macros/latex/contrib/ulem/} +} +@package{pkg:xcolor, + title = {xcolor} , + author = {Uwe Kern} , + date = {2007-01-21} , + version = {2.11} , + url = {http://mirror.ctan.org/macros/latex/contrib/xcolor/} +} +@package{pkg:xspace, + title = {xspace} , + author = {David Carlisle and Morten H\o{}gholm} , + date = {2009-10-20} , + version = {1.13} , + url = {http://mirror.ctan.org/macros/latex/required/tools/} +} + diff --git a/Master/texmf-dist/doc/latex/cnltx/cnltx_en.pdf b/Master/texmf-dist/doc/latex/cnltx/cnltx_en.pdf new file mode 100644 index 00000000000..3b7bf2b0687 Binary files /dev/null and b/Master/texmf-dist/doc/latex/cnltx/cnltx_en.pdf differ diff --git a/Master/texmf-dist/doc/latex/cnltx/cnltx_en.tex b/Master/texmf-dist/doc/latex/cnltx/cnltx_en.tex new file mode 100644 index 00000000000..211bd4f9d0a --- /dev/null +++ b/Master/texmf-dist/doc/latex/cnltx/cnltx_en.tex @@ -0,0 +1,2468 @@ +% arara: pdflatex +% !arara: biber +% !arara: pdflatex +% arara: pdflatex +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\documentclass[load-preamble+,babel-options={ngerman,english}]{cnltx-doc} +\usepackage[utf8]{inputenc} + +\usepackage{varioref} + +\usepackage{array,booktabs} +\usepackage{tikz} +\usetikzlibrary{chains} + +\setcnltx{ + name = cnltx , + title = the cnltx bundle , + version = \csname cnltx@@version\endcsname , + date = \csname cnltx@@date\endcsname , + subtitle = Documentation for \LaTeXe\ Packages or Classes , + info = \LaTeX\ tools and documenting facilities the + \texorpdfstring{\textsc{cn}}{CN} way , + authors = Clemens Niederberger , + email = contact@mychemistry.eu , + url = https://github.com/cgnieder/cnltx , + abstract = {% + A versatile bundle of packages and classes for consistent formatting of + control sequences, package options, source code examples, and writing a + package manual (including an index containing the explained control + sequences, options, \ldots).\par + The bundle also provides several other small ideas of mine such as a + mechansim for providing abbreviations \etc. Not at least it provides a + number of programming tools.% + } , + index-setup = { othercode=\footnotesize,level=\section}, + add-cmds = { + % internal macros: + cnltx@babel@options, + cnltx@bibtex@listings@style, + cnltx@caption@font,cnltx@captionlabel@font, + cnltx@define@colorscheme, + cnltx@gobble, + cnltx@ifisnum, + cnltx@ifpunctuation, + cnltx@ifsym, + cnltx@listings@style, + cnltx@mdframed@options, + cnltx@scrartcl@options, + cnltx@trailpunct, + cnltx@treat@lst@index, + % official macros: + AD,AM,BC, + changedversion,cls, + cnltxacronym, + cnltxat,cnltxbang,cnltxequal, + code,codefont,command,cs,csidx, + ctan,CTAN,CTANurl, + darg, + DeclareCounterRepresentation, + Default,default, + definecolorscheme, + dsh, + eg,env,envidx,environment, + expandable, + indexcs, + inputexample,inputsidebyside,inputsourcecode, + key,keybool,keychoice,keyval, + lppl,LPPL, + marg,Marg,module,Module, + newabbr,newarg, + newcounterrepresentation, + newname, + newnote, + newpackagename, + newinputsourcefilecmd, + newsourcecodeenv, + oarg,opt,option, + PM,pkg, + providecounterrepresentation, + renewcounterrepresentation, + sarg,setcnltx,sinceversion,sourceformat, + unexpandable, + usf,usw, + vgl,Vgl, + zB,ZB + }, + add-silent-cmds = { + @foo, + ab,AB, + at, + carlisle, + cd, + circled,circlenumber, + cnltx, + foo, + foothree, + GetTranslation, + minusone,multoffourrm, + nohyperpage, + superiors@spaced, + textsu, + twodigits + } , + add-envs = { + commands, + environments, + example, + options, + sidebyside,sourcecode + }, + add-frame-options = { + innerleftmargin=2em + } +} + +\defbibheading{bibliography}[\bibname]{\section{#1}} + +\makeatletter +\newcommand*\cnltxhyphen{\texorpdfstring{\cnltx@hyphen}{-}} +\newrobustcmd*\cnltx@hyphen{\penalty\@M-\hskip\z@skip} +\makeatother + +\newpackagename\cnltxbase{cnltx\cnltxhyphen base} +\newpackagename\cnltxcsnames{cnltx\cnltxhyphen csnames} +\newpackagename\cnltxdoc{cnltx\cnltxhyphen doc} +\newpackagename\cnltxexample{cnltx\cnltxhyphen example} +\newpackagename\cnltxlistings{cnltx\cnltxhyphen listings} +\newpackagename\cnltxtools{cnltx\cnltxhyphen tools} + +\newnote*\bypackage[1]{provided by \csname cnltx#1\endcsname} +\newnote*\byclass{provided by \cnltxdoc} + +\newname\oberdiek{Heiko}{Oberdiek} +\newname\egreg{Enrico}{Gregorio} +\newname\heinz{Carsten}{Heinz} +\newname\moses{Brooks}{Moses} +\newname\hoffmann{Jobst}{Hoffmann} +\newname\daniel{Marco}{Daniel} + +\newcommand*\file[1]{\code{#1}} +\newcommand*\latin[1]{\cnltxlatin{#1}} + +\newcommand*\PDF{\cnltxacronym{PDF}{pdf}} + +\newenvironment{colors} + {% + \def\colour##1{\item[]\code{\textcolor{##1}{##1}}\hfill\newline}% + \cnltxlist + } + {\endcnltxlist} + +\def\at{\cnltxat} +\def\bang{\cnltxbang} +\def\equal{\cnltxequal} + +\newcommand*\BibTeX{\texorpdfstring{\hologo{BibTeX}}{BibTeX}} + +\begin{document} + +\part{About The Bundle} + +\section{Background} + +The \cnltx\ bundle contains different packages and classes\footnote{Well, + \emph{one} class for the time being,}. I developed it as a successor of my +class \cls{cnpkgdoc}~\cite{cls:cnpkgdoc} that I used until now for writing the +documentation of my packages. The intention behind the new bundle is a +cleaner interface and less unnecessary ballast, hence the separation into +packages and classes. This is actually a bit of a contradiction: the document +class \cnltxdoc\ loads \emph{all} packages of the bundle which makes it more +feature-rich than \cls{cnpkgdoc} eber used to be. The bundle provides source +code environments that also print the output and defines quite a lot of macros +for formatting of control sequence names, package names, package options and +so on. + +Part of the motivation is also that users have asked me how I created the +manuals for my packages. Now I can refer to this bundle. + +Another reason for the splitting into separate packages is -- besides the +advantage of easier maintenance -- is that I wanted to add programming tools +that I often use into \cnltxbase\ which may allow me (and others) to use them +for other packages, too, without having to define them each time. So it is +quite likely that \cnltxbase\ will get extended in the future. + +The bundle provides \pkg{listings} style for \LaTeX\ code, bibliography +database files and index style files. It provides a \pkg{biblatex} citation +and bibliography style closely linked to \cnltxdoc. It provides a +bibliography database file containing many \LaTeX\ packages. It +provides\ldots\ Let's stop here. You see that the bundle provides a lot of +different features which explains why this manual is more than 50~pages long. + +The most detailed documentation for the bundle is as always the source code of +the \file{sty} and \file{cls} files but I'm trying to provide a documentation +as comprehensive as possible. Reading the source files may show how things +are implemented but the intended use only becomes clear when you read this +manual. + +The bundle reflects the fact that I haven't started using literate +programming, yet. I don't use \code{docstrip} and don't write \file{dtx} +files but always write the \file{sty} or \code{cls} files directly. I write +the manual always at the same time but as a separate file. While I'm entirely +aware of the advantages of literate programming I never could bring myself to +start to use it myself. As a consequence I have no idea if this bundle can be +used for it or not. + +Source code formatting is done with the help of the powerful +\pkg{listings} package~\cite{pkg:listings} by \heinz\ and later \moses, now +maintained by \hoffmann. The only real drawback I have found with it is +recognizing starred und un-starred versions of an environment as different +keywords. This does not seem to be possible which is why indexing of such +environments will lead to wrong page numbers. + +The fancy frames of the source code examples are realized with the +\pkg{mdframed} package by \daniel~\cite{pkg:mdframed}, loaded with the option +\keyis*{framemethod}{tikz}. + +Besides all this I included some other ideas of mine in this bundle which are +all provided by \cnltxtools. This includes a mechansim for defining clever +abbreviations or macros that make it easy to index names the same way +\pkg{biblatex} does. + + +\section{Bundled Packages, Classes and Files} + +The \cnltx\ bundle currently bundles the following packages, classes and +files: +\begin{itemize} + \item \cnltxbase\ -- a package that defines base macros for error-messaging, + expansion control, tokenlist manipulation and defining of expandable + macros. It also provides color definitions and defines a few color + schemes for the \cnltxdoc\ class. All other packages and classes of the + \cnltx\ bundle load this package. This package can be used + stand-alone. \\ + \verbcode+\usepackage{cnltx-base}+ + \item \cnltxdoc\ -- a class for writing package manuals. Loads + \cnltxexample\ and \cnltxtools\ and implicitly all other files of the + bundle. \\ + \verbcode+\documentclass{cnltx-doc}+ + \item \cnltxexample\ -- a package that defines macros and environments for + describing control sequences and options and for including source code. + Loads \cnltxlistings. This package can be used stand-alone. \\ + \verbcode+\usepackage{cnltx-example}+ + \item \sinceversion{0.4}\cnltxlistings\ -- a package that defines the + listings language `BibTeX'. Also defines a list of highlighted control + sequence names and environment names, loaded by \cnltxexample. The + additional control sequence and environment names used to be defined in + \cnltxcsnames. That package got removed and its contents are now provided + by \cnltxlistings. This package can be used stand-alone. \\ + \verbcode+\usepackage{cnltx-listings}+ + \item \sinceversion{0.2}\cnltxtools\ -- a package that defines tools used by + \cnltxdoc\ that are unrelated to \LaTeX\ documentation \latin{per se}. + This package can be used stand-alone. \\ + \verbcode+\usepackage{cnltx-tools}+ + \item \file{cnltx.ist} -- an index style file that is used when the option + \option{add-index} for \cnltxdoc\ is activated and the option + \option{index-style} is not used. + \item \sinceversion{0.4}\file{cnltx.bib} -- a bibliography file that + contains a small but growing number of package entries. Used by + \cnltxdoc\ when the \option{add-bib} is used. + \item \sinceversion{0.4}\file{cnltx.bbx}, \file{cnltx.cbx} and + \file{cnltx.dbx} -- files related to the \pkg{biblatex} style + \code{cnltx}. The \pkg{biblatex} style defined in those files is used + when the \option{add-bib} for \cnltxdoc\ is used. +\end{itemize} + +\section{License and Requirements}\label{sec:license} +\license + +The \cnltxbase\ package loads the following packages: +\needpackage{pgfopts}~\cite{pkg:pgfopts}, +\needpackage{etoolbox}~\cite{pkg:etoolbox}, +\pkg{ltxcmds}\footnote{\CTANurl{oberdiek}}~\cite{pkg:ltxcmds}, +\needpackage{trimspaces}~\cite{pkg:trimspaces} and +\needpackage{xcolor}~\cite{pkg:xcolor}. + +The \cnltxdoc\ class loads the packages \cnltxbase, \cnltxexample, +\needpackage{ulem}~\cite{pkg:ulem}, +\pkg{translations}~\cite{pkg:translations}, +\needpackage[macros/latex/required/tools]{multicol}~\cite{pkg:multicol}, +\needpackage[macros/latex/contrib/ms]{ragged2e}~\cite{pkg:ragged2e}, +\needpackage{marginnote}~\cite{pkg:marginnote} and +\needpackage{hyperref}~\cite{pkg:hyperref}. It is a wrapper class for the +\KOMAScript\ class +\cls{scrartcl}\footnote{\CTANurl{koma-script}}~\cite{bnd:koma-script}. The +class has the option \option{load-preamble} which when used will load +additional packages, see section~\vref{sec:preamble} for details. + +The \cnltxexample\ package loads the packages: \cnltxbase, \cnltxlistings, +\cnltxtools, \needpackage{translations}, +\needpackage{mdframed}~\cite{pkg:mdframed} and +\needpackage{idxcmds}~\cite{pkg:idxcmds}. + +The \cnltxlistings\ package loads the packages \cnltxbase, +\needpackage{listings}~\cite{pkg:listings} and +\needpackage{catchfile}~\cite{pkg:catchfile}. + +The \cnltxtools\ package loads the packages \cnltxbase\ and +\needpackage[macros/latex/contrib/oberdiek]{accsupp}~\cite{pkg:accsupp}. + +All other packages that are loaded are loaded by the mentioned packages and +not directly by any of the packages or classes of the \cnltx\ bundle. Like +all of my packages \cnltx\ implicitly relies on an up to date \TeX\ +distribution. + +\part{Details of Available Commands, Environments and Options} + +\section{Options and Setup} +The \cnltx\ bundle has a large number of options. The \cnltxdoc\ class only +knows a few options (described in section~\vref{sec:class:options}) as +\emph{class} options, though. All other options regardless if they're defined +by a package or a class can and should be set with the setup command: +\begin{commands} + \command{setcnltx}[\marg{options}] + Setup command for the \cnltx\ bundle. This command is provided by + \cnltxbase. +\end{commands} +The source code environments defined by the \cnltxexample\ package also have +optional arguments that can be used to set the options for the environment +locally. + +\section{Available Commands} +\subsection{Description of Macros, Environments and Options}\label{sec:cmds:macros} + +The commands described in this section all are provided by the \cnltxexample\ +package\bypackage{example}. They all are related to the typesetting of +provided macros, options and the like. + +\begin{commands} + \command{code}[\marg{arg}] + Formatting of source code. This is \emph{no} verbatim command. Used + internally in the following commands. + \command{verbcode}[\meta{char}\meta{code}\meta{char}] + \sinceversion{0.2}A verbatim command that uses the same formatting as the + source code example environments, \cf\ section~\ref{sec:usage:examples}. + This is a wrapper for \cs*{lstinline} which loads the corresponding + style. + \command{cs}[\sarg\marg{name}] + Format the control sequence \meta{name}, \cs{cs}\Marg{name}: + \cs*{name}. Adds a corresponding index entry. The starred form does not + add an index entry. + \command{csidx}[\marg{name}] + Adds an index entry but does not typeset the control sequence + \meta{name}. + \command{env}[\sarg\marg{name}] + Format the environment \meta{name}, \cs{env}\Marg{name}: + \env*{name}. Adds a corresponding index entry with a hint that the entry + refers to an environment. The starred form does not add an index entry. + \command{envidx}[\marg{name}] + Adds an index entry but does not typeset the environment \meta{name}. + \command{meta}[\marg{meta}] + Description of an argument, \cs{meta}\Marg{meta}: \meta{meta}. + \command{marg}[\marg{arg}] + A mandatory argument. \meta{arg} is formatted with \cs{meta} if it is not + blank, \cs{marg}\Marg{arg}: \marg{arg}. + \command{Marg}[\marg{arg}] + \sinceversion{0.2}A mandatory argument. \meta{arg} is formatted with + \cs{code} if it is not blank, \cs{Marg}\Marg{arg}: \Marg{arg}. + \command{oarg}[\marg{arg}] + An optional argument. \meta{arg} is formatted with \cs{meta} if it is not + blank, \cs{oarg}\Marg{arg}: \oarg{arg}. + \command{Oarg}[\marg{arg}] + \sinceversion{0.2}An optional argument. \meta{arg} is formatted with + \cs{code} if it is not blank, \cs{Oarg}\Marg{arg}: \Oarg{arg}. + \command{darg}[\marg{arg}] + An argument with parentheses as delimiters. \meta{arg} is formatted with + \cs{meta} if it is not blank, \cs{darg}\Marg{arg}: \darg{arg}. + \command{Darg}[\marg{arg}] + \sinceversion{0.2}An argument with parentheses as delimiters. \meta{arg} + is formatted with \cs{code} if it is not blank, \cs{Darg}\Marg{arg}: + \Darg{arg}. + \command{sarg} + An optional star argument, \cs{sarg}: \sarg. + \command{option}[\sarg\marg{name}] + An option \meta{name}, \cs{option}\Marg{name}: \option{name}. Adds a + corresponding index entry. The starred form does not add an index entry. + \command{optionidx}[\marg{name}] + Adds an index entry but does not typeset the option \meta{name}. + \command{module}[\sarg\marg{name}] + A module \meta{name}, \cs{module}\Marg{name}: \module{name}. Adds a + corresponding index entry. The starred form does not add an index entry. + In some of my packages I like to organize options by grouping them in + different classes that I call ``modules''. This command refers to those + modules. + \command{moduleidx}[\sarg\marg{name}] + Adds an index entry but does not typeset the option \meta{name}. + \command{key}[\sarg\code{-}\marg{name}\marg{value}] + A key \meta{name} with value \meta{value}, the optional star prevents an + index entry, the optional \code{-} strips the braces around \meta{value}; + \cs{key}\Marg{key}\Marg{value}: \key{key}{value}; + \cs{key}\code{-}\Marg{key}\Marg{value}: \key-{key}{value} + \command{keyis}[\sarg\marg{name}\marg{value}] + \sinceversion{0.2}A key \meta{name} set to value \meta{value}, the + optional star prevents an index entry, \cs{key}\Marg{keyis}\Marg{value}: + \keyis{key}{value}. + \command{choices}[\marg{clist of choices}] + A list of choices, \cs{choices}\Marg{one,two,three}: + \choices{one,two,three} + \command{choicekey}[\marg{name}\marg{clist of choices}] + A key \meta{name} with a list of possible values, + \cs{choicekey}\Marg{key}\Marg{one,two,three}: + \choicekey{key}{one,two,three} + \command{boolkey}[\marg{name}] + A boolean key \meta{name} with choices \code{true} and \code{false}, + \cs{boolkey}\Marg{key}: \boolkey{key} + \command{default}[\marg{value}] + Markup for a default choice, + \cs{choices}\Marg{one,\cs{default}\Marg{two},three}: + \choices{one,\default{two},three} +\end{commands} + + +\subsection{Versioning Commands, Licensing and Related Stuff}\label{sec:cmds:versioning} + +The commands described in this section are provided by the \cnltx\ +class\byclass\ except where indicated differently. These commands are related +to information about the legal stuff of a package and where to find it on th +world wide web. + +\begin{commands} + \command{sinceversion}[\marg{version}] + \sinceversion{0.0}Gives a sidenote like the one on the left. + \command{changedversion}[\marg{version}] + \changedversion{0.0}Gives a sidenote like the one on the left. + \command{newnote}[\sarg\marg{cs}\oarg{num}\oarg{optional}\marg{definition}] + Defines a note like \cs{sinceversion}. The syntax of the command is the + same as the one of \cs*{newcommand}. \cs{sinceversion} was defined as + follows:\\ + \verbcode+\newnote*\sinceversion[1]{Introduced in version~#1}+ + \command{newpackagename}[\marg{cs}\marg{name}] + Define a comand \meta{cs} that prints \meta{name} formatted like \cnltx, + \ie\ in small caps and colored with the color \code{cnltx} (see + section~\ref{sec:actual-used-color}). + \command{lppl} + Typesets ``\lppl'' and adds a corresponding index entry. + \command{LPPL} + Typesets ``\LPPL'' and adds the same index entry as \cs{lppl}. + \command{license}[\sarg\oarg{maintenance status}]\Default{maintained} + \changedversion{0.2}Typesets `\license*'. The un-starred variant adds a + \cs*{par}. + \command{ctan} + Typesets ``\ctan'' and adds a corresponding index entry. + \command{CTAN} + Typesets ``\CTAN'' and adds the same index entry as \cs{ctan}. + \command{pkg}[\sarg\marg{package}] + \bypackage{example}Format the package name \meta{package} and add an + index entry. The starred variant adds nothing to the index. + \command{pkgidx}[\marg{package}] + \bypackage{example}Add an index entry for the package \meta{package}. + \command{cls}[\sarg\marg{class}] + \bypackage{example}Format the class name \meta{class} and add an index + entry. The starred variant adds nothing to the index. + \command{clsidx}[\marg{class}] + \bypackage{example}Add an index entry for the class \meta{class}. + \command{CTANurl}[\oarg{directory}\marg{name}] + Writes a \ctan\ link like the ones in section~\vref{sec:license} in the + footnotes. The predefined directory is \code{macros/latex/contrib}. The + link address will be:\par + \code{http://mirrors.ctan.org/\meta{directory}/\meta{name}/}. + \command{needpackage}[\oarg{directory}\marg{name}] + \sinceversion{0.2}A wrapper for + \verbcode+\pkg{#2}\footnote{\CTANurl[#1]{#2}}+ + \command{needclass}[\oarg{directory}\marg{name}] + \sinceversion{0.2}A wrapper for + \verbcode+\cls{#2}\footnote{\CTANurl[#1]{#2}}+ +\end{commands} + +\begin{example} + \newpackagename{\foothree}{foo-3}% + now \foothree\ looks like \cnltx. +\end{example} + +\subsection{Input Source Code Files} +Similar to the environments described in section~\vref{sec:envs:sourcecode} +\cnltxexample\ provides a few commands for inputting source code files, +formatting and printing the source code and inputting the file directly. +\begin{commands} + \command{inputexample}[\oarg{options}\marg{file name}] + The equivalent of the \env{example} environment, see + section~\vref{sec:envs:sourcecode}. + \command{inputsidebyside}[\oarg{options}\marg{file name}] + The equivalent of the \env{sidebyside} environment, see + section~\vref{sec:envs:sourcecode}. + \command{inputsourcecode}[\oarg{options}\marg{file name}] + The equivalent of the \env{sourcecode} environment, see + section~\vref{sec:envs:sourcecode}. + \command{implementation}[\oarg{options}\marg{file name}] + \sinceversion{0.5}A wrapper for + \verbcode+\lstinputlisting[style=cnltx,#1]{#2}+ +\end{commands} + +It is possible to define further commands like this: +\begin{commands} + \command{newinputsourcefilecmd}[\oarg{option}\marg{control sequence}] + Defines \meta{control sequence} as a new source code input command where + \meta{options} are preset. +\end{commands} + +The existing commands have been defined like this: +\begin{sourcecode} + \newinputsourcefilecmd\inputexample + \newinputsourcefilecmd[side-by-side]\inputsidebyside + \newinputsourcefilecmd[code-only]\inputsourcecode +\end{sourcecode} + +\section{Available Environments}\label{sec:envs} +\subsection{Description Environments}\label{sec:envs:description} +\cnltxdoc\ defines some description environments used to describe macros, +environments or options. + +\begin{environments} + \environment{commands} + A description-like environment for describing commands. While this + environment is a list internally and thus recognizes \cs*{item} own + commands are used to describe macros. They are explained in + section~\vref{sec:usage:commands}. + \environment{options} + A description-like environment for describing options. While this + environment is a list internally and thus recognizes \cs*{item} own + commands are used to describe options. They are explained in + section~\vref{sec:usage:options}. + \environment{environments} + A description-like environment for describing environments. While this + environment is a list internally and thus recognizes \cs*{item} own + commands are used to describe environments. They are explained in + section~\vref{sec:usage:environments}. +\end{environments} + +These environments are lists all using the same internal \cs*{list}. The +setup of this list can be changed via an option: + +\begin{options} + \keyval{list-setup}{definitions}{} + \Default{\cs*{leftmargin}=0pt \cs*{labelwidth}=2em \cs*{labelsep}=0pt + \cs*{itemindent}=-1em } + The setup of the \cs*{list} used by the \env{commands}, \env{options} and + \env{environments} environments. +\end{options} + +\subsection{Source Code Environments}\label{sec:envs:sourcecode} +\cnltxexample\ defines the following environments that are used to display +source code and possibly the output of the source code, too. + +\begin{environments} + \environment{example}[\oarg{options}] + This environment is a formatted verbatim environment that also inputs the + output of the inputted code. This environment is described in + section~\vref{sec:usage:examples}. + \environment{sidebyside}[\oarg{options}] + This environment is a formatted verbatim environment that also inputs the + output of the inputted code. Source and output are printed side-by-side. + This environment is described in section~\vref{sec:usage:examples}. + \environment{sourcecode}[\oarg{options}] + This environment is a formatted verbatim environment. This environment is + described in section~\vref{sec:usage:examples}. +\end{environments} + +\sinceversion{0.2}In each of these environments certain hooks are provided +that can be used to add definitions you like: +\begin{options} + \keyval{pre-code}{definitions} + \meta{definitions} are placed before the source code is inserted. + \keyval{after-code}{definitions} + \meta{definitions} are placed after the source code is inserted. + \keyval{pre-source}{definitions} + \meta{definitions} are placed before the output of the source code is + inserted. + \keyval{after-source}{definitions} + \meta{definitions} are placed after the output of the source code is + inserted. +\end{options} + +It is possible to define further environments like this: +\begin{commands} + \command{newsourcecodeenv}[\oarg{option}\marg{name}] + Defines \meta{name} as a new source code environment where + \meta{options} are preset. +\end{commands} + +The existing environments have been defined like this: +\begin{sourcecode} + \newsourcecodeenv{example} + \newsourcecodeenv[side-by-side]{sidebyside} + \newsourcecodeenv[code-only]{sourcecode} +\end{sourcecode} + +\section{Usage of the Various Functions} +\subsection{Command Descriptions}\label{sec:usage:commands} +Inside of the environment \env{commands} that was introduced in +section~\vref{sec:envs:description} items are input via the following command: +\begin{commands} + \command{command}[\sarg\marg{name}\oarg{stuff after}] + This macro formats a control sequence with \cs{cs} and puts a line break + after it. The optional argument allows printing things directly after the + command name and can thus be used for adding arguments. The star prevents + the creation of an index entry. + \command{Default}[\sarg\code{!}\marg{code}] + \changedversion{0.3}This command can be placed after \cs{command} or + \cs{opt} in order to give a default definition of a macro or a default + value of an option. The definition will then be placed on the same line + flush right. The star prevents the insertion of \cs*{newline} after it. + The optional bang adds the information that an option is mandatory, \ie\ + has to be set. + \command{expandable} + \sinceversion{0.5}Adds the symbol \textcolor{expandable}{\expandablesign} + to the left of a command in the margin to indicate that the command is + expandable. This command should be used \emph{immediately} before + \cs{command}. + \command{unexpandable} + \sinceversion{0.5}Adds the symbol \textcolor{unexpandable}{\expandablesign} + to the left of a command in the margin to indicate that the command is not + expandable. This command should be used \emph{immediately} before + \cs{command}. + \command{expandablesign}\Default{\cs*{textasteriskcentered}} + \sinceversion{0.5}The macro that holds the sign used by \cs{expandable} + and \cs{unexpandable}. +\end{commands} + +\begin{example} + \begin{commands} + \command{cs} + This is about foo bar baz. + \command{cs}[\marg{arg}] + This one has an argument. + \command{cs}[\sarg\oarg{option}] + This has a star variant and an optional argument. + \command{cs}\Default{foo bar} + This one has the default replacement text \code{foo bar} + \expandable\command{cs} + This macro is expandable. + \end{commands} +\end{example} + +The \cs{expandablesign} can of course be redefined to something else you like +better. For the sake of completeness there is an option that does exactly +this: +\begin{options} + \keyval{expandable-sign}{definition}\Default{\cs*{textasteriskcentered}} + \sinceversion{0.5}Redefines \cs{expandablesign} to \meta{definition}. +\end{options} + +\subsection{Option Descriptions}\label{sec:usage:options} +The \env{options} environment knows a few more commands to meet all the +different kinds of options. +\begin{commands} + \command{opt}[\sarg] + An option. The star prevents an index entry. + \command{keyval}[\sarg\code{-}\marg{key}\marg{value}] + A key/value option. The optional star prevents an index entry. The + optional \code{-} strips the braces around \meta{value}, see the example + below. + \command{keychoice}[\sarg\marg{key}\marg{list of choices}] + A key/value option where the value is one of a list of choices. The star + prevents an index entry. + \command{keybool}[\sarg\marg{name}] + A boolean key, that ist a choice key with choices \code{true} and + \code{false}. The star prevents an index entry. + \command{Default}[\sarg\code{!}\marg{code}] + \changedversion{0.3}This command can be placed after \cs{command} or + \cs{opt} (or any of the other commands for adding an option to the + \env{options} list) in order to give a default definition of a macro or a + default value of an option. The definition will then be placed on the + same line flush right. The star prevents the insertion of \cs*{newline} + after it. The optional bang adds the information that an option is + mandatory, \ie, it has to be set. + \command{Module}[\sarg\code{!}\marg{name}] + \sinceversion{0.3}This command can be placed after \cs{option} but before + \cs{Default} in order to determine the module the option belongs to. It + will be written in the left margin next to the option name. The star + prevents the insertion of \cs*{newline} after it. The optional bang + \emph{adds} an index entry for the module. This is somehow inconsistent + with many of the other commands where an optional star \emph{prevents} an + index entry but it fits to the functionality of \cs{Default} which is why + this syntax was chosen. +\end{commands} + +The following demonstrates how the commands would be used to create option +descriptions: +\begin{sourcecode} + \begin{options} + \opt{foo} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \opt*{foo}\Default{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \opt{foo}\Module{bar} + This option belongs to \module*{bar}. Let's add a few more words so + that the line gets filled and we can see how the output actually + looks. + \opt{foo}\Module{bar}\Default{baz} + This option belongs to \module*{bar}. Let's add a few more words so + that the line gets filled and we can see how the output actually + looks. + \keyval{foo}{bar}\Default + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval{foo}{bar}\Default! + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval*{foo}{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval-{foo}{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keychoice{foo}{one,two,three} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keybool{foo} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \end{options} +\end{sourcecode} + +The code above gives the following output: +\begin{options} + \opt{foo} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \opt*{foo}\Default{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \opt{foo}\Module{bar} + This option belongs to the module \module{bar}. Let's add a few more + words so that the line gets filled and we can see how the output actually + looks. + \opt{foo}\Module{bar}\Default{baz} + This option belongs to the module \module{bar}. Let's add a few more + words so that the line gets filled and we can see how the output actually + looks. + \keyval{foo}{bar}\Default + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval{foo}{bar}\Default! + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval*{foo}{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keyval-{foo}{bar} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keychoice{foo}{one,two,three} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. + \keybool{foo} + This makes stuff. Let's add a few more words so that the line gets + filled and we can see how the output actually looks. +\end{options} + +\subsection{Environment Descriptions}\label{sec:usage:environments} +Environment descriptions are made -- unsurprisingly -- with the +\env{environments} environment. It knows the command \cs{environment}: + +\begin{commands} + \command{environment}[\sarg\marg{name}\oarg{stuff after}] + This macro prints the environment name and puts a line break + after it. The optional argument allows printing things directly after the + environment name and can thus be used for adding arguments. +\end{commands} + +\begin{example} + \begin{environments} + \environment*{foobar}[\oarg{options}] + This is environment \env*{foobar}. The star prevents it from being + added to the index. + \end{environments} +\end{example} + +\subsection{Code Examples}\label{sec:usage:examples} +Code examples can be included through the \env{example} environment or the +\env{sourcecode} environment. The \env{sourcecode} only shows the piece of +\LaTeX code while the \env{example} environment also shows the output of the +\LaTeX\ code. +\begin{sourcecode} + \begin{example} + a \LaTeX\ code example + \end{example} +\end{sourcecode} +This example would give: + +\begin{example} + a \LaTeX\ code example +\end{example} + +Both environments can be influenced by options: +\begin{options} + \keybool{code-only}\Default{false} + Only typeset the code as code but don't include it afterwards. The + code box above is an example for the usage of this option. This option + has no effect on the \env{sourcecode} environment: is is already set for + this environment. + \keybool{side-by-side}\Default{false} + Typeset source and output side by side. The code is input on the left and + the output on the right. Side by side examples are typeset in + \env*{minipage} environments with all consequences that come with them + (think of \cs*{parindent}, page breaks \ldots). Since a \code{minipage} + cannot be broken across pages the surrounding \pkg{mdframed} frame gets + the option \keyis*{nobreak}{true}. This option has no effect on the + \env{sourcecode} environment. + \keybool{code-left}\Default{true} + If \code{true} and the option \option{side-by-side} is chosen the source + code is printed on the right side else on the left. This option has no + effect on the \env{sourcecode} environment. + \keyval{code-sep}{definition}\Default{\cs*{hrulefill}} + Code that is inserted between a source code and the corresponding output + when printed below each other. This option has no effect on the + \env{sourcecode} environment. +\end{options} + +The same example again, this time using \option{side-by-side} (which is the +same as using the \env{sidebyside} environment): + +\begin{example}[side-by-side] + a \LaTeX\ code example +\end{example} + +\option{side-by-side} and \keyis{code-left}{false}: + +\begin{example}[side-by-side,code-left=false] + a \LaTeX\ code example +\end{example} + +The frame around the examples is done by the +\pkg{mdframed} package~\cite{pkg:mdframed}. It is of course possible to +customize it: +\begin{options} + \keyval{add-frame-options}{\pkg{mdframed} options}\Default + Add options to the predefined settings. + \keyval{frame-options}{\pkg{mdframed} options}{} + \Default{backgroundcolor=cnltxbg,linecolor=cnltx,roundcorner=5pt} + Overwrite the settings with new ones. +\end{options} + +The source code is formatted using the great \pkg{listings} +package~\cite{pkg:listings} by \heinz, \moses, and \hoffmann. Similar options +exist to adapt \pkg{listings}' options that are used for formatting the source +code. The predefined style has many options that will not be mentioned here. +If you're interested you can find them in \file{cnltx-example.sty} or in +section~\vref{sec:listings-sourcecode}. +\begin{options} + \keyval-{gobble}{integer}\Default{2} + The number of initial characters that is gobbled from each line. + \keyval{add-cmds}{list of csnames}\Default + A list of control sequence names that should be recognized as a command + sequence in the source code examples and should be formatted accordingly. + The control sequence names in this list will also get an index entry when + they're used in the source example. This is done internally via + \cs{csidx}. The option should be used to add the new commands that are + defined by the package for which you are writing the manual for. + \keyval{add-silent-cmds}{list of csnames} + A list of control sequence names that should be recognized as a command + sequence in the source code examples and should be formatted accordingly. + The control sequence names in this list will \emph{not} get an index entry + when they're used in the source example. There already is quite a large + but far from comprehensive list of silent commands but many are still + missing. This option allows you to extend the list on a per document + basis. + \keyval{add-listings-options}{\pkg{listings} options}\Default + Additional options for the \pkg{listings}~\cite{pkg:listings} + environments. \emph{This redefines the \code{cnltx} \pkg{listings} style + which will affect all sourcecode environments!} + \keyval{listings-options}{\pkg{listings} options} + Overwrite existing options with new ones. This can be used to build an own + style from scratch. \emph{This redefines the \code{cnltx} \pkg{listings} + style which will affect all sourcecode environments!} + \keyval{sourcecode-options}{\pkg{listings} options} + \sinceversion{0.4}These options are added to the \pkg{listings} options of + the source code environments without redefing the main style. Hence it + can be used to locally add options to a source code environment. + \keyval{add-envs}{list of environment names}\Default + Like \option{add-cmds} but for environment names. + \keyval{add-silent-envs}{list of environment names} + Like \option{add-silent-cmds} but for environment names. +\end{options} + +\subsection{Example File} +Let's say you're documenting a package called \code{mypackage} that provides +the command \cs*{mycommand} and the environment \env*{myenv}. The basic +manual setup could then look something like this: + +\begin{sourcecode} + \documentclass[load-preamble]{cnltx-doc} + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \setcnltx{ + package = mypackage , + authors = John Doe , + email = john@doe.com , + add-cmds = {mycommand} , + add-envs = {myenv} + } + \begin{document} + ... + \end{document} +\end{sourcecode} + +\subsection{Additional Functionality Provided by \cnltxbase} +The \cnltxbase\ package's main purpose is to provide programming facilities. +Most of its macros are listed in section~\ref{sec:defined-cnltxbase}. +However, I like to explain some of its features in a bit more detail. + +\subsubsection{Looking for Trailing Punctuation} +The command \cs{cnltx\at ifpunctuation} is is a conditional that detects if a +punctuaction mark follows and acts depending on it. What counts as a +punctuation mark can be set by the user. + +\begin{commands} + \command{cnltx\at ifpunctuation}[\sarg\oarg{punctuation + marks}\marg{true}\marg{false}\meta{trailing punctuation}] + The starred version does not gobble the trailing punctuation while the + unstarred does. That's why in the unstarred version you can also use + \cs{cnltx\at trailpunct} to access the gobbled punctuation mark. The + optional argument sets the punctuation marks that should be considered for + this use only. +\end{commands} +\begin{options} + \keyval{set-trail-punct}{punctuation marks}\Default{,.!?;:} + Sets the default list of punctuation marks that should be checked if the + optional argument of \cs{cnltx\at ifpunctuation} is not used. +\end{options} + +The usage is probably self-explaining: +\begin{example} + \makeatletter + \cnltx@ifpunctuation{(test\cnltx@trailpunct)}{(test)}!\par + \cnltx@ifpunctuation[.]{(test\cnltx@trailpunct)}{(test)}!\par + a punctuation mark \cnltx@ifpunctuation*{follows}{doesn't follow}!\par + a full stop \cnltx@ifpunctuation*[.]{follows}{doesn't follow}! +\end{example} + +If the non-starred variant has gobbled a \cs*{par} the \cs*{par} is placed +back: + +\begin{example} + \makeatletter + \def\test{\cnltx@ifpunctuation{(test\cnltx@trailpunct)}{(test)}}% + \makeatother + \test + + \test. + + \test{} . +\end{example} + +\subsubsection{Counter Representation Commands}\label{sec:count-repr-comm} +\minisec{Background} + +A counter representation command like \cs*{arabic}\Marg{section} always is a +command that calls an associated internal command (\cs*{@arabic} in the case +of our example) that acts on the count associated with the counter: +\begin{sourcecode} + \def\arabic#1{\expandafter\@arabic\csname c@#1\endcsname} + \def\@arabic#1{\number #1} +\end{sourcecode} +The command \cs*{arabic}\marg{counter} builds a command sequence +\cs*{c@\meta{counter}} from its argument \meta{counter}. It then calls the +internal command \cs*{@arabic} that takes this command sequence as an +argument. The command sequence \cs*{c@\meta{counter}} is the count (in the +\TeX\ sense) that is associated with the counter \meta{counter}, \ie, it holds +the actual number. The command \cs*{@arabic} now simply typesets the integer +value of the count. + +The same holds for every counter representation command. The principle always +is as follows: +\begin{sourcecode} + \def\foo#1{\expandafter\@foo\csname c@#1\endcsname} + \def\@foo#1{do something with #1 (where #1 is a count)} +\end{sourcecode} +This means in order to get a new counter representation command you actually +need to define \emph{two} macros. + +\cnltxbase\ defines an interface that allows to define both commands at once +without having to think about \cs*{expandafter}, associated counts, internal +command names and so on. The only thing left to do is choosing a name for the +counter representation and providing a valid definition of what should happen +with the (integer) value of the counter. + +\minisec{New Commands} + +\begin{commands} + \command{DeclareCounterRepresentation}[\marg{command}\marg{definition}] + Declares a new counter representation command and its internal equivalent. + In the \meta{definition} \code{\#1} is used to refer to the counter + \emph{number}, that is, the value of \cs*{c@\meta{counter}}. This command + will silently overwrite any existing definition. + \command{newcounterrepresentation}[\marg{command}\marg{definition}] + Defines a new counter representation command and its internal equivalent. + In the \meta{definition} \code{\#1} is used to refer to the counter + \emph{number}, that is, the value of \cs*{c@\meta{counter}}. This command + will issue an error if either the user command or the internal command + (\cf\ \cs*{arabic} and \cs*{@arabic}) already exist. + \command{providecounterrepresentation}[\marg{command}\marg{definition}] + Provides a new counter representation command and its internal equivalent. + In the \meta{definition} \code{\#1} is used to refer to the counter + \emph{number}, that is, the value of \cs*{c@\meta{counter}}. This command + will define the commands only if neither the user command nor the internal + command (\cf\ \cs*{arabic} and \cs*{@arabic}) already exist and will do + nothing if either of them exist. + \command{renewcounterrepresentation}[\marg{command}\marg{definition}] + Redefines an existing counter representation command and its internal + equivalent. In the \meta{definition} \code{\#1} is used to refer to the + counter \emph{number}, that is, the value of \cs*{c@\meta{counter}}. This + command will issue an error if either the user command or the internal + command (\cf\ \cs*{arabic} and \cs*{@arabic}) or both already exist. +\end{commands} + +Let's take a look at what is actually defined by these commands: +\begin{example} + \makeatletter\ttfamily + before:\par + \meaning\arabic\par + \meaning\@arabic + + \renewcounterrepresentation\arabic{\the\numexpr#1\relax}% + after:\par + \meaning\arabic\par + \meaning\@arabic +\end{example} + +As you can see nothing bad happens. The commands are only a convenient +interface. Let's take a look at some more realistic examples. The above +redefinition was only a demonstration. For example you may want to have a +representation which calculates the displayed value from the counter value? + +\begin{example} + \newcounterrepresentation\minusone{\the\numexpr#1-1\relax}% + \newcounterrepresentation\multoffourrm{\romannumeral\numexpr(4*#1)-4\relax}% + % \newrobustcmd is provided by the `etoolbox' package + \newrobustcmd*\circlenumber[1]{% + \tikz[baseline]\node[anchor=base,draw,shape=circle]{\number#1};}% + \newcounterrepresentation\circled{\circlenumber{#1}}% + \makeatletter + \newcounterrepresentation\twodigits{\two@digits{#1}}% + \makeatother + \newcounter{test}% + \setcounter{test}{9} + + \minusone{test}\par + \multoffourrm{test}\par + \circled{test}\par + \twodigits{test} +\end{example} + +\subsubsection{Expandable Document Commands} +The commands presented in this section are highly experimental. \emph{Use them + \emph{only} if you really have to!} +\begin{commands} + \command{newexpandablecmd}[\sarg\marg{cs}\oarg{num args}\oarg{default + opt}\marg{definition}] + \sinceversion{0.7}This command has the same syntax as \cs*{newcommand}. + The difference is that if \meta{cs} is defined with an optional argument + it is still fully expandable. This comes with a cost: in order to still + being able to check for the optional argument it needs to see a following + token as argument. If it is used without optional argument and has no + mandatory arguments it may be necessary to add a trailing \cs*{empty} or + something. There's another drawback: a command \cs*{test} thus defined + cannot distinguish between \verbcode+\test[]+ and \verbcode+\test{[}]+ and + will misinterpret the second as a present optional argument. + + My recommendation is to never use this for defining a user + command.\footnote{I can see the contradiction here: if a command is no + user command there is no need for an optional argument.} Use it in code + you can control and only if you have to. + + If you define a command \emph{without} optional argument this command + falls back to \cs*{newcommand}. + \command{renewexpandablecmd}[\sarg\marg{cs}\oarg{num args}\oarg{default + opt}\marg{definition}] + \sinceversion{0.7}The equivalent of \cs*{renewcommand}. See description of + \cs{newexpandablecmd} for further details. + is to \cs*{newcommand}. + \command{provideexpandablecmd}[\sarg\marg{cs}\oarg{num args}\oarg{default + opt}\marg{definition}] + \sinceversion{0.7}The equivalent of \cs*{providecommand}. See description + of \cs{newexpandablecmd} for further details. +\end{commands} + +\subsection{Additional Functionality Provided by \cnltxtools} +\subsubsection{Commands for Defining Different Document Macros} +\label{sec:prov-defin-comm} + +The \cnltxtools\ package defines some additional macros which provide useful +functionality also in contexts \emph{not} documenting a \LaTeX\ package. + +\begin{commands} + \command{newname}[\marg{cs}\marg{first name}\marg{second name}] + Defines \meta{cs} to write out the full name and add an index entry sorted + by the last name. Also defines a starred variant of \meta{cs} that only + writes the last name but still adds the full index entry. + \command{cnltxacronym}[\marg{pdf and sort string}\marg{acronym}] + Typesets \meta{acronym} with small caps and uses \meta{pdf and sort + string} as \PDF\ string and for sorting the index entry that is added. + This command was used to define \cs{lppl} and \cs{ctan}. \emph{This is + not intended as a replacement for packages like + \pkg*{acro}~\cite{pkg:acro} or \pkg*{glossaries}\cite{pkg:glossaries}!} + In fact it is a ``poor man's'' solution that allows me not to require one + of those packages. + \command{newabbr}[\sarg\marg{control sequence}\marg{definition}] + Defines the abbreviation \meta{control sequence} with the definition + \meta{definition}. The star argument prevents that a dot is added at the + end of the definition. An error is raised if \meta{control sequence} + already exists. + \command{renewabbr}[\sarg\marg{control sequence}\marg{definition}] + Redefines the abbreviation \meta{control sequence} with the definition + \meta{definition}. The star argument prevents that a dot is added at the + end of the definition. An error is raised if \meta{control sequence} does + not exist already. + \command{defabbr}[\sarg\marg{control sequence}\marg{definition}] + Defines or overwrites the abbreviation \meta{control sequence} with the + definition \meta{definition}. The star argument prevents that a dot is + added at the end of the definition. + \command{cnltxtimeformat}[\marg{abbreviation}]\Default{\cs*{textsc}\Marg{\cs*{,}\#1}} + Used in some predefined abbreviations. + \command{cnltxlatin}[\marg{abbreviation}]\Default{\cs*{textit}\Marg{\#1}} + Used in some localization strings. +\end{commands} + +\begin{options} + \keyval{acronym-format}{definition}\Default{\cs*{scshape}} + Formatting of the acronyms as typeset with \cs{cnltxacronym}. +\end{options} + +A short example of the usage of \cs{newname} and \cs{cnltxacronym}: +\begin{example} + \newname\carlisle{David}{Carlisle}% + \carlisle\ is a well-known member of the \LaTeX\ community. \carlisle* is + the author of many packages such as \pkg*{longtable}. Take a look in the + index where you'll find \carlisle* mentioned. + + \lppl\ is defined as \cnltxacronym{LPPL}{lppl}. +\end{example} + +\subsubsection{Defining Abbreviations}\label{sec:defin-abbr} +In section~\ref{sec:prov-defin-comm} when describing \cs{newabbr} and similar +commands I said \enquote{The star argument prevents that a dot is added at the + end of the definition}. We should clarify what that means. Many +abbreviations end with a dot. Some don't which explains the starred form of +the commands. But why add a dot automatically in the first place? The +reasoning is two-fold: +\begin{itemize} + \item Suppose you add the dot explicitly in the definition but forget one or + two times that you did -- you'll end up with abbreviations followed by + \emph{two} dots! Macros defined with \cnltxtools\ recognize a + following dot and will not print a second one in those cases. + \item In a document where \cs*{nonfrenchspacing} is active the space after a + dot in the middle of a sentence should be shorter than the one after the + full stop ending a sentence. \TeX\ automatically interprets a dot + following a small letter as the end of a sentence and a dot after a + capital letter as a dot after an abbreviation inside of a sentence. + Usually you solve this by adding \cs*{@} in the appropriate places: + \verbcode+e.\,g.\@+ for a intra-sentence space and \verbcode+NASA\@.+ for + a inter-sentence space. The dot added by \cnltxtools\ always will be + followed by a intra-sentence space. If you add a dot explicitly it will + be your responsibility. Per default it will then act like a dot after a + small letter. +\end{itemize} + +Let's see some example: +\begin{example}[side-by-side] + \ttfamily% <= this will amplify the visual effect of \nonfrenchspacing + \newabbr\ab{a.b}% + \newabbr\AB{A.B}% + \newabbr*\cd{c.d.}% + \ab\ and some words\par + \ab. and some words\par + \AB\ and some words\par + \AB. and some words\par + \cd\ and some words +\end{example} + +Beware: \cnltxtools\ will only leave the dot out if one follows directly in +the input! That means that spaces are not ignored. However, of course \TeX\ +ignores spaces after macro names so usually this won't be an issue. If you +define an abbreviation with a macro name consisting of one non-letter where +spaces are not ignored you have to keep this fact in mind, though. + +\subsubsection{Predefined Abbreviations} +\cnltxtools\ already provides a bunch of abbreviations defined with its +\cs{newabbr} command. + +\minisec{Abbreviations that allow Localization}\label{sec:abbr-that-allow} + +\cnltxtools\ defines a few abbreviations that are sensitive to \pkg{babel} +settings. Currently only translations for English and German are provided and +the definition falls back to the English version if you're using a language +other than those. It is possible to add further localization strings quite +easily, see section~\ref{sec:language-support}. + +\begin{commands} + \command{ie} + Prints \enquote{\ie} or \enquote{\foreignlanguage{ngerman}{\ie}} + \command{eg} + Prints \enquote{\eg} or \enquote{\foreignlanguage{ngerman}{\eg}} + \command{etc} + Prints \enquote{\etc} or \enquote{\foreignlanguage{ngerman}{\etc}} + \command{cf} + Prints \enquote{\cf} or \enquote{\foreignlanguage{ngerman}{\cf}} +\end{commands} + +All of these macros add a final dot followed by \cs*{@} \emph{except} if a dot +\emph{directly} follows the macro. + +\begin{example}[side-by-side] + \eg\ and some following text\par + \eg, and some following text\par + \eg. and some following text\par + \selectlanguage{ngerman} + \eg\ and some following text\par + \eg, and some following text\par + \eg. and some following text +\end{example} + +\minisec{German Abbreviations}\label{sec:german-abbreviations} + +The following abbreviations are not sensitive to localization are and only of +use in a German text. Although they're defined: \emph{please} do not use +abbreviations at the start of a sentence! +\begin{commands} + \command{dsh} + Prints \enquote{\dsh} + \command{Dsh} + Prints \enquote{\Dsh} + \command{usf} + Prints \enquote{\usf} + \command{usw} + Prints \enquote{\usw} + \command{uswusf} + Prints \enquote{\uswusf} + \command{zB} + Prints \enquote{\zB} + \command{ZB} + Prints \enquote{\ZB} + \command{vgl} + Prints \enquote{\vgl} + \command{Vgl} + Prints \enquote{\Vgl} +\end{commands} + +These macros behave the same as the ones described in +section~\vref{sec:abbr-that-allow}. + +\begin{example}[side-by-side] + \dsh\ und weiterer Text\par + \dsh. und weiterer Text\par + \usw\ und weiterer Text\par + \usw. und weiterer Text\par + \usf\ und weiterer Text\par + \usf. und weiterer Text\par + \zB\ und weiterer Text\par + \zB. und weiterer Text +\end{example} + +\minisec{Time related Abbreviations}\label{sec:time-relat-abbr} + +The abbreviations presented in this section differ from the others in that +they're formatted by the command \cs{cnltxtimeformat}\marg{}, see +section~\vref{sec:prov-defin-comm}. +\begin{commands} + \command{AM} + Prints \enquote{\AM} + \command{PM} + Prints \enquote{\PM} + \command{AD} + Prints \enquote{\AD} + \command{BC} + Prints \enquote{\BC} +\end{commands} + +In their current definition these abbreviations are meant to be used +\emph{directly} after the time of day or the date, respectively. + +\begin{example}[side-by-side] + She left for work before 6\AM, but + did not arrive until 12\PM. The + interval 5\BC--5\AD\ is one year + shorter than the interval + 95\AD--105\AD. +\end{example} + +\section{Formatting Possibilities}\label{sec:cmds:formatting} + +One of the goals I wanted to achieve with this package is a consistent look +and an easy interface for customization. No font choice and no color choice +is fixed. In this section ways to change the formatting are shown. + +The formatting of the different commands provided by \cnltx\ and various other +properties can be changed in two ways: either by redefining the internal +commands that are used for the formatting or by setting a corresponding +option. Both variants are described in the next subsections. + +How the colors should be changed is described in section~\vref{sec:colors}. + +\subsection{Formatting by Redefining Hooks} + +You can change the formatting by redefining the following commands. They're +all defined by the \cnltxexample\ package except where indicated differently. + +\begin{commands} + \command{codefont}\Default{\cs*{ttfamily}} + This command is used for all formatting of source code. + \command{sourceformat}\Default{\cs{codefont}\cs*{small}} + Formatting of the listings. + \command{exampleformat}\Default + Special formatting of the output of a listing. + \command{versionnoteformat}\Default{\cs*{footnotesize}\cs*{sffamily}\cs*{RaggedRight}} + \byclass Formatting of the notes introduced in section~\vref{sec:cmds:versioning}. + \command{packageformat}\Default{\cs*{sffamily}} + The formatting of package names. + \command{classformat}\Default{\cs*{sffamily}} + The formatting of class names. + \command{argumentformat}\Default{\cs*{normalfont}\cs*{itshape}} + The formatting of \cs{meta}\marg{meta}. +\end{commands} + +\begin{example} + \renewcommand*\codefont{\sffamily\bfseries} + \code{foo} and \cs*{bar}, option \option{baz} +\end{example} + +\subsection{Formatting by Setting Options} + +You can change the formatting of by setting the following options. They're all +defined by the \cnltxexample\ package except where indicated differently. + +\begin{options} + \keyval{title-format}{definition}\Default{\cs*{bfseries}\cs*{scshape}} + \sinceversion{0.2}Formatting of the document title. + \keyval{abstract-width}{dimension}\Default{.75\cs*{linewidth}} + \sinceversion{0.6}The width of the \cs*{parbox} the abstract as set with + the \option{abstract} option is placed in. + \keyval{abstract-format}{definition}% + \Default{\cs*{setlength}\cs*{parskip}\Marg{.333\cs*{baselineskip}}} + \sinceversion{0.6}Code that is placed in the parbox the abstract is placed + in \emph{before} the abstract text. + \keyval{caption-font}{definition}% + \Default{\cs*{normalfont}\cs*{small}\cs*{sffamily}} + This option only has any effect if you use the option + \option{load-preamble}, see section~\vref{sec:preamble} for details on the + option. + \keyval{caption-label-font}{definition}% + \Default{\cs*{normalfont}\cs*{small}\cs*{sffamily}\cs*{scshape}} + This option only has any effect if you use the option + \option{load-preamble}, see section~\vref{sec:preamble} for details on the + option. + \keyval{code-font}{definition}\Default{\cs*{ttfamily}} + Used for all formatting of source code. + \keyval{source-format}{definition}\Default{\cs{codefont}\cs*{small}} + Formatting of the listings. + \keyval{expl-format}{definition}\Default + Special formatting of the output of a listing. + \keyval{module-sep}{definition}\Default{\cs*{,}>{}>\cs*{,}} + \byclass Change the separator between module name and corresponding option + name. + \keyval{version-note-format}{definition}% + \Default{\cs*{footnotesize}\cs*{sffamily}\cs*{RaggedRight}} + \byclass Formatting of the notes introduced in + section~\vref{sec:cmds:versioning}. + \keyval{pkg-format}{definition}\Default{\cs*{sffamily}} + The formatting of package names. + \keyval{cls-format}{definition}\Default{\cs*{sffamily}} + The formatting of class names. + \keyval{arg-format}{definition}\Default{\cs*{normalfont}\cs*{itshape}} + The formatting of \cs{meta}\marg{meta}. + \keyval{default-format}{code}\Default{\cs*{uline}} + \sinceversion{0.2}The formatting of \cs{default}'s argument. + \meta{code}'s last macro should take one argument. +\end{options} + +\begin{example} + \setcnltx{code-font=\sffamily\itshape} + \code{foo} and \cs*{bar}, option \option{baz} +\end{example} + +\section{Commands, Options and Further Settings Directly Related to the \cnltxdoc\ Class} + +\subsection{Using Class Options}\label{sec:class:options} +The \cnltxdoc\ class only knows a few options: +\begin{options} + \keybool{load-preamble}\Default{false} + See section~\vref{sec:preamble} for details. + \keybool{load-preamble+}\Default{false} + See section~\vref{sec:predefined-indexing} for details. + \keybool{add-index}\Default{false} + See section~\vref{sec:predefined-indexing} for details. + \keyval{babel-options}{options}\Default{english} + Options given to the \needpackage[macros/latex/required]{babel} package. + This option only has an effect if \keyis{load-preamble}{true}. + \keyval{scrartcl}{options}\Default + Options that are passed to the underlying class \cls{scrartcl}. \emph{All + global options you want to use should be given here.} +\end{options} + + +\subsection{Information on the Described Package or Class}\label{sec:inform-descr-pack} +A manual for a package or a class needs some information on the described +package like the package name, the version number, the date and so on. This +information is given with the following options. They are used to build the +title page of the manual. +\begin{options} + \keyval{package}{package} + The name of the package that is described. Either this option or + \option{class} or \option{name} should always be given. This command also + defines a command sequence from the package name that formats the package + name with color and small caps like \cnltx. + \keyval{class}{class} + The name of the class that is described. Either this option or + \option{package} or \option{name} should always be given. This command + also defines a command sequence from the class name that formats the class + name with color and small caps like \cnltx. + \keyval{name}{name} + The name of the class/package that is described. Either this option or + \option{package} or \option{class} should always be given. This command + also defines a command sequence from the class name that formats the class + name with color and small caps like \cnltx. + \keyval{authors}{author list} + \changedversion{0.4}Comma separated list of package/class authors. After + each author name you can add an email address by writing it in square + brackets: \verbcode+Some Name[some@name.com]+. Email addresses specified + this way get written as a footnote. At least one author should always be + given. + \keyval{version}{version number} + Version number of the package/class. \cnltx\ tries to extract the + information from the given \option{package} or \option{class}. This + option can be used to set it explicitly. + \keyval{date}{date} + Date of the package/class. \cnltx\ tries to extract the + information from the given \option{package} or \option{class}. This + option can be used to set it explicitly. + \keyval{info}{package/class info} + Information about the package/class. \cnltx\ tries to extract the + information from the given \option{package} or \option{class}. This + option can be used to set it explicitly. + \keyval{subtitle}{subtitle} + A subtitle, printed below the package/class name. + \keyval{url}{url} + The homepage of the package. + \keyval{email}{email} + A contact email address. + \keyval{abstract}{abstract} + An abstract of the package/class/manual. This is text typeset in a box of + \code{.75\cs*{linewidth}}. Actually it does not have to be text but could + be an image or whatever you like. +\end{options} + +\subsection{Building of the Manuals Title Page} +If either the \option{package} or \option{class} has been given an automatic +title page is built using the gathered information. Figure~\vref{fig:titlepage} +roughly sketches which informations is used and how the different elements are +arranged on the title page. The page style of the title page is +\code{plain}. Additionally a table of contents is automatically built that +is set in two columns. The automatic building of the title page can be +prevented by explicitly setting the following option: + +\begin{options} + \keybool{build-title} + The default state depends on other options given like \option{package}. + However, setting this option to \code{false} \emph{after} any of the + options described in section~\vref{sec:inform-descr-pack} will prevent the + building of a title page and allows you to design your own. +\end{options} + +\begin{figure}[htb] + \centering + \begin{tikzpicture}[ + start chain=going below, + node distance=1em, + every node/.style={draw,align=center} + ] + \node[on chain] {package name formatted with \cs{titleformat} and scaled + to 1.5 of its size} ; + \node[on chain] {subtitle} ; + \node[on chain,draw=none] + {\tikz\draw (0,0) node[draw] {version} ++(4,0) node[draw] {date} ;} ; + \node[on chain] {package information} ; + \node[on chain] {author names (formatted according to specifications for + names as defined with \cs{newname})} ; + \node[on chain] {url when specified via the \option{url} option} ; + \node[on chain] {email address when specified via the \option{email} option} ; + \node[on chain] {abstract when specified via the \option{abstract} option} ; + \end{tikzpicture} + \caption{Schematic sketch of the title page.} + \label{fig:titlepage} +\end{figure} + +\subsection{A Quotation Environment} + +\cnltxdoc\sinceversion{0.5} provides a quotation environment: +\begin{environments} + \environment{cnltxquote}[\oarg{author/reference}] + A quotation environment. +\end{environments} + +The environment sets the body indented on both sides as it simply uses a +\env*{quote} environment internally. The contents of the optional argument is +set flush right after the environment's body. The formatting is controlled by +two options: + +\begin{options} + \keyval{quote-format}{definition}\Default{\cs*{small}\cs*{sffamily}} + The formatting of the environment's body. + \keyval{quote-author-format}{definition}\Default{\cs*{itshape}} +\end{options} + +\begin{example} + \begin{cnltxquote}[Douglas Adams, The Restaurant at the End of the Universe] + ``The first ten million years were the worst,'' said Marvin, ``and the + second ten million years, they were the worst too. The third ten million + years I didn't enjoy at all. After that I went into a bit of a decline.'' + \end{cnltxquote} +\end{example} + +\subsection{Predefined Preamble}\label{sec:preamble} +It is possible to load a part of my standard preamble automatically by +passing an option as class option. +\begin{options} + \opt{load-preamble} + Class option that preloads part of my custom preamble. +\end{options} + +Using the option will include the following code: + +\begin{sourcecode} + \RequirePackage{ifxetex,ifluatex} + \ifboolexpr{not bool{xetex} and not bool{luatex}} + {\RequirePackage[T1]{fontenc}} + {\RequirePackage{fontspec}} + \RequirePackage[oldstyle]{libertine} + % `libertinehologopatch' is not on CTAN, yet! + % you can get it at https://bitbucket.org/cgnieder/libertinehologopatch/ + \RequirePackage{libertinehologopatch} + \RequirePackage[supstfm=libertinesups]{superiors} + % libertine does not have superior letters: + \def\@makefnmark{% + \hbox{% + \cnltx@ifisnum{\@thefnmark} + {\textsu{\hspace*{\superiors@spaced}\@thefnmark}} + {\@textsuperscript{\normalfont\@thefnmark}}% + }% + } + \RequirePackage{microtype} + \ifboolexpr + { + test {\ifcsdef{MT@pr@set@@romansans}} and + test {\ifcsdef{MT@ex@set@@romansans}} + } + {} + { + \DeclareMicrotypeSet{romansans}{ + encoding = {*}, + family = {rm*,sf*} + } + } + \ifcsdef{MT@tr@set@@scshape} + {} + { + \DeclareMicrotypeSet[tracking]{scshape}{ + encoding = {*} , + shape = {sc,scit,si} + } + } + \microtypesetup{ + tracking = scshape , + protrusion = romansans , + expansion = romansans + } + \ifboolexpr{not bool{xetex} and not bool{luatex}} + {\RequirePackage[scaled=.79]{beramono}} + {\setmonofont[Scale=MatchLowercase]{Bitstream Vera Sans Mono}} + \RequirePackage{fnpct} + \expandafter\RequirePackage\expandafter[\cnltx@babel@options]{babel} + \renewcommand*\othersectionlevelsformat[3]{% + \textcolor{cnltx}{#3\autodot}\enskip} + \renewcommand*\partformat{% + \textcolor{cnltx}{\partname~\thepart\autodot}} + \deffootnote{2em}{1em}{\llap{\thefootnotemark. }}% + \pagestyle{headings} + \setcapindent{1.5em} + \setkomafont{caption}{\cnltx@caption@font} + \setkomafont{captionlabel}{\cnltx@captionlabel@font} +\end{sourcecode} + +The effect of this preamble is demonstrated by the document you're reading at +this moment. + +\subsection{Predefined Indexing}\label{sec:predefined-indexing} +\cnltxdoc\ allows the automated creation of an index. This is done with the +help of the \pkg{imakeidx} package by \egreg~\cite{pkg:imakeidx}. To use this +feature you have two class options. They cannot be set with \cs{setcnltx} but +must be given as class options. + +\begin{options} + \keybool{add-index}\Default{false} + Enables the automatic creation of an index at the end of the document. + \keybool{load-preamble+}\Default{false} + This option has the same effect as adding the options + \option{load-preamble}, \option{add-index} and \option{add-bib}. +\end{options} + +Enabling the feature +\begin{itemize} + \item loads the \needpackage{imakeidx} package, + \item uses a given style file for the index that can be specified with the + \option{index-style} option, + \item sets a certain setup for the index that can be specified with the + \option{index-setup} option and + \item adds an index at the end of the document. +\end{itemize} + +The following options are available to customize the appearance of the index: +\begin{options} + \keyval{index-prologue}{text} + Adds \meta{text} as index prologue between heading and the actual index. + \keyval{index-space}{dimension}\Default{0pt} + The vertical space between index prologue and index. + \keyval{index-setup}{options}% + \Default{othercode=\cs*{footnotesize},level=\cs*{addsec}} + The options that are passed to \pkg{imakeidx}'s \cs*{indexsetup} command. + \keyval{makeindex-setup}{options}\Default{columns=2,columnsep=1em} + The options that are passed to the \cs*{makeindex} command. + \keyval{index-style}{style file}\Default{cnltx.ist} + The style file that is used for formatting the index. +\end{options} + +The index style file \file{cnltx.ist} contains the following lines: +\inputsourcecode[sourcecode-options={style=cnltx-makeindex}]{cnltx.ist} + +The feature is demonstrated by this document which does not contain a single +control sequence containing the string \code{index}! + +\subsection{Bibliography with \pkg*{biblatex}} +\subsubsection{Bibliography Entry Types \code{package}, \code{class} and + \code{bundle} for \pkg*{biblatex}} +\label{sec:listings:bibtex-language} + +\cnltxdoc\sinceversion{0.4} defines the bibliograpy entry types +\code{package}, \code{class} and \code{bundle} when +\pkg{biblatex}~\cite{pkg:biblatex} is used. This allows specifying \LaTeX\ +packages in \file{bib} files: + +\begin{sourcecode}[sourcecode-options={style=cnltx-bibtex}] + @package{pkg:chngcntr, + title = {chngcntr} , + author = {Peter Wilson} , + maintainer = {Will Robertson} , + date = {2009-09-02} , + version = {1.0a} , + url = {http://mirror.ctan.org/macros/latex/contrib/chngcntr/} + } + @class{cls:exam, + title = {exam}, + author = {Philip Hirschhorn}, + date = {2011-05-22}, + version = {2.4}, + url = {http://mirror.ctan.org/macros/latex/contrib/exam/} + } + @bundle{bnd:koma-script, + title = {\KOMAScript} , + sorttitle = {KOMA-Script} , + indextitle = {\KOMAScript} , + indexsorttitle = {KOMA-Script} , + author = {Markus Kohm and Frank Neukahm}, + date = {2012-07-29} , + version = {3.11b} , + url = {http://mirror.ctan.org/macros/latex/contrib/koma-script/} + } +\end{sourcecode} + +As you can see also an entry field \code{maintainer} is defined. For this to +work you have to use the \pkg{biblatex} bibliography style \code{cnltx}. This +style basically is a clone of the style \code{alphabetic} but defines the +necessary additions for the \code{package}, \code{class} and \code{bundle} +entry types and the \code{maintainer} entry field. + +Along with the bibliography style a citation style \code{cnltx} is provided, +again a clone of the \code{alphabetic} style. The only addition it makes is +that indexing of maintainer names is enabled if \pkg{biblatex}'s +\code{indexing} option is used. \emph{The styles can only be used with the + \cnltxdoc\ class} as it relies on definitions made by it. + +This document uses the following call of \pkg{biblatex}: +\begin{sourcecode} + \usepackage[ + backend=biber, + style=cnltx, + sortlocale=en_EN, + indexing=cite, + useprefix]{biblatex} + \addbibresource{cnltx.bib} +\end{sourcecode} +Actually it let's \cnltxdoc\ do it, see section~\ref{sec:autom-bibl} for +details. + +Just for the sake of the example I am going to cite the \pkg*{chngcntr} +package now~\cite{pkg:chngcntr} so you can see both the bibliography entry and +the indexed names of package, author and maintainer in the appendix. + +\subsubsection{Automatic Bibliography}\label{sec:autom-bibl} + +\cnltxdoc\ allows the automated creation of a bibliography. + +\begin{options} + \keybool{add-bib}\Default{false} + Enables the automatic creation of a bibliography at the end of the + document. + \keybool{load-preamble+}\Default{false} + This option has the same effect as adding the options + \option{load-preamble}, \option{add-index} and \option{add-bib}. +\end{options} + +What this options does is including the following code: +\begin{sourcecode} + \RequirePackage[ + backend=biber, + style=cnltx, + sortlocale=en_EN, + indexing=cite, + useprefix]{biblatex} + \addbibresource{cnltx.bib} + \AtEndDocument{\printbibliography} +\end{sourcecode} + +As you can see there's also a bibliography database file \file{cnltx.bib} that +provides a yet small but growing number of package entries. + +\section{Predefined \pkg*{listings} and \pkg*{mdframed} Styles} +\subsection{\pkg*{mdframed}} + +The source code environments (see section~\vref{sec:usage:examples}) all get a +frame with the help of the \pkg{mdframed}~\cite{pkg:mdframed} package. For +this a custom style is defined called \code{cnltx}. The options +\option{frame-options} and \option{add-frame-options} mentioned in +section~\vref{sec:usage:examples} manipulate this style. It is predefined +with these values: + +\begin{sourcecode} + \def\cnltx@mdframed@options{ + backgroundcolor = cnltxbg , + linecolor = cnltx , + roundcorner = 5pt + } +\end{sourcecode} + +\subsection{\pkg*{listings}} +\subsubsection{\LaTeX\ Sourcecode}\label{sec:listings-sourcecode} + +The code of the source code environments (see +section~\vref{sec:usage:examples}) is formatted with the help of the +\pkg{listings} package~\cite{pkg:listings}. A \pkg{listings} style is defined +called \code{cnltx}. The options \option{add-cmds}, \option{add-silent-cmds}, +\option{add-envs}, \option{add-silent-envs}, \option{listings-options} and +\option{add-listings-options} manipulate this style. It is predefined by +\cnltxexample\ as follows: + +\begin{sourcecode} + \def\cnltx@listings@style{ + language = [AlLaTeX]TeX, + alsolanguage = [plain]TeX, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .75em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{cs}, + deletetexcs = + { + a,o,u,A,O,U, + begin, + center, + description,document, + end,enumerate, + figure,flushleft,flushright, + itemize,list, + otherlanguage, + table,tabu,tabular + }, + deletekeywords = + { + a,o,u,A,O,U, + begin, + center, + description,document, + end,enumerate, + figure,flushleft,flushright, + itemize,list, + otherlanguage, + table,tabu,tabular + }, + % \begin, \end: + texcsstyle = [2]\color{beginend}, + index = [2][texcs2], + indexstyle = [2]\@gobble, + moretexcs = [2]{begin,end}, + % added environments that'll be indexed: + texcsstyle = [3]\color{env}, + index = [3][texcs3], + indexstyle = [3]\envidx, + % environments that won't be indexed: + texcsstyle = [4]\color{env}, + index = [4][texcs4], + indexstyle = [4]\@gobble, + % control sequences that'll be indexed: + texcsstyle = [5]\color{cs}, + index = [5][texcs5], + indexstyle = [5]\indexcs, + % control sequences that won't be indexed: + texcsstyle = [6]\color{cs}, + index = [6][texcs6], + indexstyle = [6]\@gobble + } +\end{sourcecode} + +\subsubsection{\BibTeX\ Entries} +The \cnltxlistings\ package defines\sinceversion{0.4} a \pkg{listings} +language \code{BibTeX} that contains a huge number of bibentry types and +bibentry field types, have a look at +section~\vref{sec:listings:bibtex-language}. \cnltxexample\ defines a +\pkg{listings} style for formatting them called \code{cnltx-bibtex}: + +\begin{sourcecode} + \def\cnltx@bibtex@listings@style{ + language = BiBTeX, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .5em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{bibentry} , + keywordstyle = [2]\color{bibentryfield}\itshape , + showstringspaces = false , + } +\end{sourcecode} + +\subsubsection{\code{makeindex} Style Files} +\cnltxlistings\ defines\sinceversion{0.7} a \pkg{listings} language +\code{makeindex} that contains the keywords used in \code{makeindex} style +files. \cnltxexample\ defines a \pkg{listings} style for formatting them +called \code{cnltx-makeindex}: + +\begin{sourcecode} + \def\cnltx@makeindex@listings@style{ + language = makeindex, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .75em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{makeidxkey}\bfseries , + stringstyle = \color{makeidxstring} , + showstringspaces = false + } +\end{sourcecode} + +\section{\PDF\ Strings and \pkg*{hyperref}} + +Since the formatting and indexing commands \cs{cs}, \cs{env}, \cs{option}, +\cs{pkg}, \cs{cls} and \cs{key} are robust they are ignored in \PDF\ +strings. For this reason you should \emph{only use the starred variants} in +places where \PDF\ bookmarks are built from such as section titles when you +use \pkg{hyperref}~\cite{pkg:hyperref}. Since \cnltxdoc\ loads \pkg{hyperref} +this means you should do so, too, when you use \cnltxdoc. This is important +for two reasons: +\begin{enumerate} + \item Indexing in strings that get written to the table of contents does + noch make much sense, anyway, so the starred versions should be used in + section titles even if you don't use \pkg{hyperref}. + \item When \pkg{hyperref} is loaded the mentioned commands are disabled in + \PDF\ strings in a way that \emph{expects} them to be followed by a star. + This means leaving the star out will result in \code{doesn't match its + definition} errors. +\end{enumerate} + +\section{Predefined Colors and Color-Schemes}\label{sec:colors} +\subsection{Explicitly Defined Colors}\label{sec:expl-defin-colors} + +The \cnltxbase\ package defines a number of colors: +\begin{colors} + \colour{cnltxbrown} + Per default used for the control sequences. + \colour{cnltxblue} + Per default used for module names. + \colour{cnltxred} + Per default used as base color in various places. + \colour{cnltxgreen} + Unused per default. + \colour{cnltxgray} + Per default used for formatting comments. + \colour{cnltxyellow} + Per default used for option names. + \colour{cnltxformalblue} + Unused per default. + \colour{cnltxformalred} + Unused per default. +\end{colors} + +\subsection{Actual Used Color Names and Color Schemes}\label{sec:actual-used-color} + +The colors defined in section~\vref{sec:expl-defin-colors} are not directly +used with those names. Instead colors are used whose names describe their +function rather than the color. For this the color names are mapped to actual +colors and saved as a coloring scheme. There are currently three predefined +color schemes whose definitions are given below. Those definitions also show +the actually used color names. They are defined via the following command: + +\begin{commands} + \command{definecolorscheme}[\marg{name}\marg{color assignments}] + \sinceversion{0.5}Defines the color scheme \meta{name}. When used all + assignments will be actually carried out with \pkg{xcolor}'s + \cs*{colorlet} command. How to input \meta{color assignments} will be + immediately clear from the examples below. +\end{commands} + +The `default' color scheme is defined as follows: +\begin{sourcecode} + \definecolorscheme{default}{ + cs => cnltxbrown , % command sequences + option => cnltxyellow ,% options + module => cnltxblue , % modules + comment => cnltxgray , % comments + beginend => red , % \begin and \end + env => black , % environment names + argument => black , % argument delimiters + meta => black!80 , % arguments of \meta + cnltx => cnltxred , % base color + cnltxbg => white , % source code box background + link => black!90 , % hyperlinks + versionnote => black!75 % versioning notes text + bibentry => cnltxgreen , % BibTeX entry types + bibentryfield => black, % BibTeX entry fields + expandable => red , % the color used in \expandable + unexpandable => black , % the color used in \unexpandable + makeidxkey => cnltxgreen , % used for keywords in the cnltx-makeindex + % style + makeidxstring => black % used for strings in the cnltx-makeindex + % style + } +\end{sourcecode} + +The `blue' color scheme is defined this way: +\begin{sourcecode} + \definecolorscheme{blue}{ + cs => cnltxbrown , + option => cnltxgreen , + module => cnltxred , + comment => cnltxgray , + beginend => red , + env => black , + argument => black , + meta => black!80 , + cnltx => cnltxblue , + cnltxbg => yellow!10 , + link => cnltx , + versionnote => black!75 + bibentry => cnltxyellow , + bibentryfield => black , + expandable => red , + unexpandable => black , + makeidxkey => cnltxyellow , + makeidxstring => black + } +\end{sourcecode} + +Finally the `formal' color scheme is defined like this: +\begin{sourcecode} + \definecolorscheme{formal}{ + cs => black , + option => cnltxformalblue , + module => cnltxblue , + comment => cnltxgray , + beginend => red , + env => black , + argument => black , + meta => black!80 , + cnltx => cnltxformalblue , + cnltxbg => white , + link => black!90 , + versionnote => black!75 , + bibentry => black , + bibentryfield => black , + expandable => red , + unexpandable => black , + makeidxkey => black , + makeidxstring => black + } +\end{sourcecode} + +\section{Language Support}\label{sec:language-support} +\noindent\sinceversion{0.2}The \cnltxdoc, the \cnltxexample\ and the +\cnltxtools\ package all rely on the \pkg{translations} +package~\cite{pkg:translations} for providing some document language dependent +strings. Currently only translations for English and German are provided. +Others can be added and the existing ones changed with the following command +provided by the \pkg{translations} package: + +\begin{commands} + \command{DeclareTranslation}[\marg{language}\marg{keyword}\marg{translation}] + Provide translations for the string identified by the \textsc{id} + \meta{keyword}. +\end{commands} + +The defined strings are listed in table~\vref{tab:language:strings}. They are +used in indexing strings and in different parts of the document. + +\begin{table} + \centering\renewcommand\arraystretch{1.3} + \caption{Overview over available internationalization key words.} + \label{tab:language:strings} + \begin{tabular}{ + l + >{\ttfamily}l + >{\RaggedRight}p{.25\linewidth} + >{\RaggedRight}p{.25\linewidth} + } + \toprule + Package/Class & key word & English version & German version\\ + \midrule + \cnltxexample & cnltx-package & + \GetTranslation{cnltx-package} & + \GetTranslationFor{German}{cnltx-package} \\ + \cnltxexample & cnltx-class & + \GetTranslation{cnltx-class} & + \GetTranslationFor{German}{cnltx-class} \\ + \cnltxexample & cnltx-bundle & + \GetTranslation{cnltx-bundle} & + \GetTranslationFor{German}{cnltx-bundle} \\ + \cnltxexample & cnltx-environment & + \GetTranslation{cnltx-environment} & + \GetTranslationFor{German}{cnltx-environment} \\ + \cnltxdoc & cnltx-default & + \GetTranslation{cnltx-default} & + \GetTranslationFor{German}{cnltx-default} \\ + \cnltxdoc & cnltx-empty & + \GetTranslation{cnltx-empty} & + \GetTranslationFor{German}{cnltx-empty} \\ + \cnltxdoc & cnltx-required & + \GetTranslation{cnltx-required} & + \GetTranslationFor{German}{cnltx-required} \\ + \cnltxdoc & cnltx-toc & + \GetTranslation{cnltx-toc} & + \GetTranslationFor{German}{cnltx-toc} \\ + \cnltxdoc & cnltx-license & + \GetTranslation{cnltx-license} & + \GetTranslationFor{German}{cnltx-license}\\ + \cnltxdoc & cnltx-introduced & + \GetTranslation{cnltx-introduced} & + \GetTranslationFor{German}{cnltx-introduced} \\ + \cnltxdoc & cnltx-changed & + \GetTranslation{cnltx-changed} & + \GetTranslationFor{German}{cnltx-changed} \\ + \cnltxdoc & cnltx-f. & + \GetTranslation{cnltx-f.} & + \GetTranslationFor{German}{cnltx-f.} \\ + \cnltxdoc & cnltx-ff. & + \GetTranslation{cnltx-ff.} & + \GetTranslationFor{German}{cnltx-ff.} \\ + \cnltxdoc & cnltx-maintainer & + \GetTranslation{cnltx-maintainer} & + \GetTranslationFor{German}{cnltx-maintainer} \\ + \cnltxdoc & cnltx-maintainer & + \GetTranslation{cnltx-maintainers} & + \GetTranslationFor{German}{cnltx-maintainers} \\ + \cnltxtools & cnltx-i.e. & + \GetTranslation{cnltx-i.e.} & + \GetTranslationFor{German}{cnltx-i.e.} \\ + \cnltxtools & cnltx-e.g. & + \GetTranslation{cnltx-e.g.} & + \GetTranslationFor{German}{cnltx-e.g.} \\ + \cnltxtools & cnltx-cf. & + \GetTranslation{cnltx-cf.} & + \GetTranslationFor{German}{cnltx-cf.} \\ + \cnltxtools & cnltx-etc. & + \GetTranslation{cnltx-etc.} & + \GetTranslationFor{German}{cnltx-etc.} \\ + \bottomrule + \end{tabular} +\end{table} + +\part{Appendix} +\appendix + +\section{Internal Helper Commands} + +The commands in this section are only described for the sake of completeness. +They are not meant to be used in a document. Expandable commands are marked +with \textcolor{expandable}{\expandablesign}. + +\subsection{Defined by \cnltxbase}\label{sec:defined-cnltxbase} + +Especially \cnltxbase\ defines some useful helper macros that are also used by +the other packages and classes. + +\subsubsection{Related to the Bundle} + +\begin{commands} + \expandable\command{cnltx\at\at date} + The creation date of the current version of the bundle. + \expandable\command{cnltx\at\at version} + The version number of the bundle. + \expandable\command{cnltx\at\at info} + The short description of the bundle. + \command{cnltx\at create\at bundle\at message}% + [\sarg\marg{module}\Marg{\choices{Error,Warning,WarningNoLine,Info}}] + \sinceversion{0.7}Create suiting error and warning messaging commands + for the module \meta{module} of the \cnltx\ bundle. The starred version + creates messages for a class the un-starred version messages for a + package. + \command{cnltx\at base\at error}[\marg{message}] + Issue an error message using \cs*{PackageError}\Marg{cnltx-base}. + \command{cnltx\at base\at warning}[\marg{message}] + Issue a warning message using \cs*{PackageWarning}\Marg{cnltx-base}. + \command{cnltx\at base\at warningnoline}[\marg{message}] + Issue a warning message using \cs*{PackageWarningNoLine}\Marg{cnltx-base}. + \command{cnltx\at base\at info}[\marg{message}] + Issue a message using \cs*{PackageInfo}\Marg{cnltx-base}. + \command{cnltx\at define\at colorscheme}[\marg{name}\marg{scheme definition}] + Command that can be used to define a color scheme. +\end{commands} + +\subsubsection{Programming Tools} + +\begin{commands} + \command{cnltx\at create\at message}% + [\sarg\marg{prefix}\marg{package/class + name}\Marg{\choices{Error,Warning,WarningNoLine,Info}} \marg{detailed + error message}] + \changedversion{0.7}Create error and warning massaging commands + \cs*{\meta{prefix}@\choices{error,warning,warningnoline,info}}\marg{message}. + The starred version creates messages for a class the un-starred version + messages for a package. All commands have one argument which takes the + message. \meta{prefix} will be all lowercase in the generated command. + \command{cnltx\at create\at generic\at message}% + [\sarg\marg{prefix}\marg{package/class + name}\Marg{\choices{Error,Warning,WarningNoLine,Info}}] + \sinceversion{0.7}Create error and warning massaging commands + \cs*{\meta{prefix}@\choices{error,warning,warningnoline,info}}\marg{message}. + The starred version creates messages for a class the un-starred version + messages for a package. All commands have one argument which takes the + message \emph{except for the error command which gets two arguments}, the + first for the short version and the second for the detailed message. + \meta{prefix} will be all lowercase in the generated command. + \command{cnltx\at par} + Expands to \cs*{par}. Sometimes you need to smuggle a \cs*{par} in a + short macro \ldots + \expandable\command{iftest}[\marg{test directive}\marg{true}\marg{false}] + \sinceversion{0.7}Checks if \meta{test directive} is true and either + places \meta{true} or \meta{false} in the input stream. \meta{test + directive} should be a \TeX\ test like + \cs*{ifx}\meta{token1}\meta{token2}.\\ + This is a command in the spirit of \pkg{etoolbox}'s \cs*{ifbool} that does + the same for a boolean \meta{bool} defined with + \cs*{newif}\cs*{if\meta{bool}} or \cs*{newbool}\marg{bool}. It + corresponds to \pkg{etoolbox}'s \code{test} directive for its + \cs*{ifboolexpr}. + \expandable\command{nottest}[\marg{test directive}\marg{not true}\marg{not false}] + \sinceversion{0.7}Checks if \meta{test directive} is not true and either + places \meta{not true} or \meta{not false} in the input stream. Test + directive should be a \TeX\ test like + \cs*{ifx}\meta{token1}\meta{token2}.\\ + This is a command in the spirit of \pkg{etoolbox}'s \cs*{notbool} that does + the same for a boolean \meta{bool} defined with + \cs*{newif}\cs*{if\meta{bool}} or \cs*{newbool}\marg{bool}. + \command{cnltx\at ifsym}[\marg{token}\marg{true}\marg{false}] + A generic version of \LaTeX's \cs*{@ifstar} that checks if \meta{token} + follows if the input stream. If yes it is removed and \meta{true} is + placed in the input stream else \meta{false}. + \command{cnltx\at ifdash}[\marg{true}\marg{false}] + A wrapper for \verbcode+\cnltx@ifsym{-}+. + \command{cnltx\at ifbang}[\marg{true}\marg{false}] + \sinceversion{0.3}A wrapper for \verbcode+\cnltx@ifsym{!}+. + \expandable\command{cnltx\at ifisnum}[\marg{token list}\marg{true}\marg{false}] + \sinceversion{0.6}Checks if \meta{token list} is an integer zero or + greater and leaves \meta{true} in the input stream if it is an + \meta{false} if it isn't. + \command{cnltx\at expandargs}[\darg{specs}\meta{control sequence}] + \sinceversion{0.7}This is a \LaTeXe\ version of expl3's + \cs*{exp\_args:N}\meta{specs}. The command expands the arguments of + \meta{control sequence} according to \meta{specs}. In \meta{specs} + \begin{itemize} + \item \code{N} means unexpanded token, + \item \code{n} means unexpanded braced group, + \item \code{c} means braced group converted into a control sequence + name, + \item \code{o} means braced group expanded once, + \item \code{f} means braced group expanded with \cs*{romannumeral}, and + \item \code{x} means braced group expanded with \cs*{edef}. + \end{itemize} + \expandable\command{cnltx\at stripbs} + A shortcut for \verbcode+\expandafter\@gobble\string+. + \command{cnltx\at if\at in}[\marg{tokenlist}\marg{search}\marg{true}\marg{false}] + Places \meta{true} in the input stream if \meta{search} is found in + \meta{tokenlist} and \meta{false} if it isn't. + \command{cnltx\at replace\at once}[\marg{cs}\marg{search}\marg{replace}] + Replaces the first occurence of \meta{search} in the first expansion of + \meta{cs} with \meta{replace}. + \command{cnltx\at long\at replace\at once}[\marg{cs}\marg{search}\marg{replace}] + \sinceversion{0.3}The same as \cs{cnltx\at replace\at once} but \meta{cs} + will be redefined with \cs*{long}. + \command{cnltx\at replace\at all}[\marg{cs}\marg{search}\marg{replace}] + Replaces all occurences of \meta{search} in the first expansion of + \meta{cs} with \meta{replace}. + \command{cnltx\at long\at replace\at all}[\marg{cs}\marg{search}\marg{replace}] + \sinceversion{0.3}The same as \cs{cnltx\at replace\at all} but \meta{cs} + will be redefined with \cs*{long}. + \command{cnltx\at remove\at once}[\marg{cs}\marg{search}] + \sinceversion{0.3}Removes the first occurence of \meta{search} in the + first expansion of \meta{cs}. + \command{cnltx\at long\at remove\at once}[\marg{cs}\marg{search}] + \sinceversion{0.3}The same as \cs{cnltx\at remove\at once} but \meta{cs} + will be redefined with \cs*{long}. + \command{cnltx\at remove\at all}[\marg{cs}\marg{search}] + \sinceversion{0.3}Removes all occurences of \meta{search} in the first + expansion of \meta{cs}. + \command{cnltx\at long\at remove\at all}[\marg{cs}\marg{search}] + \sinceversion{0.3}The same as \cs{cnltx\at remove\at all} but \meta{cs} + will be redefined with \cs*{long}. +\end{commands} + +\subsection{Defined by \cnltxdoc} + +\begin{commands} + \command{cnltx\at doc\at error}[\marg{message}] + Issue an error message using \cs*{ClassError}\Marg{cnltx-doc}. + \command{cnltx\at doc\at warning}[\marg{message}] + Issue a warning message using \cs*{ClassWarning}\Marg{cnltx-doc}. + \command{cnltx\at doc\at warningnoline}[\marg{message}] + Issue a warning message using \cs*{ClassWarningNoLine}\Marg{cnltx-doc}. + \command{cnltx\at doc\at info}[\marg{message}] + Issue a message using \cs*{ClassInfo}\Marg{cnltx-doc}. + \command{cnltx\at getfileinfo}[\marg{file name}\marg{file extension}] + Extract the date, version and background information for a package or a + class and defines \cs{cnltx\at package\at date}, \cs{cnltx\at package\at + version} and \cs{cnltx\at package\at info} to contain the extracted + data. + \command{cnltx\at version\at note}[\marg{note}] + Command that is used for the versioning notes interally. Sets + \cs*{reversemarginpar} and then writes the note \meta{note} to the margin + with corresponding formatting. +\end{commands} +\begin{environments} + \environment{cnltxlist} + The list environment that is used by the environments \env{commands}, + \env{options} and \env{environments}. +\end{environments} + +\subsection{Defined by \cnltxexample} + +\begin{commands} + \command{cnltx\at example\at error}[\marg{message}] + Issue an error message using \cs*{PackageError}\Marg{cnltx-example}. + \command{cnltx\at example\at warning}[\marg{message}] + Issue a warning message using \cs*{PackageWarning}\Marg{cnltx-example}. + \command{cnltx\at example\at warningnoline}[\marg{message}] + Issue a warning message using \cs*{PackageWarningNoLine}\Marg{cnltx-example}. + \command{cnltx\at example\at info}[\marg{message}] + Issue a message using \cs*{PackageInfo}\Marg{cnltx-example}. + \command{cnltxat} + Robust command that typesets `\at' with category code 11. An @ in command + names confuses the indexing of the command names. Either one uses another + symbol for makeindex's ``actual'' recognition and also tells + \pkg{idxcmds}~\cite{pkg:idxcmds} about it or one uses \cs{cnltxat} in + \cs{cs} and friends. For the sake of convenience you can define a command + like \cs*{at} that expands to it\footnote{This is important. If you + \cs*{let} it to \cs{cnltxat} index entries may be sorted differently! + Remember: \cs{cnltxat} is robust.}. In order not to overwrite any such + existing macro it is not defined by \cnltxexample. This document for + example defines \verbcode+\def\at{\cnltxat}+. + \command{cnltxletterat} + An alias of \cs{cnltxat}. + \command{cnltxotherat} + The same as \cs{cnltxat} but with a `\at' with category code 12. + \command{cnltxbang} + The same as \cs{cnltxotherat} except that it contains a `\bang'. + \command{cnltxequal} + The same as \cs{cnltxotherat} except that it contains a `\equal'. + \command{cnltx\at isvalue} + Used in definitions of the key/value option typesetting commands. Inserts + a \code{=} with some stretchable space around and a legal break-point + after it. + \command{indexcs} + Version of \cs{csidx} that takes care of a \cs*{textcompwordmark} inserted + by listings. Also replaces all occurences of @ with category code 11 or 12 + with \cs{cnltxat}. Used to index commands in the \env{sourcecode} and + \env{example} environments that have been added with \option{add-cmds}. + \command{indexenv} + \sinceversion{0.7a}Version of \cs{envidx} that takes care of a + \cs*{textcompwordmark} inserted by listings. Also replaces all occurences + of @ with category code 11 or 12 with \cs{cnltxat}. Used to index + environments in the \env{sourcecode} and \env{example} environments that + have been added with \option{add-envs}. + \command{cnltx\at treat\at lst\at index}[\marg{new index cs}\marg{internal + index cs}] + \sinceversion{0.7a}This command was used to define \cs{indexcs} and + \cs{indexenv}:\\ + \verbcode+\cnltx@treat@lst@index{\indexcs}{\csidx}+ + \command{newarg}[\oarg{arg formatting}\marg{cs}\marg{left delim}\marg{right delim}]% + \Default{\cs{meta}} + \changedversion{0.2}Command used to define the argument commands: + \verbcode+\newarg\marg{\{}{\}}+. The optional argument determines how the + argument of the new command will be formatted. This is done with + \cs{meta} per default. \verbcode+\newarg[\code]\Marg{\{}{\}}+ + \command{MakePercentComment} + Sets the category code of \code{\%} to 14. + \command{cnltx\at copyablespace} + Prints a space that is also copyable. Uses the \pkg{accsupp} package by + \oberdiek~\cite{pkg:accsupp}. + \command{cnltx\at mdframed\at options} + Predefined option list for the \pkg{mdframed}~\cite{pkg:mdframed} style + \code{cnltx}. + \command{cnltx\at listings\at style} + Predefined option list for the \pkg{listings}~\cite{pkg:listings} style + \code{cnltx}. +\end{commands} + +\subsection{Defined by \cnltxlistings} + +\begin{commands} + \command{cnltx\at listings\at error}[\marg{message}] + Issue an error message using \cs*{PackageError}\Marg{cnltx-listings}. + \command{cnltx\at listings\at warning}[\marg{message}] + Issue a warning message using \cs*{PackageWarning}\Marg{cnltx-listings}. + \command{cnltx\at listings\at warningnoline}[\marg{message}] + Issue a warning message using \cs*{PackageWarningNoLine}\Marg{cnltx-listings}. + \command{cnltx\at listings\at info}[\marg{message}] + Issue a message using \cs*{PackageInfo}\Marg{cnltx-listings}. + \command{cnltx\at predefined\at control\at sequences} + A comma-separated list of predefined `silent' control sequence names. + \command{cnltx\at predefined\at environments} + A comma-separated list of predefined `silent' environment names. + \command{listsilentcmds} + Prints all known control sequence names formatted and separated with the + separator set with \option{list-sep}. Requires \cnltxexample. + \command{listsilentenvs} + Prints all known environment names formatted and separated with the + separator set with \option{list-sep}. Requires \cnltxexample. + \command{listbibfilekeys}[\marg{file name}] + \sinceversion{0.7}Prints all cite keys contained in the bibliography file + \meta{file name} formatted with \cs{code} and separated with the + separator set with \option{list-sep}. Requires \cnltxexample. + \command{listbibfiletypes}[\marg{file name}] + \sinceversion{0.7}Prints all citation types contained in the bibliography + file \meta{file name} formatted with \cs{code} and separated with the + separator set with \option{list-sep}. Requires \cnltxexample. + \command{listbibfileentries}[\marg{file name}] + \sinceversion{0.7}Prints all cite keys contained in the bibliography file + \meta{file name} formatted with \cs{code} and gives their respective + entry types, separated with the separator set with \option{list-sep}. + Requires \cnltxexample. +\end{commands} +\begin{options} + \keyval{list-sep}{separator}\Default{,\cs*{space}} + Sets the separator for \cnltxlistings' commands listing the different + commands \etc. +\end{options} + +\subsection{Defined by \cnltxtools} + +\begin{commands} + \command{cnltx\at tools\at error}[\marg{message}] + Issue an error message using \cs*{PackageError}\Marg{cnltx-tools}. + \command{cnltx\at tools\at warning}[\marg{message}] + Issue a warning message using \cs*{PackageWarning}\Marg{cnltx-tools}. + \command{cnltx\at tools\at warningnoline}[\marg{message}] + Issue a warning message using \cs*{PackageWarningNoLine}\Marg{cnltx-tools}. + \command{cnltx\at tools\at info}[\marg{message}] + Issue a message using \cs*{PackageInfo}\Marg{cnltx-tools}. + \command{cnltx\at accsupp}[\marg{actual text}\marg{additional + options}\marg{\TeX\ text}] + A wrapper for package \pkg{accsupp}'s \cs*{BeginAccSupp}\Marg{ActualText + = \meta{actual text}} \meta{\TeX\ text} \cs*{EndAccSupp}\marg{}. +\end{commands} + +\section{List of Known \LaTeX\ Control Sequences}\label{sec:known:csnames} + +Below are listed all \emph{predefined} control sequence names that are treated +as ``silent'' names by \cnltx, that is, those defined by \cnltxlistings. + +\begin{multicols}{3}\small + \RaggedRight\listsilentcmds +\end{multicols} + +\section{List of Known \LaTeX\ Environments}\label{sec:known:environments} + +Below are listed all \emph{predefined} control sequence names that are treated +as ``silent'' names by \cnltx, that is, those defined by \cnltxlistings. + +\begin{multicols}{3}\small + \RaggedRight\listsilentenvs +\end{multicols} + +\section{List of Entries in \code{cnltx.bib}} +Most entries in \code{cnltx.bib} are entries of the \code{@package} type. +The cite keys that the file currently contains are listed below. This list is +very likely to be extended significantly in the future. + +\setcnltx{list-sep={,\par}} +\begin{multicols}{3}\small + \RaggedRight\listbibfileentries{cnltx.bib} +\end{multicols} + +\end{document} diff --git a/Master/texmf-dist/makeindex/cnltx/cnltx.ist b/Master/texmf-dist/makeindex/cnltx/cnltx.ist new file mode 100644 index 00000000000..cfd43feb570 --- /dev/null +++ b/Master/texmf-dist/makeindex/cnltx/cnltx.ist @@ -0,0 +1,10 @@ +heading_prefix "{\\bfseries " +heading_suffix "\\hfil}\\nopagebreak\n" +headings_flag 1 +delim_0 "\\dotfill" +delim_1 "\\dotfill" +delim_2 "\\dotfill" +delim_r "\\nohyperpage{\\textendash}" +delim_t "" +suffix_2p "\\nohyperpage{\\,\\GetTranslation{cnltx-f.}\\@}" +suffix_3p "\\nohyperpage{\\,\\GetTranslation{cnltx-ff.}\\@}" diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx-base.sty b/Master/texmf-dist/tex/latex/cnltx/cnltx-base.sty new file mode 100644 index 00000000000..1d648e44de7 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx-base.sty @@ -0,0 +1,713 @@ +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\def\cnltx@@date{2013/10/04} +\def\cnltx@@version{v0.7a} +\def\cnltx@@info{LaTeX tools and documenting facilities (CN)} +\ProvidesPackage{cnltx-base}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] +\RequirePackage{pgfopts,etoolbox,ltxcmds} + +% -------------------------------------------------------------------------- +% error messaging + +% messages with a common detailed error message: +% * : star: class, nostar: package +% #1: prefix +% #2: package/class name +% #3: message type +% #4: extended error message +\newcommand*\cnltx@create@generic@message{% + \@ifstar + {\cnltx@create@generic@message@aux{Class}} + {\cnltx@create@generic@message@aux{Package}}% +} + +% #1: Class|Package +% #2: prefix +% #3: package/class name +% #4: message type +% #5: extended error message +\newcommand\cnltx@create@generic@message@aux[5]{% + \ifstrequal{#4}{Error} + {% + \lowercase{\csdef{#2@#4}}##1{% + \csuse{#1#4}{#3}{##1}{#5}}% + }{% + \lowercase{\csdef{#2@#4}}##1{% + \csuse{#1#4}{#3}{##1}}% + }} + +% messages where the detailed error message must be specified as second +% argument: +% * : star: class, nostar: package +% #1: prefix +% #2: package/class name +% #3: message type +\newcommand*\cnltx@create@message{% + \@ifstar + {\cnltx@create@message@aux{Class}} + {\cnltx@create@message@aux{Package}}% +} + +% #1: Class|Package +% #2: prefix +% #3: package/class name +% #4: message type +\newcommand\cnltx@create@message@aux[4]{% + \ifstrequal{#4}{Error} + {% + \lowercase{\csdef{#2@#4}}##1##2{% + \csuse{#1#4}{#3}{##1}{##2}}% + }{% + \lowercase{\csdef{#2@#3}}##1{% + \csuse{#1#4}{#3}{##1}}% + }} + +% message handling for the cnltx bundle: +\newcommand*\cnltx@error@message{% + For details have a look at the `cnltx' manual.} + +% * : star: class, nostar: package +% #1: bundle module +% #2: message type +\newcommand*\cnltx@create@bundle@message{% + \@ifstar + {\cnltx@create@bundle@message@aux{Class}} + {\cnltx@create@bundle@message@aux{Package}}% +} + +\newcommand\cnltx@create@bundle@message@aux[3]{% + \cnltx@create@generic@message@aux + {#1} + {cnltx@#2} + {cnltx-#2} + {#3} + {\cnltx@error@message}% +} + +\cnltx@create@bundle@message{base}{Error} +\cnltx@create@bundle@message{base}{Warning} +\cnltx@create@bundle@message{base}{WarningNoLine} +\cnltx@create@bundle@message{base}{Info} + +% -------------------------------------------------------------------------- +% setup command +\newrobustcmd\setcnltx[1]{\pgfqkeys{/cnltx}{#1}} + +\def\cnltx@par{\par} + +% -------------------------------------------------------------------------- +% generic conditionals +% those two are in the spirit of etoolbox's \ifbool and \notbool and provide +% the same functionalty as the `test' directive in `\ifboolexpr': +\newcommand\iftest[1]{% + #1% + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} + +\newcommand\nottest[1]{% + #1% + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi +} + +\newrobustcmd*\cnltx@ifsym[2]{\@ifnextchar#1{\@firstoftwo{#2}}} +\newcommand*\cnltx@ifdash{\cnltx@ifsym{-}} +\newcommand*\cnltx@ifbang{\cnltx@ifsym{!}} + +% an idea by Herbert Voß (http://tex.stackexchange.com/a/7183/5049): +\newcommand*\cnltx@ifisnum[1]{% + \iftest{\if!\ifnum9<1#1!\else_\fi}% +} + +% -------------------------------------------------------------------------- +% expansion helper +% \cnltx@expandargs() +% this is heavily inspired by expl3's \exp_args:N; in fact the code +% they use is very clever so it is basically just copied and renamed -- I'm +% sorry for that but I couldn't've done better. +\def\cnltx@expandargs@internal{} + +% auxiliary macros: +\long\def\cnltx@getnext@braced#1#2#3{#2\cnltx@firstofone{#3{#1}}} +\long\def\cnltx@getnext@unbraced#1#2#3{#2\cnltx@firstofone{#3#1}} +\long\def\cnltx@firstofone#1{#1} + +% the argument macros: +% n: +\long\def\cnltx@braced@unexpanded#1\cnltx@firstofone#2#3{% + #1\cnltx@firstofone{#2{#3}}% +} +% N: +\long\def\cnltx@unbraced@unexpanded#1\cnltx@firstofone#2#3{% + #1\cnltx@firstofone{#2#3}% +} +% c: +\long\def\cnltx@braced@csname#1\cnltx@firstofone#2#3{% + \expandafter\cnltx@getnext@unbraced\csname#3\endcsname{#1}{#2}% +} +% o: +\long\def\cnltx@braced@expanded@once#1\cnltx@firstofone#2#3{% + \expandafter\cnltx@getnext@braced\expandafter{#3}{#1}{#2}% +} +% f: +\long\def\cnltx@braced@expanded@fully#1\cnltx@firstofone#2#3{% + \expandafter\cnltx@getnext@braced + \expandafter{\romannumeral-`0#3}{#1}{#2}% +} +% x: +\protected\long\def\cnltx@braced@expanded@exhaustively#1\cnltx@firstofone#2#3{% + \edef\cnltx@expandargs@internal{{#3}}% + \expandafter\cnltx@getnext@braced\cnltx@expandargs@internal{#1}{#2}% +} + +% the actual expansion helper macro: +\protected\def\cnltx@expandargs(#1){% + \def\cnltx@expandargs@aux{#1\cnltx@firstofone}% + \cnltx@replace@all\cnltx@expandargs@aux{N}{\cnltx@unbraced@unexpanded}% + \cnltx@replace@all\cnltx@expandargs@aux{n}{\cnltx@braced@unexpanded}% + \cnltx@replace@all\cnltx@expandargs@aux{c}{\cnltx@braced@csname}% + \cnltx@replace@all\cnltx@expandargs@aux{o}{\cnltx@braced@expanded@once}% + \cnltx@replace@all\cnltx@expandargs@aux{f}{\cnltx@braced@expanded@fully}% + \cnltx@replace@all\cnltx@expandargs@aux{x}{\cnltx@braced@expanded@exhaustively}% + \cnltx@expandargs@aux +} + +% \exp_args:Nx +\newcommand\cnltx@fullexpand@arg{\cnltx@expandargs(x)} + +% \exp_args:Nxx +\newcommand\cnltx@fullexpand@twoargs{\cnltx@expandargs(xx)} + +% \exp_args:NV +\newcommand\cnltx@expand@arg{\cnltx@expandargs(o)} + +% expanding an environment argument or something: +\newcommand\cnltx@fullexpand@afterarg{\cnltx@expandargs(nx)} + +% -------------------------------------------------------------------------- +% tokenlist manipulation +\newcommand*\cnltx@stripbs{\expandafter\@gobble\string} + +% \cnltx@if@in{tokenlist}{search}{true}{false} +\newrobustcmd\cnltx@if@in[2]{% + \def\cnltx@ifin@tmp##1#2{}% + \expandafter\ifblank\expandafter{\cnltx@ifin@tmp#1{}{}#2} + {\@secondoftwo} + {\@firstoftwo}% +} + +% \cnltx@replace@once{macro}{search}{replace} +\newrobustcmd\cnltx@long@replace@once{\cnltx@replace@once@longorshort\long} +\newrobustcmd*\cnltx@replace@once{\cnltx@replace@once@longorshort\@empty} + +\newrobustcmd\cnltx@replace@once@longorshort[4]{% + \expandafter\cnltx@if@in\expandafter{#2}{#3} + {% + #1\def\cnltx@ro@tmp##1#3##2\q@stop{% + #1\def#2{##1#4##2}% + }% + \expandafter\cnltx@ro@tmp#2\q@stop + } + {}% +} + +% \cnltx@replace@all{macro}{search}{replace} +\newrobustcmd\cnltx@replace@all[3]{% + \cnltx@replace@once#1{#2}{#3}% + \expandafter\cnltx@if@in\expandafter{#1}{#2} + {\cnltx@replace@all#1{#2}{#3}} + {}% +} + +\newrobustcmd\cnltx@long@replace@all[3]{% + \cnltx@long@replace@once#1{#2}{#3}% + \expandafter\cnltx@if@in\expandafter{#1}{#2} + {\cnltx@long@replace@all#1{#2}{#3}} + {}% +} + +% \cnltx@remove@once{macro}{search} +\newrobustcmd\cnltx@remove@once[2]{\cnltx@replace@once#1{#2}{}} +\newrobustcmd\cnltx@long@remove@once[2]{\cnltx@long@replace@once#1{#2}{}} + +% \cnltx@remove@all{macro}{search} +\newrobustcmd\cnltx@remove@all[2]{\cnltx@replace@all#1{#2}{}} +\newrobustcmd\cnltx@long@remove@all[2]{\cnltx@long@replace@all#1{#2}{}} + +% -------------------------------------------------------------------------- +% an equivalent of \newcommand that where the macro with the optional argument +% is expandable. For this to work the newly defined macro /needs/ to eat the +% first following token! +\def\cnltx@num@to@args#1{% + \ifnum#1>1 + \cnltx@num@to@args@aux{2}{#1}{####}% + \fi +} +\def\cnltx@num@to@args@aux#1#2#3{% + \ifnum#1<\numexpr#2+1\relax + #3#1% + \expandafter\cnltx@num@to@args@aux + \expandafter{\number\numexpr#1+1}{#2}{#3}% + \fi +} + +% \newexpandablecmd*[][]{} +\newrobustcmd*\newexpandablecmd{% + \@star@or@long\cnltx@newexpcmd +} +\newrobustcmd*\renewexpandablecmd{% + \@star@or@long\cnltx@renewexpcmd +} +\newrobustcmd*\provideexpandablecmd{% + \@star@or@long\cnltx@provideexpcmd +} + +\def\cnltx@dummy{} + +\newrobustcmd*\cnltx@provideexpcmd[1]{% + \ifdef{#1} + {\cnltx@renewexpcmd\cnltx@dummy} + {\cnltx@newexpcmd#1}% +} + +\newrobustcmd*\cnltx@newexpcmd{% + \cnltx@new@expcmd +} + +\newrobustcmd*\cnltx@renewexpcmd[1]{% + \ifdef{#1} + {% + \let\@ifdefinable\@rc@ifdefinable + \cnltx@newexpcmd#1% + } + {\@latex@error{\noexpand#1undefined}\@ehc}% +} + +\def\cnltx@new@expcmd#1{% + \@ifnextchar[%] + {\cnltx@newexpcmd@i{#1}} + {\cnltx@newexpcmd@i{#1}[0]}% +} +\def\cnltx@newexpcmd@i#1[#2]{% + \@ifnextchar[%] + {\cnltx@newexpcmd@ii{#1}{#2}} + {\new@command#1[#2]}% +} + +\def\cnltx@newexpcmd@ii#1#2[#3]{% + \edef\cnltx@newexpcmd@args{\cnltx@num@to@args{#2}}% + \expandafter\cnltx@defexpcmd\expandafter{\cnltx@newexpcmd@args}{#2}[#3]#1% +} + +\long\def\cnltx@defexpcmd#1#2[#3]#4#5{% + \@ifdefinable#4{% + \long\def#4##1{% + \cnltxnewexpcmd@ifisopt + {#2} + {##1} + {\csuse{\@backslashchar\cnltx@stripbs#4}} + {#3}% + }% + }% + \l@ngrel@x\csdef{\@backslashchar\cnltx@stripbs#4}[##1]#1{#5}% +} +\newcommand\cnltxnewexpcmd@ifisopt[4]{% + \cnltxnewexpcmd@ifisopt@aux#2\q@marker[\q@marker + {#3#2} + {\iftest{\ifnum#1>1 }{#3[#4]{#2}}{#3[#4]#2}}% +} +\long\def\cnltxnewexpcmd@ifisopt@aux#1[#2\q@marker#3#{% + \ifstrempty{#1#2}% +} + +% -------------------------------------------------------------------------- +% looking for trailing punctuation: +% +% list parser with no separator: +\DeclareListParser*\cnltx@add@punctuation{} + +% the list that holds the punctuation marks: +\def\cnltx@punctuation@list{} + +% set the punctuation list (the parser does not like blank lists): +\newrobustcmd*\cnltx@set@punctuation[1]{% + \def\cnltx@punctuation@list{}% + \ifblank{#1} + {} + {\cnltx@add@punctuation{\listadd\cnltx@punctuation@list}{#1}}% +} + +% set default list: +\cnltx@set@punctuation{,.!?;:} + +\pgfkeys{ + cnltx/.cd , + set-trail-punct/.code = \cnltx@set@punctuation{#1} +} + +% -------------------------------------------------------------------------- +% small helper if we gobbled \par: +\newcommand*\cnltx@punctuation@ifpar{% + \iftest{\expandafter\ifx\cnltx@trailpunct\par}% +} +% \def\cnltx@punctuation@ifpar{% +% \expandafter\ifx\cnltx@trailpunct\par +% \expandafter\@firstoftwo +% \else +% \expandafter\@secondoftwo +% \fi +% } + +% -------------------------------------------------------------------------- +% per case list: +\newrobustcmd*\cnltx@set@punctuation@default{% + \ifx\cnltx@punctuation@list\cnltx@tmp@punctuation + \else + \let\cnltx@punctuation@list\cnltx@tmp@punctuation + \fi +} + +\newrobustcmd*\cnltx@set@punctuation@option[1]{% + \let\cnltx@tmp@punctuation\cnltx@punctuation@list + \ifblank{#1}{}{\cnltx@set@punctuation{#1}}% +} + +% -------------------------------------------------------------------------- +% check for punctuation mark and gobble it if present: +\newrobustcmd\cnltx@ifpunctuation@gobble[3][]{% + \cnltx@set@punctuation@option{#1}% + \ltx@ifnextchar{ } + {\cnltx@ifpunctuation@gobble@aux{#2}{#3}{ }} + {\cnltx@ifpunctuation@gobble@aux{#2}{#3}}% +} + +\newrobustcmd\cnltx@ifpunctuation@gobble@aux[3]{% + \edef\cnltx@trailpunct{\unexpanded{#3}}% + \ifblank{#3}{#2}{% + \ifinlist{#3}{\cnltx@punctuation@list} + {#1} + {#2\cnltx@punctuation@ifpar{}{#3}}% + \cnltx@punctuation@ifpar{\par}{}% + }% + \cnltx@set@punctuation@default +} + +% -------------------------------------------------------------------------- +% check for punctuation mark but leave it where it is: +\newrobustcmd\cnltx@ifpunctuation@nogobble[3][]{% + \cnltx@set@punctuation@option{#1}% + \ltx@ifnextchar{ } + {\cnltx@ifpunctuation@nogobble@aux{#2}{#3}{}} + {\cnltx@ifpunctuation@nogobble@aux{#2}{#3}}% +} + +\newrobustcmd\cnltx@ifpunctuation@nogobble@aux[3]{% + \ifblank{#3}{#2}{% + \ifinlist{#3}{\cnltx@punctuation@list} + {#1} + {#2}% + }% + \cnltx@set@punctuation@default + #3% +} + +% -------------------------------------------------------------------------- +% the main command: +\newrobustcmd\cnltx@ifpunctuation{% + \@ifstar + \cnltx@ifpunctuation@nogobble + \cnltx@ifpunctuation@gobble +} + +% -------------------------------------------------------------------------- +% counter representation commands +% error messages +\newcommand*\cnltx@base@error@unknown@user@representation[1]{% + \cnltx@base@error{Unknown counter representation \string#1}} + +\newcommand*\cnltx@base@error@unknown@internal@representation[1]{% + \cnltx@base@error{Unknown internal counter representation #1}} + +\newcommand*\cnltx@base@error@already@user@representation[1]{% + \cnltx@base@error{Counter representation \string#1 already exists}} + +\newcommand*\cnltx@base@error@already@internal@representation[1]{% + \cnltx@base@error{Internal counter representation \expandonce{#1} already exists}} + +% -------------------------------------------------------------------------- +% conditionals +% test for user commands like \arabic +\newcommand*\cnltx@if@user@representation{\ifdef} + +% test for internal commands like \@arabic; we will assume they're /always/ +% the same as the corresponding user command but with a leading @: +\newcommand*\cnltx@if@internal@representation[1]{% + \ifcsdef{@\cnltx@stripbs#1}% +} + +% -------------------------------------------------------------------------- +% the main command +\newrobustcmd*\cnltx@new@counter@representation[2]{% + \edef#1##1{% + \noexpand\expandafter + \expandonce{\csname @\cnltx@stripbs#1\endcsname}% + \noexpand\csname c@##1\noexpand\endcsname + }% + \csdef{@\cnltx@stripbs#1}##1{#2}% +} + +% -------------------------------------------------------------------------- +% the user commands +\newrobustcmd*\newcounterrepresentation[2]{% + \cnltx@if@user@representation{#1} + {\cnltx@base@error@already@user@representation{#1}} + {}% + \cnltx@if@internal@representation{#1} + {% + \cnltx@base@error@already@internal@representation + {\csname @\cnltx@stripbs#1\endcsname}% + } + {}% + \cnltx@new@counter@representation{#1}{#2}% +} + +\newrobustcmd*\renewcounterrepresentation[2]{% + \cnltx@if@user@representation{#1} + {} + {\cnltx@base@error@unknown@user@representation{#1}}% + \cnltx@if@internal@representation{#1} + {} + {% + \cnltx@base@error@unknown@internal@representation + {\csname @\cnltx@stripbs#1\endcsname}% + }% + \cnltx@new@counter@representation{#1}{#2}% +} + +\newrobustcmd*\providecounterrepresentation[2]{% + \cnltx@if@user@representation{#1}{}{% + \cnltx@if@internal@representation{#1}{}{% + \cnltx@new@counter@representation{#1}{#2}% + }% + }% +} + +\newrobustcmd*\DeclareCounterRepresentation[2]{% + \cnltx@new@counter@representation{#1}{#2}% +} + +% -------------------------------------------------------------------------- +% the following definitions are redundant, the LaTeX2e kernel provides them +% already. They're provided as an overview: + +% \arabic: +\providecounterrepresentation\arabic{\number#1} +% \roman: +\providecounterrepresentation\roman{\romannumeral#1} +% \Roman: +\providecounterrepresentation\Roman{% + \expandafter\@slowromancap\romannumeral#1@} +%\alph: +\providecounterrepresentation\alph{% + \ifcase#1% + \or a\or b\or c\or d\or e\or f% + \or g\or h\or i\or j\or k\or l% + \or m\or n\or o\or p\or q\or r% + \or s\or t\or u\or v\or w\or x% + \or y\or z% + \else + \@ctrerr + \fi +} +% \Alph: +\providecounterrepresentation\Alph{% + \ifcase#1% + \or A\or B\or C\or D\or E\or F% + \or G\or H\or I\or J\or K\or L% + \or M\or N\or O\or P\or Q\or R% + \or S\or T\or U\or V\or W\or X% + \or Y\or Z% + \else + \@ctrerr + \fi +} +% \fnsymbol: +% this is the definition of \fnsymbol in `latex.ltx'; a redefinition like in +% `fixltx2e.sty' would be preferable but \TextOrMath is not defined per +% default and we don't want to require `fixltx2e.sty' +\providecounterrepresentation\fnsymbol{% + \ensuremath{% + \ifcase#1% + \or *% + \or \dagger + \or \ddagger + \or \mathsection + \or \mathparagraph + \or \|% + \or **% + \or \dagger\dagger + \or \ddagger\ddagger + \else + \@ctrerr + \fi + }% +} + +% -------------------------------------------------------------------------- +% colors definitions: +\RequirePackage{xcolor} +\RequirePackage{trimspaces} + +\xdefinecolor{cnltxbrown}{rgb}{0.60,0.25,0.15} +\xdefinecolor{cnltxblue}{rgb}{0.02,0.04,0.48} +\xdefinecolor{cnltxred}{rgb}{0.65,0.04,0.07} +\xdefinecolor{cnltxgreen}{rgb}{0.06,0.44,0.08} +\xdefinecolor{cnltxgray}{gray}{0.5} +\colorlet{cnltxyellow}{yellow!40!brown} +\xdefinecolor{cnltxformalblue}{rgb}{0,0.2,0.6} +\xdefinecolor{cnltxformalred}{rgb}{0.8,0.1,0.2} + +% set a color-scheme for the manual: +\newrobustcmd\definecolorscheme{% + \cnltx@define@colorscheme +} +\newrobustcmd*\cnltx@define@colorscheme[2]{% + \csgdef{cnltx@color@scheme@#1}{}% + \forcsvlist{\cnltx@get@color{#1}}{#2}% +} +\newcommand*\cnltx@get@color[2]{\cnltx@get@color@aux{#1}#2\q@stop} +\def\cnltx@get@color@aux#1#2=>#3\q@stop{% + \listcsgadd{cnltx@color@scheme@#1}{% + \colorlet{\trim@spaces{#2}}{\trim@spaces{#3}}% + }% +} + +\newcommand*\cnltx@use@colorscheme[1]{% + \forlistcsloop{\@firstofone}{cnltx@color@scheme@#1}% +} + +\pgfkeys{ + cnltx/.cd, + color-scheme/.code = \cnltx@use@colorscheme{#1} +} + +% predefined color-schemes: +\definecolorscheme{default}{ + cs => cnltxbrown , + option => cnltxyellow , + module => cnltxblue , + comment => cnltxgray , + beginend => red , + env => black , + argument => black , + meta => black!80 , + cnltx => cnltxred , + cnltxbg => white , + link => black!90 , + versionnote => black!75 , + bibentry => cnltxgreen , + bibentryfield => black , + expandable => red , + unexpandable => black , + makeidxkey => cnltxgreen , + makeidxstring => black +} + +\definecolorscheme{blue}{ + cs => cnltxbrown , + option => cnltxgreen , + module => cnltxred , + comment => cnltxgray , + beginend => red , + env => black , + argument => black , + meta => black!80 , + cnltx => cnltxblue , + cnltxbg => yellow!10 , + link => cnltx , + versionnote => black!75 , + bibentry => cnltxyellow , + bibentryfield => black , + expandable => red , + unexpandable => black , + makeidxkey => cnltxyellow , + makeidxstring => black +} + +\definecolorscheme{formal}{ + cs => black , + option => cnltxformalblue , + module => cnltxblue , + comment => cnltxgray , + beginend => red , + env => black , + argument => black , + meta => black!80 , + cnltx => cnltxformalblue , + cnltxbg => white , + link => black!90 , + versionnote => black!75 , + bibentry => black , + bibentryfield => black , + expandable => red , + unexpandable => black , + makeidxkey => black , + makeidxstring => black +} + +% set the default: +\setcnltx{color-scheme=default} + +\endinput + +% -------------------------------------------------------------------------- +HISTORY: + +2013/09/08 v0.1 - first working version +2013/09/10 v0.2 - added `cnltx-tools' to the bundle + - extended the messaging creation to class messages +2013/09/12 v0.3 - added index style file `cnltx.ist' + - added color `module' + - added \cnltx@remove@once and \cnltx@remove@all + - added long versions of tokenlist manipulation macros +2013/09/14 v0.4 - added \cnltx@fullexpand@afterarg + - new colors `bibentry' and `bibentryfield' +2013/09/20 v0.5 - added colors `expandable' and `unexpandable' + - added \definecolorscheme +2013/09/24 v0.6 - added \cnltx@ifisnum +2013/09/30 v0.7 - added functionality to look for trailing punctuation + - added colors `makeidxkey' and `makeidxstring' + - added counter representation command facilities + - generalized expansion helpers (by copying expl3's + \exp_arg:N idea) + - \iftest and \nottest diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx-doc.cls b/Master/texmf-dist/tex/latex/cnltx/cnltx-doc.cls new file mode 100644 index 00000000000..82a826a11da --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx-doc.cls @@ -0,0 +1,903 @@ +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\RequirePackage{cnltx-base} +\ProvidesClass{cnltx-doc}[\cnltx@@date\space \cnltx@@version\space + \cnltx@@info] + +\cnltx@create@bundle@message*{doc}{Error} +\cnltx@create@bundle@message*{doc}{Warning} +\cnltx@create@bundle@message*{doc}{WarningNoLine} +\cnltx@create@bundle@message*{doc}{Info} + +\newbool{cnltx@load@preamble} +\newbool{cnltx@add@index} +\newbool{cnltx@add@bib} + +\newcommand*\cnltx@scrartcl@options{} +\newcommand*\cnltx@babel@options{english} + + +\pgfkeys{ + cnltx-doc/.cd, + scrartcl/.code = \PassOptionsToClass{#1}{scrartcl} , + load-preamble/.is if = cnltx@load@preamble , + add-index/.is if = cnltx@add@index , + add-bib/.is if = cnltx@add@bib , + load-preamble+/.code = + \booltrue{cnltx@load@preamble} + \booltrue{cnltx@add@index} + \booltrue{cnltx@add@bib} , + babel-options/.code = \def\cnltx@babel@options{#1} +} + +\ProcessPgfOptions{/cnltx-doc} + +\let\@classoptionslist\relax +\LoadClass{scrartcl} + + +\newcommand*\cnltx@index@prologue{} +\newbool{cnltx@index@prologue} +\newlength\cnltx@index@space + +\newcommand*\cnltx@index@setup{othercode=\footnotesize,level=\addsec} +\newcommand*\cnltx@makeindex@setup{columns=2,columnsep=1em} +\newcommand*\cnltx@index@style{cnltx.ist} + +\pgfkeys{ + cnltx/.cd, + index-prologue/.code = + \def\cnltx@index@prologue{#1} + \booltrue{cnltx@index@prologue} , + index-space/.code = \setlength\cnltx@index@space{#1} , + index-setup/.code = \def\cnltx@index@setup{#1} , + makeindex-setup/.code = \def\cnltx@makeindex@setup{#1} , + index-style/.code = \def\cnltx@index@style{#1} +} + + +\RequirePackage{cnltx-tools,cnltx-example,cnltx-listings,translations} + +\newcommand*\cnltx@caption@font{\normalfont\small\sffamily} +\newcommand*\cnltx@captionlabel@font{\cnltx@caption@font\scshape} + +\pgfkeys{ + cnltx/.cd, + caption-font/.code = \def\cnltx@caption@font{#1} , + caption-label-font/.code = \def\cnltx@captionlabel@font{#1} +} + +\ifbool{cnltx@load@preamble}{ + \RequirePackage{ifxetex,ifluatex} + \ifboolexpr{not bool{xetex} and not bool{luatex}} + {\RequirePackage[T1]{fontenc}} + {\RequirePackage{fontspec}} + \RequirePackage[oldstyle]{libertine} + \RequirePackage{libertinehologopatch} + \RequirePackage[supstfm=libertinesups]{superiors} + % libertine does not have superior letters: + \def\@makefnmark{% + \hbox{% + \cnltx@ifisnum{\@thefnmark} + {\textsu{\hspace*{\superiors@spaced}\@thefnmark}} + {\@textsuperscript{\normalfont\@thefnmark}}% + }% + } + \RequirePackage{microtype} + \ifboolexpr + { + test {\ifcsdef{MT@pr@set@@romansans}} and + test {\ifcsdef{MT@ex@set@@romansans}} + } + {} + { + \DeclareMicrotypeSet{romansans}{ + encoding = {*}, + family = {rm*,sf*} + } + } + \ifcsdef{MT@tr@set@@scshape} + {} + { + \DeclareMicrotypeSet[tracking]{scshape}{ + encoding = {*} , + shape = {sc,scit,si} + } + } + \microtypesetup{ + tracking = scshape , + protrusion = romansans , + expansion = romansans + } + \ifboolexpr{not bool{xetex} and not bool{luatex}} + {\RequirePackage[scaled=.81]{beramono}} + {\setmonofont[Scale=MatchLowercase]{Bitstream Vera Sans Mono}} + \RequirePackage{fnpct} + \expandafter\RequirePackage\expandafter[\cnltx@babel@options]{babel} + \renewcommand*\othersectionlevelsformat[3]{% + \textcolor{cnltx}{#3\autodot}\enskip} + \renewcommand*\partformat{% + \textcolor{cnltx}{\partname~\thepart\autodot}} + \deffootnote{2em}{1em}{\llap{\thefootnotemark. }}% + \pagestyle{headings} + \setcapindent{1.5em} + \setkomafont{caption}{\cnltx@caption@font} + \setkomafont{captionlabel}{\cnltx@captionlabel@font} +}{} + +\ifbool{cnltx@add@index}{ + \RequirePackage[ + backend=biber, + style=cnltx, + sortlocale=en_EN, + indexing=cite, + useprefix]{biblatex} + \addbibresource{cnltx.bib} + \AtEndDocument{\printbibliography} +}{} + +\ifbool{cnltx@add@index}{ + \AtEndPreamble{% + \RequirePackage{imakeidx} + \expandafter\indexsetup\expandafter{\cnltx@index@setup} + \expandafter\makeindex\expandafter + [\cnltx@makeindex@setup,options={-s \cnltx@index@style}] + \AtEndDocument{% + \ifbool{cnltx@index@prologue}{% + \indexprologue + [\vspace{\cnltx@index@space}] + {\noindent\cnltx@index@prologue} + }{}% + \printindex + }% + } +}{} + +\AtBeginDocument{% + \immediate\write\@auxout{% + \unexpanded{% + \ifx\texorpdfstring\@undefined^^J + \providecommand\texorpdfstring[2]{#1}^^J + \providecommand\pdfstringdefDisableCommands[1]{}^^J + \providecommand\nohyperpage[1]{#1}^^J + \fi + }% + }% +} + +% -------------------------------------------------------------------------- +% license information: +% define those differently: +\newcommand*\lppl{\cnltx@acronym{LPPL}{lppl}} +\newcommand*\LPPL{% + \LaTeX{} Project Public License% + \index{LPPL@{\cnltx@acronym@format lppl}}% +} + +\newrobustcmd*\license{\@ifstar{\cnltx@license}{\cnltx@license\cnltx@par}} +\newcommand\cnltx@license[1][maintained]{% + \GetTranslation{cnltx-license} ``#1.''% +} + +% CTAN: +\newcommand*\ctan{\cnltx@acronym{CTAN}{ctan}} +\newcommand*\CTAN{% + Comprehensive \TeX\ Archive Network% + \index{CTAN@{\cnltx@acronym@format ctan}}% +} + +% -------------------------------------------------------------------------- +% package information: +\newrobustcmd*\cnltx@getfileinfo[2]{% + \def\cnltx@tmpa##1 ##2 ##3\relax##4\relax{% + \gdef\cnltx@package@date{##1}% + \gdef\cnltx@package@version{##2}% + \gdef\cnltx@package@info{##3}}% + \edef\cnltx@tmpb{\csname ver@#1.#2\endcsname}% + \expandafter\cnltx@tmpa\cnltx@tmpb\relax? ? \relax\relax} + +\newcommand*\cnltx@package@name{??} +\newbool{cnltx@package@name} +\newcommand*\cnltx@package@date{??} +\newcommand*\cnltx@package@version{??} +\newcommand*\cnltx@package@info{??} +\newcommand*\cnltx@package@title{??} +\newcommand*\cnltx@title@format{\bfseries\scshape} +\newbool{cnltx@package@title} +\newcommand*\cnltx@package@subtitle{??} +\newbool{cnltx@package@subtitle} +\newcommand*\cnltx@package@url{??} +\newbool{cnltx@package@url} +\newcommand*\cnltx@package@email{??} +\newbool{cnltx@package@email} +\newcommand*\cnltx@package@abstract{??} +\newbool{cnltx@package@abstract} +\newlength\cnltx@package@abstract@width +\setlength\cnltx@package@abstract@width{.75\linewidth} +\newcommand*\cnltx@package@abstract@format{\setlength\parskip{.333\baselineskip}} + +\newrobustcmd*\cnltxpackagenameformat[1]{\textcolor{cnltx}{\textsc{#1}}} + +\newrobustcmd*\cnltx@newpackagename[2]{% + \newcommand*#1{\texorpdfstring{\cnltxpackagenameformat{#2}}{#2}}% +} +\newrobustcmd*\newpackagename{\cnltx@newpackagename} + +% -------------------------------------------------------------------------- +% authors: +\newcommand*\cnltx@package@author@list{} +\newcommand*\cnltx@package@author@pdflist{} +\newrobustcmd*\cnltx@new@author[1]{% + \listadd\cnltx@package@author@list + {\cnltx@read@name{#1}}% + \listadd\cnltx@package@author@pdflist + {\cnltx@extract@name{#1}}% +} + +% writing the names and email addresses: +\newcommand*\cnltx@read@name[1]{% + \cnltx@read@name@aux#1[]\q@stop +} +\protected\def\cnltx@read@name@aux#1[#2]\q@stop{% + \cnltx@get@first@and@second@name#1 \q@stop + \ifblank{#2}{} + {\cnltx@write@author@email#2\q@stop}% +} +\def\cnltx@write@author@email#1][\q@stop{% + \ifblank{#1}{} + {\footnote{\href{mailto:#1}{#1}}}% +} +\protected\def\cnltx@get@first@and@second@name#1 #2\q@stop{% + \ifblank{#2} + {% + \cnltx@name[]{#1}% + \listgadd\cnltx@package@author@pdflist{#1}% + } + {% + \cnltx@name[#1]{\trim@spaces{#2}}% + \listgadd\cnltx@package@author@pdflist{#1 \trim@spaces{#2}}% + }% +} + +% getting the names for the pdf properties: +\newcommand*\cnltx@extract@name[1]{% + \cnltx@extract@name@aux#1[]\q@stop +} +\def\cnltx@extract@name@aux#1[#2]\q@stop{% + #1\ifblank{#2}{}{\cnltx@extract@name@aux@i#2\q@stop}, % +} +\def\cnltx@extract@name@aux@i#1][\q@stop{} + +\newrobustcmd*\cnltx@package@authors{% + \gdef\cnltx@author@sep{\gdef\cnltx@author@sep{\qquad}}% + \forlistloop{\cnltx@author@sep}\cnltx@package@author@list +} + + +% -------------------------------------------------------------------------- +% options: +\pgfkeys{ + cnltx/.cd, + package/.code = + \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}} + \gdef\cnltx@package@name{#1} + \@ifpackageloaded{#1} + {\cnltx@getfileinfo{#1}{sty}} + {\cnltx@doc@warning{Package `#1' is not loaded, yet!}} + \booltrue{cnltx@package@name} , + class/.code = + \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}} + \gdef\cnltx@package@name{#1} + \@ifclassloaded{#1} + {\cnltx@getfileinfo{#1}{cls}} + {\cnltx@doc@warning{Class `#1' is not loaded, yet!}} + \booltrue{cnltx@package@name} , + name/.code = + \ifcsdef{#1}{}{\expandafter\newpackagename\csname#1\endcsname{#1}} + \gdef\cnltx@package@name{#1} + \booltrue{cnltx@package@name} , + title/.code = + \gdef\cnltx@package@title{#1} + \booltrue{cnltx@package@title} , + title-format/.code = + \def\cnltx@title@format{#1} , + build-title/.is if = cnltx@package@title , + subtitle/.code = + \gdef\cnltx@package@subtitle{#1} + \booltrue{cnltx@package@subtitle} , + authors/.code = + \gdef\cnltx@package@author@list{} + \forcsvlist{\cnltx@new@author}{#1} , + date/.code = \gdef\cnltx@package@date{#1} , + version/.code = \gdef\cnltx@package@version{#1} , + info/.code = \gdef\cnltx@package@info{#1} , + url/.code = + \gdef\cnltx@package@url{#1} + \booltrue{cnltx@package@url} , + email/.code = + \gdef\cnltx@package@email{#1} + \booltrue{cnltx@package@email} , + abstract/.code = + \gdef\cnltx@package@abstract{% + \parbox{\cnltx@package@abstract@width}{% + \cnltx@package@abstract@format + #1% + }% + } + \booltrue{cnltx@package@abstract} , + abstract-width/.code = + \setlength\cnltx@package@abstract@width{#1} , + abstract-format/.code = + \def\cnltx@package@abstract@format{#1} +} +% -------------------------------------------------------------------------- +% command descriptions: +\newcommand*\cnltx@command{% + \@ifstar + {\cnltx@command@star} + {\cnltx@command@nostar}% +} + +\newrobustcmd*\cnltx@command@star[1]{% + \@ifnextchar[ + {\cnltx@command@star@opt{#1}} + {\cnltx@command@star@opt{#1}[]}% +} + +\newrobustcmd*\cnltx@command@nostar[1]{% + \@ifnextchar[ + {\cnltx@command@nostar@opt{#1}} + {\cnltx@command@nostar@opt{#1}[]}% +} + +\def\cnltx@command@star@opt#1[#2]{% + \ifblank{#2} + {\item\cs*{#1}} + {\item\cs*{#1}#2}% + \cnltx@checkdefault{\hfill\newline}% +} +\def\cnltx@command@nostar@opt#1[#2]{% + \ifblank{#2} + {\item\cs{#1}} + {\item\cs{#1}#2}% + \cnltx@checkdefault{\hfill\newline}% +} + +\newcommand\cnltx@checkdefault[1]{% + \@ifnextchar\Module + {} + {% + \@ifnextchar\Default + {} + {% + \@ifnextchar\default + {} + {#1}% + }% + }% +} + +\newcommand*\cmltx@list@setup{% + \leftmargin=0pt + \labelwidth=2em + \labelsep=0pt + \itemindent=-1em +} + +\pgfkeys{ + cnltx/.cd, + list-setup/.code = \def\cmltx@list@setup{#1} +} + +\newenvironment{cnltxlist} + {\list{}{\cmltx@list@setup}} + {\endlist} + +\newenvironment{commands} + {% + \let\command\cnltx@command + \cnltxlist + } + {\endcnltxlist} + +% -------------------------------------------------------------------------- +% option descriptions: +\newcommand*\@cnltx@option@item[1]{% + \@ifstar + {\@cnltx@option@item@aux@star{#1}} + {\@cnltx@option@item@aux@nostar{#1}}% +} + +\newcommand*\@cnltx@option@item@aux@star[1]{% + \cnltx@ifdash + {\@cnltx@option@item@aux{#1}*-} + {\@cnltx@option@item@aux{#1}*{}}% +} +\newcommand*\@cnltx@option@item@aux@nostar[1]{% + \cnltx@ifdash + {\@cnltx@option@item@aux{#1}{}-} + {\@cnltx@option@item@aux{#1}{}{}}% +} + +\newrobustcmd*\@cnltx@option@item@aux[4]{% + \@ifnextchar\bgroup + {\@cnltx@option@two{#1#2#3}{#4}} + {\@cnltx@option@one{#1#2#3}{#4}}% +} + +\newcommand*\@cnltx@option@one[2]{% + \item#1{#2}% + \cnltx@checkdefault{\hfill\newline}% +} + +\newcommand*\@cnltx@option@two[3]{% + \item#1{#2}{#3}% + \cnltx@checkdefault{\hfill\newline}% +} + +\newenvironment{options} + {% + \def\opt{\@cnltx@option@item\option}% + \def\keyval{\@cnltx@option@item\key}% + \def\keylit{\@cnltx@option@item\keyis}% + \def\keychoice{\@cnltx@option@item\choicekey}% + \def\keybool{\@cnltx@option@item\boolkey}% + \cnltxlist + } + {\endcnltxlist} + +% -------------------------------------------------------------------------- +% environment descriptions: +\newcommand*\cnltx@environment{% + \@ifstar + {\cnltx@environment@star} + {\cnltx@environment@nostar}% +} + +\newcommand*\cnltx@environment@star[1]{% + \@ifnextchar[ + {\cnltx@environment@star@opt{#1}} + {\cnltx@environment@star@opt{#1}[]}% +} + +\newcommand*\cnltx@environment@nostar[1]{% + \@ifnextchar[ + {\cnltx@environment@nostar@opt{#1}} + {\cnltx@environment@nostar@opt{#1}[]}% +} + +\def\cnltx@environment@star@opt#1[#2]{% + \ifblank{#2} + {\item\beginenv*\code{\{}\env*{#1}\code{\}}} + {\item\beginenv*\code{\{}\env*{#1}\code{\}}#2}% + \cnltx@checkdefault{\hfill\newline}% +} +\def\cnltx@environment@nostar@opt#1[#2]{% + \ifblank{#2} + {\item\beginenv*\code{\{}\env{#1}\code{\}}} + {\item\beginenv*\code{\{}\env{#1}\code{\}}#2}% + \cnltx@checkdefault{\hfill\newline}% +} + +\newenvironment{environments} + {% + \let\environment\cnltx@environment + \cnltxlist + } + {\endcnltxlist} + +% -------------------------------------------------------------------------- +% default values: +\newrobustcmd*\cnltx@Default[1]{% + \null\hfill + \@ifnextchar\bgroup + {\cnltx@Default@initial{#1}} + {% + \cnltx@ifbang + {\cnltx@Default@required{#1}} + {\cnltx@Default@empty{#1}}% + }% +} + +\newcommand*\cnltx@Default@initial[2]{% + \llap{\GetTranslation{cnltx-default}: \code{#2}}% + \ifblank{#1}{\newline}{}% +} + +\newcommand*\cnltx@Default@required[1]{% + \llap{(\GetTranslation{cnltx-required})}% + \ifblank{#1}{\newline}{}% +} + +\newcommand*\cnltx@Default@empty[1]{% + \llap{(\GetTranslation{cnltx-empty})}% + \ifblank{#1}{\newline}{}% +} + +\newrobustcmd*\Default{% + \@ifstar + {\cnltx@Default{*}} + {\cnltx@Default{}}% +} + +\newrobustcmd*\expandable{\cnltx@expandable@ornot\cnltx@expandable} +\newrobustcmd*\unexpandable{\cnltx@expandable@ornot\cnltx@unexpandable} + +\newrobustcmd*\cnltx@expandable@ornot[1]{% + \let\cnltx@item\item + \def\item{\cnltx@item#1\let\item\cnltx@item}% +} +\newrobustcmd\cnltx@expandable@note[1]{% + \begingroup + \reversemarginpar + \marginnote{\hfill#1\space}% + \endgroup +} +\newcommand*\cnltx@expandable{% + \cnltx@expandable@note{% + \textcolor{expandable}{\expandablesign}% + }% +} +\newcommand*\cnltx@unexpandable{% + \cnltx@expandable@note{% + \textcolor{unexpandable}{\expandablesign}% + }% +} + +\newcommand*\expandablesign{\textasteriskcentered} + +\pgfkeys{ + cnltx/.cd, + expandable-sign/.code = \def\expandablesign{#1} +} + +% -------------------------------------------------------------------------- +% modules: +\newcommand*\cnltx@module@sep{\,>>\,} + +\pgfkeys{ + cnltx/.cd, + module-sep/.code = \def\cnltx@module@sep{#1} +} + +\newrobustcmd*\cnltx@module[1]{% + \cnltx@ifbang + {\cnltx@write@module{#1}{}} + {\cnltx@write@module{#1}{*}}% +} +\newcommand*\cnltx@write@module[3]{ + \cnltx@module@text{#2}{#3}% + \ifblank{#1}{\cnltx@checkdefault{\hfill\newline}}{}% +} +\newcommand*\cnltx@module@text[2]{% + \begingroup + \reversemarginpar + \marginnote{\hfill\module#1{#2}\cnltx@module@sep}% + \endgroup +} + +\newrobustcmd*\Module{% + \@ifstar + {\cnltx@module{*}} + {\cnltx@module{}}% +} + +% -------------------------------------------------------------------------- +% a environment for block quotes +\newcommand*\cnltx@quote@author@format{\itshape} +\newcommand*\cnltx@quote@format{\small\sffamily} + +\pgfkeys{ + cnltx/.cd , + quote-format/.code = \def\cnltx@quote@format{#1} , + quote-author-format/.code = \def\cnltx@quote@author@format{#1} +} + +\newenvironment{cnltxquote}[1][] + {% + \def\cnltx@quote@option{#1}% + \quote + \cnltx@quote@format + } + {% + \ifdefempty\cnltx@quote@option + {} + {% + \unskip\nobreak\hfil\penalty50 + \hskip2em\hbox{}\nobreak\hfil + {\normalfont\cnltx@quote@author@format\cnltx@quote@option}% + \parfillskip0pt \finalhyphendemerits=0 + \par + }% + \endquote + } + +% -------------------------------------------------------------------------- +% document title: +\AfterPackage!{hyperref}{% + \newrobustcmd*\cnltx@tableofcontents{% + \begingroup + \let\tocbasic@listhead\@gobble + \tableofcontents + \endgroup + }% + \RequirePackage{multicol} + \AtBeginDocument{% + \ifbool{cnltx@package@name} + {\cnltx@title@information} + {% + \cnltx@doc@warning{% + No package/class name given. Hence I won't create an + automatic title% + }% + }% + }% +} + +\newrobustcmd*\cnltx@title@information{% + \thispagestyle{plain} + \begin{center} + \ifbool{cnltx@load@preamble}{} + {\renewcommand\thefootnote{\@fnsymbol\c@footnote}}% + \Huge + \scalebox{1.5}{% + \color{cnltx}% + \cnltx@title@format + \ifbool{cnltx@package@title} + {\cnltx@package@title} + {\cnltx@package@name}% + }% + \par\vskip.5cm\relax + \large + \ifbool{cnltx@package@subtitle} + {\cnltx@package@subtitle\par\vskip.5cm\relax} + {}% + \Large \cnltx@package@version \qquad \cnltx@package@date + \par\vskip.5cm\relax + \large + \cnltx@package@info + \par\vskip.5cm\relax + \large + \cnltx@package@authors + \normalsize + \ifbool{cnltx@package@url} + {% + \par\vskip.5cm\relax + \url{\cnltx@package@url}% + }{}% + \ifbool{cnltx@package@email} + {% + \par\vskip.5cm\relax + \href{mailto:\cnltx@package@email}{\cnltx@package@email}% + }{}% + \ifbool{cnltx@package@abstract} + {% + \par\vskip.5cm\relax + \cnltx@package@abstract + }{}% + \end{center} + \begin{multicols}{2}[\section*{\GetTranslation{cnltx-toc}}] + \cnltx@tableofcontents + \end{multicols}% +} + +% -------------------------------------------------------------------------- +% versioning: +\RequirePackage{marginnote,ragged2e} +\newcommand*\versionnoteformat{\footnotesize\sffamily\RaggedRight} + +\pgfkeys{ + cnltx/.cd, + version-note-format/.code = \renewcommand*\versionnoteformat{#1} , +} + +\newcommand\cnltx@version@note[1]{% + \@bsphack + \begingroup + \reversemarginpar + \marginnote + {% + \versionnoteformat + \textcolor{versionnote}{#1}% + }% + \endgroup + \@esphack +} + +\newcommand*\cnltx@newnote{% + \@ifstar + {\cnltx@newnote@aux{*}} + {\cnltx@newnote@aux{}}% +} +\newrobustcmd\cnltx@newnote@aux[2]{% + \@ifnextchar[%] + {\cnltx@newnote@aux@i{#1}{#2}} + {\cnltx@newnote@aux@i{#1}{#2}[0]}% +} +\protected\def\cnltx@newnote@aux@i#1#2[#3]{% + \@ifnextchar[%] + {\cnltx@newnote@aux@ii{#1}{#2}{#3}} + {\cnltx@newnote@aux@iii{#1}{#2}{#3}}% +} +\protected\long\def\cnltx@newnote@aux@ii#1#2#3[#4]#5{% + \ifblank{#1} + {\newrobustcmd#2[#3][#4]{\cnltx@version@note{#5}}} + {\newrobustcmd*#2[#3][#4]{\cnltx@version@note{#5}}}% +} +\protected\long\def\cnltx@newnote@aux@iii#1#2#3#4{% + \ifblank{#1} + {\newrobustcmd#2[#3]{\cnltx@version@note{#4}}} + {\newrobustcmd*#2[#3]{\cnltx@version@note{#4}}}% +} + +\newrobustcmd\newnote{\cnltx@newnote} + +\newnote*\sinceversion[1]{\GetTranslation{cnltx-introduced}~#1} +\newnote*\changedversion[1]{\GetTranslation{cnltx-changed}~#1} + +% -------------------------------------------------------------------------- +% hyperlinks: +\newrobustcmd*\CTANurl[2][macros/latex/contrib]{% + on \ctan\ as \code{#2}: \url{http://mirrors.ctan.org/#1/#2/}% +} + +\newrobustcmd*\needpackage[2][macros/latex/contrib]{% + \pkg{#2}\footnote{\CTANurl[#1]{#2}}% +} + +\newrobustcmd*\needclass[2][macros/latex/contrib]{% + \cls{#2}\footnote{\CTANurl[#1]{#2}}% +} + +\AtEndPreamble{% + \RequirePackage{hyperref}% + \pdfstringdefDisableCommands{% + \def\cnltx@name[#1]#2{#1 #2, }% + \def\cnltxpackagenameformat#1{#1}% + }% + \hypersetup + { + colorlinks = true, + allcolors = link , + plainpages = false, + bookmarksopen = true, + bookmarksopenlevel = 1, + bookmarksnumbered = true, + pdfauthor = {\forlistloop{}\cnltx@package@author@pdflist}, + pdftitle = + {\cnltx@package@name\space\cnltx@package@version\space Manual}, + pdfsubject = {\cnltx@package@info}, + pdfstartview = FitH + }% +} + +% -------------------------------------------------------------------------- +% localization strings: +\DeclareTranslationFallback{cnltx-default}{Default} +\DeclareTranslation{English}{cnltx-default}{Default} +\DeclareTranslation{German}{cnltx-default}{Voreinstellung} + +\DeclareTranslationFallback{cnltx-required}{required} +\DeclareTranslation{English}{cnltx-required}{required} +\DeclareTranslation{German}{cnltx-required}{erforderlich} + +\DeclareTranslationFallback{cnltx-empty}{initially empty} +\DeclareTranslation{English}{cnltx-empty}{initially empty} +\DeclareTranslation{German}{cnltx-empty}{zun\"achst leer} + +\DeclareTranslationFallback{cnltx-toc}{Table of Contents} +\DeclareTranslation{English}{cnltx-toc}{Table of Contents} +\DeclareTranslation{German}{cnltx-toc}{Inhaltsverzeichnis} + +\DeclareTranslationFallback{cnltx-license}{% + Permission is granted to copy, distribute and/or modify this software under + the terms of the \LPPL\ (\lppl), version 1.3 or later + (\url{http://www.latex-project.org/lppl.txt}). The software has the status% +} +\DeclareTranslation{English}{cnltx-license}{% + Permission is granted to copy, distribute and/or modify this software under + the terms of the \LPPL\ (\lppl), version 1.3 or later + (\url{http://www.latex-project.org/lppl.txt}). The software has the status% +} +\DeclareTranslation{German}{cnltx-license}{% + Es ist erlaubt, diese Software unter den Bedingungen der \LPPL\ (\lppl), + Version 1.3 oder sp\"ater, zu kopieren und zu verteilen + (\url{http://www.latex-project.org/lppl.txt}). Sie hat den Status% +} + +\DeclareTranslationFallback{cnltx-introduced}{Introduced in version} +\DeclareTranslation{English}{cnltx-introduced}{Introduced in version} +\DeclareTranslation{German}{cnltx-introduced}{Eingef\"uhrt in Version} + +\DeclareTranslationFallback{cnltx-changed}{Changed in version} +\DeclareTranslation{English}{cnltx-changed}{Changed in version} +\DeclareTranslation{German}{cnltx-changed}{Ge\"andert in Version} + +\DeclareTranslationFallback{cnltx-f.}{f.} +\DeclareTranslation{English}{cnltx-f.}{f.} +\DeclareTranslation{German}{cnltx-f.}{f.} + +\DeclareTranslationFallback{cnltx-ff.}{ff.} +\DeclareTranslation{English}{cnltx-ff.}{ff.} +\DeclareTranslation{German}{cnltx-ff.}{ff.} + +\DeclareTranslationFallback{cnltx-maintainer}{current maintainer} +\DeclareTranslation{English}{cnltx-maintainer}{current maintainer} +\DeclareTranslation{German}{cnltx-maintainer}{aktueller Maintainer} + +\DeclareTranslationFallback{cnltx-maintainers}{current maintainers} +\DeclareTranslation{English}{cnltx-maintainers}{current maintainers} +\DeclareTranslation{German}{cnltx-maintainers}{aktuelle Maintainer} + +\endinput + +% -------------------------------------------------------------------------- +HISTORY: + +2013/09/08 v0.1 - first working version +2013/09/10 v0.2 - added optional argument to \license + - \newname got moved to `cnltx-tools' + - added possibility for internationalization + - new macros \needpackage and \needclass + - option for formatting the document title +2013/09/12 v0.3 - new class options `add-index', `load-preamble+' and + `scrartcl' + - new options `index-prologue' and `index-space' + - new file `cnltx.ist' + - added \Module + - added optional ! to the \Default command + - add safety net: provide necessary commands in the aux-file + if they're not defined at begin document +2013/09/12 v0.3a - automatic preamble detects xelatex and lualatex and selects + the fonts accordingly +2013/09/15 v0.4 - possiblity to add an email address for each author, written + as footnote; they get symbols if the `load-preamble' + options is not used + - fixed bug in index setup mechanism + - added biblatex entry type `package' and biblatex style + `cnltx' +2013/09/20 v0.5 - new commands \expandable and \unexpandable + - new environment `cnltxquote', formatting via options + `quote-format' and `quote-author-format' + - changed scaling of `beramono' from `.83' to `.81' -- seems + a better fit in relation to Linux Libertine +2013/09/24 v0.6 - workaround for footnotes in minipages => libertine does not + have superior letters + - new options `abstract-format' and `abstract-width' +2013/09/30 v0.7 - added better microtype settings to the predefined preamble + - replaced \def's with \newcommand or \newrobustcmd +2013/10/04 v0.7a - renamed \cnltx@package@name@format into + \cnltxpackagenameformat + - added \cnltxpackagenameformat to the disabled pdfstring + commands + - added possibility to define a opitonal argument with + \newnote + +% -------------------------------------------------------------------------- +TODO: + diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx-example.sty b/Master/texmf-dist/tex/latex/cnltx/cnltx-example.sty new file mode 100644 index 00000000000..c30173150f1 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx-example.sty @@ -0,0 +1,698 @@ +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\RequirePackage{cnltx-base} +\ProvidesPackage{cnltx-example}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] +\RequirePackage{cnltx-listings} + +\cnltx@create@bundle@message{example}{Error} +\cnltx@create@bundle@message{example}{Warning} +\cnltx@create@bundle@message{example}{WarningNoLine} +\cnltx@create@bundle@message{example}{Info} + +% -------------------------------------------------------------------------- +\RequirePackage{translations} +\PassOptionsToPackage{framemethod=tikz}{mdframed} +\RequirePackage{mdframed} +\RequirePackage{idxcmds} + +% -------------------------------------------------------------------------- +% who knows what they might be good for -- well, for indexing: +\newrobustcmd*\cnltxat{@} +\let\cnltxletterat\cnltxat +\makeatother +\newrobustcmd*\cnltxotherat{@} +\makeatletter +\newrobustcmd*\cnltxbang{!} +\newrobustcmd*\cnltxequal{=} + +% -------------------------------------------------------------------------- +% \code +\newrobustcmd*\code[1]{\begingroup\codefont#1\endgroup} +\newcommand*\verbcode{\lstinline[style=cnltx-inline]} +\newcommand*\codefont{\ttfamily} +\pgfkeys{ + cnltx/.cd, + code-font/.code = \def\codefont{#1} , +} + +% -------------------------------------------------------------------------- +% command descriptions: +% \cs +\newidxcmd\cs{\code{\textbackslash\textcolor{cs}{#1}}} + +% \env +\newidxcmd\env{\code{#1}}[\ (\GetTranslation{cnltx-environment})] + +% \begin, \end +\newidxcmd\beginend{\code{\textbackslash\textcolor{beginend}{#1}}} +\def\beginenv{\@ifstar{\beginend*{begin}}{\beginend{begin}}} +\def\endenv{\@ifstar{\beginend*{end}}{\beginend{end}}} + +% -------------------------------------------------------------------------- +% option descriptions: +\def\cnltx@isvalue{% + \nobreak\hskip.3333em plus .1667em =\hskip.3333em plus .1667em } + +% \option +\newidxcmd\option{\code{\textcolor{option}{#1}}} +\newidxcmd\module{\code{\textcolor{module}{#1}}} + +\newcommand*\key{\@ifstar{\cnltx@key@star}{\cnltx@key@nostar}} + +\def\cnltx@key@star{% + \cnltx@ifdash + {\cnltx@key@aux*\meta} + {\cnltx@key@aux*\marg}% +} +\def\cnltx@key@nostar{% + \cnltx@ifdash + {\cnltx@key@aux{}\meta} + {\cnltx@key@aux{}\marg}% +} +\def\cnltx@key@aux#1#2#3#4{% + \code{\option#1{#3}\cnltx@isvalue#2{#4}}% +} + +\newcommand*\keyis{% + \@ifstar + {\cnltx@key@aux*\@firstofone} + {\cnltx@key@aux{}\@firstofone}% +} + + +% \DeclareListParser*\cnltx@choices{|} +\newcommand*\choices[1]{% + \def\cnltx@choice@sep{\def\cnltx@choice@sep{|\hskip\z@}}% + \forcsvlist{\cnltx@choice@sep\code}{#1}% +} + +\RequirePackage[normalem]{ulem} +\newcommand*\default[1]{\uline{#1}} + +\pgfkeys{ + cnltx/.cd, + default-value/.code = \def\default##1{#1{##1}} +} + +\newcommand*\choicekey{% + \@ifstar + {\cnltx@choicekey@star} + {\cnltx@choicekey@nostar}% +} +\def\cnltx@choicekey@star#1#2{% + \code{\option*{#1}\cnltx@isvalue\choices{#2}}} +\def\cnltx@choicekey@nostar#1#2{% + \code{\option{#1}\cnltx@isvalue\choices{#2}}} + +\newcommand*\boolkey{% + \@ifstar + {\cnltx@boolkey@star} + {\cnltx@boolkey@nostar}% +} + +\def\cnltx@boolkey@star#1{\choicekey*{#1}{\default{true},false}} +\def\cnltx@boolkey@nostar#1{\choicekey{#1}{\default{true},false}} + +% -------------------------------------------------------------------------- +% argument descriptions: +% \meta +\newcommand*\meta[1]{% + $\langle$% + \textcolor{meta}{{\argumentformat#1}}% + $\rangle$% +} + +% arguments: +\newcommand*\argumentformat{\normalfont\itshape} + +\pgfkeys{ + cnltx/.cd, + arg-format/.code = \renewcommand*\argumentformat{#1} , +} + +\newcommand*\newarg[4][\meta]{% + \newcommand*#2[1]{% + \code{\textcolor{argument}{% + #3\textnormal{\ifblank{##1}{}{#1{##1}}}#4}}% + }% +} + +\newarg\marg{\{}{\}} +\newarg[\code]\Marg{\{}{\}} +\newarg\oarg{[}{]} +\newarg[\code]\Oarg{[}{]} +\newarg\darg{(}{)} +\newarg[\code]\Darg{(}{)} +\newcommand*\sarg{\textcolor{argument}{\code{*}}} + +% -------------------------------------------------------------------------- +% source code examples: +% format of the source code: +\newcommand*\sourceformat{\codefont\small} +% format of the iput example: +\newcommand*\exampleformat{} + +\pgfkeys{ + cnltx/.cd, + source-format/.code = \renewcommand*\sourceformat{#1} , + expl-format/.code = \renewcommand*\exampleformat{#1} , +} + +% see http://tex.stackexchange.com/a/114580/5049 for reference on the `nolig' +% trick, thanks to @egreg! + +\newrobustcmd\cnltx@treat@lst@index[2]{% + \newrobustcmd#1[1]{% + \begingroup + \let\lst@nolig\@empty + \def\cnltx@tmp@index{##1}% + \expandafter\cnltx@replace@all + \expandafter\cnltx@tmp@index + \expandafter{\cnltxotherat}{\cnltxat}% + \cnltx@replace@all\cnltx@tmp@index{@}{\cnltxat}% + \expandafter#2\expandafter{\cnltx@tmp@index}% + \endgroup + }% +} + +\cnltx@treat@lst@index{\indexcs}{\csidx} +\cnltx@treat@lst@index{\indexenv}{\envidx} + +% this command is undocumented and not used; it requires `cnltx-tools': +\newcommand\cnltx@copyablespace{% + \cnltx@accsupp{00A0}{method=hex,unicode}{\ }% +} + +\lst@RequireAspects{writefile} +\providecommand*\MakePercentComment{\catcode`\%14\relax} + +\def\cnltx@gobble{2} + +% listings style for source code: +\def\cnltx@listings@style{ + language = [AlLaTeX]TeX, + alsolanguage = [plain]TeX, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .75em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{cs}, + deletetexcs = + { + a,o,u,A,O,U, + begin, + center, + description,document, + end,enumerate, + figure,flushleft,flushright, + itemize,list, + otherlanguage, + table,tabu,tabular + }, + deletekeywords = + { + a,o,u,A,O,U, + begin, + center, + description,document, + end,enumerate, + figure,flushleft,flushright, + itemize,list, + otherlanguage, + table,tabu,tabular + }, + % \begin, \end: + texcsstyle = [2]\color{beginend}, + index = [2][texcs2], + indexstyle = [2]\@gobble, + moretexcs = [2]{begin,end}, + % added environments that'll be indexed: + texcsstyle = [3]\color{env}, + index = [3][texcs3], + indexstyle = [3]\indexenv, + % environments that won't be indexed: + texcsstyle = [4]\color{env}, + index = [4][texcs4], + indexstyle = [4]\@gobble, + % control sequences that'll be indexed: + texcsstyle = [5]\color{cs}, + index = [5][texcs5], + indexstyle = [5]\indexcs, + % control sequences that won't be indexed: + texcsstyle = [6]\color{cs}, + index = [6][texcs6], + indexstyle = [6]\@gobble +} + +\def\cnltx@bibtex@listings@style{ + language = BiBTeX, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .75em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{bibentry} , + keywordstyle = [2]\color{bibentryfield}\itshape , + showstringspaces = false , +} + +\def\cnltx@makeindex@listings@style{ + language = makeindex, + basicstyle = {\sourceformat}, + numbers = left, + numberstyle = \tiny, + xleftmargin = 1em, + numbersep = .75em, + gobble = \cnltx@gobble , + columns = fullflexible, + literate = + {ä}{{\"a}}1 + {ö}{{\"o}}1 + {ü}{{\"u}}1 + {Ä}{{\"A}}1 + {Ö}{{\"O}}1 + {Ü}{{\"U}}1 + {ß}{{\ss}}1 , + breaklines = true, + keepspaces = true, + breakindent = 1em, + commentstyle = \color{comment}, + keywordstyle = \color{makeidxkey}\bfseries , + stringstyle = \color{makeidxstring} , + showstringspaces = false , +} + +\cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style} + +\cnltx@expandargs(nx)\lstdefinestyle + {cnltx-bibtex} + {\expandonce\cnltx@bibtex@listings@style} + +\cnltx@expandargs(nx)\lstdefinestyle + {cnltx-makeindex} + {\expandonce\cnltx@makeindex@listings@style} + +\lstdefinestyle + {cnltx-inline} + { + style=cnltx, + basicstyle = \codefont + } + +\def\cnltx@addcmds#1{% + \cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style,\unexpanded{moretexcs={[5]#1}}}% + \edef\cnltx@listings@style{% + \expandonce\cnltx@listings@style,\unexpanded{moretexcs={[5]#1}}% + }% +} + +\def\cnltx@addsilentcmds#1{% + \cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style,\unexpanded{moretexcs={[6]#1}}}% + \edef\cnltx@listings@style{% + \expandonce\cnltx@listings@style,\unexpanded{moretexcs={[6]#1}}% + }% +} + +\cnltx@expandargs(o)\cnltx@addsilentcmds{\cnltx@predefined@control@sequences} + +\def\cnltx@addenvs#1{% + \cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style,\unexpanded{moretexcs={[3]#1}}}% + \edef\cnltx@listings@style{% + \expandonce\cnltx@listings@style,\unexpanded{moretexcs={[3]#1}}% + }% +} + +\def\cnltx@addsilentenvs#1{% + \cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style,\unexpanded{moretexcs={[4]#1}}}% + \edef\cnltx@listings@style{% + \expandonce\cnltx@listings@style,\unexpanded{moretexcs={[4]#1}}% + }% +} + +\cnltx@expandargs(o)\cnltx@addsilentenvs{\cnltx@predefined@environments} + +\def\cnltx@addlistingsoptions#1{% + \cnltx@expandargs(nx)\lstdefinestyle + {cnltx} + {\expandonce\cnltx@listings@style,\unexpanded{#1}}% + \edef\cnltx@listings@style{% + \expandonce\cnltx@listings@style,\unexpanded{#1}% + }% +} + +\def\cnltx@local@listings@options{} + +\pgfkeys{ + cnltx/.cd, + gobble/.code = \def\cnltx@gobble{#1} , + add-cmds/.code = \cnltx@addcmds{#1} , + add-silent-cmds/.code = \cnltx@addsilentcmds{#1} , + add-listings-options/.code = \cnltx@addlistingsoptions{#1} , + listings-options/.code = \lstdefinestyle{cnltx}{#1} , + add-envs/.code = \cnltx@addenvs{#1} , + add-silent-envs/.code = \cnltx@addsilentenvs{#1} , + sourcecode-options/.code = \def\cnltx@local@listings@options{#1} , +} + +\def\cnltx@mdframed@options + { + backgroundcolor = cnltxbg , + linecolor = cnltx , + roundcorner = 5pt + } +\cnltx@expandargs(nx)\mdfdefinestyle + {cnltx} + {\expandonce\cnltx@mdframed@options} + +\def\cnltx@addmdframedoptions#1{% + \cnltx@expandargs(nx)\mdfdefinestyle + {cnltx} + {\expandonce\cnltx@mdframed@options,\unexpanded{#1}}% +} + +\newbool{cnltx@sidebyside} +\newbool{cnltx@codeleft} +\booltrue{cnltx@codeleft} +\newbool{cnltx@codeonly} + +\newsavebox\cnltx@example@box + +\newcommand*\cnltx@examplesep{\hrulefill} + +\newcommand*\cnltx@pre@source@hook{} +\newcommand*\cnltx@after@source@hook{} +\newcommand*\cnltx@pre@example@hook{} +\newcommand*\cnltx@after@example@hook{} + + +\pgfkeys{ + cnltx/.cd, + side-by-side/.is if = cnltx@sidebyside , + code-only/.is if = cnltx@codeonly , + code-left/.is if = cnltx@codeleft , + code-sep/.code = \def\cnltx@examplesep{#1} , + pre-code/.code = \def\cnltx@pre@source@hook{#1} , + after-code/.code = \def\cnltx@after@source@hook{#1} , + pre-output/.code = \def\cnltx@pre@example@hook{#1} , + after-output/.code = \def\cnltx@after@example@hook{#1} , + add-frame-options/.code = \cnltx@addmdframedoptions{#1} , + frame-options/.code = \mdfdefinestyle{cnltx}{#1} , + gobble/.code = \def\cnltx@gobble{#1} , +} + +\newcommand*\cnltx@example@input[1]{% + \trivlist\item\relax + % don't know why this is necessary but it is: + \catcode`\^^M=5\relax + \makeatother + \MakePercentComment + % want special formatting for the input example: + \exampleformat + % we're in a list so the first paragraph is not indented; let's make the + % input example be the second paragraph: + \if@minipage\else + \par\mbox{}\par\vskip-\baselineskip\relax + \fi + \input{#1}% + \endtrivlist +} + +\newcommand*\cnltx@source@input@start[1]{% + \ifboolexpr{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} } + {\setbox\cnltx@example@box=\hbox\bgroup}{\cnltx@pre@source@hook}% + \lst@BeginAlsoWriteFile{#1}% +} + +\newcommand*\cnltx@source@input@end{% + \lst@EndWriteFile + \ifboolexpr{ bool {cnltx@sidebyside} and not bool {cnltx@codeonly} } + {\egroup}{\cnltx@after@source@hook}% +} + +% + +\newcommand*\cnltx@example@start[1]{% + \pgfqkeys{/cnltx}{#1}% + \cnltx@expandargs(x)\lstset{ + style=cnltx, + \expandonce\cnltx@local@listings@options + }% + \ifbool{cnltx@sidebyside} + {\mdframed[style=cnltx,nobreak=true]} + {\mdframed[style=cnltx,nobreak=false]}% +} + +\newcommand*\cnltx@example@end[1]{% + \ifblank{#1}{\booltrue{cnltx@codeonly}}{} + \ifbool{cnltx@codeonly} + {} + {% + \ifbool{cnltx@sidebyside} + {% + \ifbool{cnltx@codeleft} + {% + \minipage[c]{% + \dimexpr + .49\linewidth + -.75\lst@xleftmargin + \relax + }% + \cnltx@pre@source@hook + \unhbox\cnltx@example@box + \cnltx@after@source@hook + \endminipage\hfill + \minipage[c]{% + \dimexpr + .49\linewidth + -.75\lst@xleftmargin + \relax + }% + \cnltx@pre@example@hook + \cnltx@example@input{#1}% + \cnltx@after@example@hook + \endminipage + } + {% + \minipage[c]{% + \dimexpr + .49\linewidth + -.75\lst@xleftmargin + \relax + }% + \cnltx@pre@example@hook + \cnltx@example@input{#1}% + \cnltx@after@example@hook + \endminipage\hfill + \minipage[c]{% + \dimexpr + .49\linewidth + -.75\lst@xleftmargin + \relax + }% + \cnltx@pre@source@hook + \unhbox\cnltx@example@box + \cnltx@after@source@hook + \endminipage + }% + } + {% + \par\noindent\cnltx@examplesep + \cnltx@pre@example@hook + \cnltx@example@input{#1}% + \cnltx@after@example@hook + }% + }% + \endmdframed + \ignorespacesafterend +} + +\def\cnltx@new@sourcecode@env#1#2{% + \lstnewenvironment{#2}[1][] + {% + \cnltx@example@start{##1,#1}% + \cnltx@source@input@start{\jobname.cnltx.code}% + } + {% + \cnltx@source@input@end + \cnltx@example@end{\jobname.cnltx.code}% + % see http://tex.stackexchange.com/a/136264/5049 + % for the reasoning behind this: + \if@nobreak + \@nobreakfalse + \fi + }% +} +\newrobustcmd\newsourcecodeenv[2][]{% + \cnltx@new@sourcecode@env{#1}{#2}% +} + +\def\cnltx@input@sourcecode@file#1#2{% + \begingroup + \cnltx@example@start{#1}% + \lstinputlisting{#2}% + \cnltx@example@end{#2}% + \endgroup +} + +\def\cnltx@new@input@source@file#1#2{% + \newcommand#2[2][]{\cnltx@input@sourcecode@file{#1,##1}{##2}}% +} + +\newrobustcmd*\newinputsourcefilecmd[2][]{% + \cnltx@new@input@source@file{#1}{#2}% +} + +\newsourcecodeenv{example} +\newsourcecodeenv[side-by-side]{sidebyside} +\newsourcecodeenv[code-only]{sourcecode} + +\newinputsourcefilecmd\inputexample +\newinputsourcefilecmd[side-by-side]\inputsidebyside +\newinputsourcefilecmd[code-only]\inputsourcecode + +\newrobustcmd*\implementation[2][]{% + \lstinputlisting[style=cnltx,#1]{#2}% +} + + +% -------------------------------------------------------------------------- +% packages and classes: +\newcommand*\packageformat{\sffamily} +\newcommand*\classformat{\sffamily} +\newcommand*\bundleformat{\sffamily} + +\newidxcmd\pkg{{\packageformat#1}}[\ (\GetTranslation{cnltx-package})] +\newidxcmd\cls{{\classformat#1}}[\ (\GetTranslation{cnltx-class})] +\newidxcmd\bnd{{\bundleformat#1}}[\ (\GetTranslation{cnltx-bundle})] + +\pgfkeys{ + cnltx/.cd, + pkg-format/.code = \renewcommand*\packageformat{#1} , + cls-format/.code = \renewcommand*\classformat{#1} +} + +% disable indexing commands in PDF strings: +\AtBeginDocument{% + \providecommand\pdfstringdefDisableCommands[1]{}% + \pdfstringdefDisableCommands{% + \def\code#1{#1}% + \def\cs*#1{\textbackslash#1}% + \def\env*{}% + \def\option*{}% + \def\pkg*{}% + \def\cls*{}% + \def\bnd*{}% + \def\key*#1#2{#1 = #2}% + }% +} + +\DeclareTranslationFallback{cnltx-package}{package} +\DeclareTranslation{English}{cnltx-package}{package} +\DeclareTranslation{German}{cnltx-package}{Paket} + +\DeclareTranslationFallback{cnltx-environment}{environment} +\DeclareTranslation{English}{cnltx-environment}{environment} +\DeclareTranslation{German}{cnltx-environment}{Umgebung} + +\DeclareTranslationFallback{cnltx-class}{class} +\DeclareTranslation{English}{cnltx-class}{class} +\DeclareTranslation{German}{cnltx-class}{Klasse} + +\DeclareTranslationFallback{cnltx-bundle}{bundle} +\DeclareTranslation{English}{cnltx-bundle}{bundle} +\DeclareTranslation{German}{cnltx-bundle}{Bundle} + +\endinput + +% -------------------------------------------------------------------------- +HISTORY: + +2013/09/08 v0.1 - first working version +2013/09/10 v0.2 - added \keyis + - lot's of improvements on the source code example + environments + - disable indexing commands in PDF strings + - added hooks to the source example environments + - added possibility for internationalization + - new macro \verbcode + - added optional argument to \newarg + - new macros \Marg, \Oarg, \Darg + - option for formatting the \default command +2013/09/12 v0.3 - added \module + - added \newsourcecodeenv and \newinputsourcefilecmd + - added \inputexample, \inputsidebyside and \inputsourcecode + - renamed `example*' into `sidebyside' +2013/09/15 v0.4 - new listings style `cnltx-bibtex' +2013/09/20 v0.5 - new command \implementation + - fixed wrong indexing behaviour: keywords in the silent lists + are now correctly indexed if added with `add-cmds' or + `add-envs' +2013/09/30 v0.7 - added listings style `cnltx-makeindex' +2013/10/04 v0.7a - new command \cnltx@treat@lst@index + - changed \envidx in listings into \indexenv + - added \bnd for package bundles + diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx-listings.sty b/Master/texmf-dist/tex/latex/cnltx/cnltx-listings.sty new file mode 100644 index 00000000000..14f27e7da55 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx-listings.sty @@ -0,0 +1,1947 @@ +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\RequirePackage{cnltx-base} +\ProvidesPackage{cnltx-listings}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] + +\cnltx@create@bundle@message{listings}{Error} +\cnltx@create@bundle@message{listings}{Warning} +\cnltx@create@bundle@message{listings}{WarningNoLine} +\cnltx@create@bundle@message{listings}{Info} + +\RequirePackage{listings} + +% -------------------------------------------------------------------------- +% a listings language BibTeX: +\lstdefinelanguage{BibTeX}{ + % entry types: + morekeywords = { + % regular types: + @article, + @book,@mvbook,@inbook,@bookinbook,@suppbook,@booklet, + @collection,@mvcollection,@incollection,@suppcollection, + @manual, + @misc, + @online, + @patent, + @periodical, + @suppperiodical, + @proceedings,@mvproceedings,@inproceedings, + @reference,@mvreference,@inreference, + @report, + @set, + @thesis, + @unpublished, + @xdata, + @customa,@customb,@customc,@customd,@custome,@customf, + % type aliases: + @conference, + @electronic, + @mastersthesis, + @phdthesis, + @techreport, + @www, + % unsupported types: + @artwork, + @audiobibnote, + @commentary, + @image, + @jurisdiction, + @legislation, + @legal, + @letter, + @movie, + @music + @performance, + @review, + @software, + @standard, + @video, + % cnltx types: + @bundle, + @class, + @package, + } , + % entry fields: + morekeywords = [2]{ + % data fields: + abstract, + addendum, + afterword, + annotation, + annotator, + author, + authortype, + bookauthor, + bookpagination, + booksubtitle, + booktitle, + booktitleaddon, + chapter, + commentator, + date, + doi, + edition, + editor,editora,editorb,editorc, + editortype, + editoratype,editorbtype,editorctype, + eid, + entrysubtype, + eprint, + eprintclass, + eprinttype, + eventdate, + eventtitle, + eventtitleaddon, + file, + foreword, + holder, + howpublished, + indextitle, + institution, + introduction, + isan, + isbn, + ismn, + isrn, + issn, + issue, + issuesubtitle, + issuetitle, + iswc, + journalsubtitle, + journaltitle, + label, + language, + library, + location, + mainsubtitle, + maintitle, + maintitleaddon, + month, + nameaddon, + note, + number, + organization, + origdate, + origlanguage, + origlocation, + origpublisher, + origtitle, + pages, + pagetotal, + pagination, + part, + publisher, + pubstate, + reprinttitle, + series, + shortauthor, + shorteditor, + shorthand, + shorthandintro, + shortjournal, + shortseries, + shorttitle, + subtitle, + title, + titleaddon, + translator, + type, + url, + urldate, + venue, + version, + volume, + volumes, + year, + % special fields: + crossref, + entryset, + execute, + gender, + hyphenation, + ids, + indexsorttitle, + keywords, + options, + presort, + related, + relatedoptions, + relatedtype, + relatedstring, + sortkey, + sortname, + sortshorthand, + sorttitle, + sortyear, + xdata, + xref, + % custom fields: + namea,nameb,namec, + nameatype,namebtype,namectype, + lista,listb,listc,listd,liste.listf, + usera,userb,userc,userd,usere,userf, + verba,verbb,verbc, + % field aliases: + address, + annote, + archiveprefix, + journal, + key, + pdf, + primaryclass, + school, + % cnltx fields: + maintainer + } , + morestring = [b]{"} , + morecomment = [l]{\%} , + sensitive = false +} + +\lstdefinelanguage{makeindex}{ + morekeywords = { + actual, % @ + arg_open, % { + arg_close, % } + encap, % | + escape, % \\ + keyword, % \\indexentry + level, % ! + page_compositor, % - + quote, % " + range_open, % ( + range_close, % ) + preamble, % \\begin{theindex} \n + postamble, % \n\n \end{theindex} \n + setpage_prefix, % \n \\setcounter{page}{ + setpage_suffix, % } \n + group_skip, % \n\n \\indexspace \n + headings_flag, % 0 + heading_prefix, % + heading_suffix, % + symhead_positive, % Symbols + symhead_negative, % symbols + numhead_positive, % Numbers + numhead_negative, % numbers + item_0, % \n \\item + item_1, % \n \\subitem + item_2, % \n \\subsubitem + item_01, % \n \\subitem + item_x1, % \n \\subitem + item_12, % \n \\subsubitem + item_x2, % \n \\subsubitem + delim_0, % , + delim_1, % , + delim_2, % , + delim_n, % , + delim_r, % -- + delim_t, % + suffix_2p, % + suffix_3p, % + suffix_mp, % + encap_prefix, % \\ + encap_infix, % { + encap-suffix, % } + line_max, % 72 + indent_space, % \t\t + indent_length % 16 + } , + morestring = [b]{"} , + morecomment = [l]{\%} , + sensitive = true +} + +% -------------------------------------------------------------------------- +% command names `moretexcs' that are used as not-indexed texcs for the +% listings style `cnltx': +\def\cnltx@predefined@control@sequences{% + % symbols: + -,@, + % csnames beginning with @: + @alph,@Alph,@arabic, + @ctrerr, + @empty, + @firstofone,@firstoftwo, + @gobble, + @ifclassloaded, + @ifnextchar, + @ifpackageloaded, + @ifstar, + @makefnmark, + @roman,@Roman, + @secondoftwo, + @slowromancap, + @textsuperscript, + @thefnmark, + % A: + a,AA,aa, + above, + abovedisplayshortskip, + abovedisplayskip, + abovewithdelims, + accent, + active, + acute, + addbibresource, + addcontentsline, + addpenalty, + addtocontents, + addtocounter, + addtolength, + addtokomafont, + addtoversion, + addvspace, + adjdemerits, + advance, + advancepageno, + ae,AE, + afterassignment, + AfterEndPreamble, + AfterEndDocument, + AfterEndEnvironment, + aftergroup, + AfterPreamble, + aleph, + allocationnumber, + allowbreak, + alph,Alph, + alpha, + amalg, + and, + angle, + approx, + appto, + arabic, + arccos, + arcsin, + arctan, + arg, + array, + arraycolsep, + arrayrulewidth, + arraystretch, + arrowvert, + Arrowvert, + ast, + asymp, + AtBeginDocument, + AtBeginDvi, + AtBeginEnvironment, + AtEndDocument, + AtEndEnvironment, + AtEndOfClass, + AtEndOfPackage, + AtEndPreamble, + atop, + atopwithdelims, + author, + author, + autodot, + % B + b, + backslash, + badness, + bar, + baselineskip, + baselinestretch, + batchmode, + BeforeBeginEnvironment, + begingroup, + beginsection, + belowdisplayshortskip, + belowdisplayskip, + beta, + bezier, + bf, + bffam, + bfseries, + bgroup, + bibcite, + bibdata, + bibitem, + bibliography, + bibliographystyle, + bibstyle, + big, + Big, + bigbreak, + bigcap, + bigcirc, + bigcup, + bigg, + Bigg, + biggl, + Biggl, + biggm, + Biggm, + biggr, + Biggr, + bigl, + Bigl, + bigm, + Bigm, + bigodot, + bigoplus, + bigotimes, + bigr, + Bigr, + bigskip, + bigskipamount, + bigsqcup, + bigtriangledown, + bigtriangleup, + biguplus, + bigvee, + bigwedge, + binoppenalty, + bmod, + boldmath, + boolfalse,booltrue, + bordermatrix, + bot, + botfigrule, + botmark, + bottomfraction, + bowtie, + Box, + box, + boxmaxdepth, + brace, + braceld, + bracelu, + bracerd, + braceru, + bracevert, + brack, + break, + breve, + brokenpenalty, + buildrel, + bullet, + bye, + % C + c, + cal, + cap, + caption, + cases, + catcode, + cb, + cdot, + cdotp, + cdots, + center, + centering, + centerline, + chapter, + char, + chardef, + check, + CheckCommand, + chi, + choose, + circ, + circle, + citation, + cite, + ClassError, + ClassInfo, + ClassWarning, + ClassWarningNoLine, + cleaders, + cleardoublepage, + clearpage, + cleartabs, + cline, + closein, + closeout, + clubpenalty, + clubsuit, + colon, + color, + columns, + columnsep, + columnseprule, + columnwidth, + cong, + contentsline, + coprod, + copy, + copyright, + cos, + cosh, + cot, + coth, + count, + countdef, + cr, + crcr, + cref, + csdef, + csc, + cslet,csletcs, + csname, + csuse, + cup, + CurrentOption, + % D + d, + dag, + dagger, + dashbox, + dashv, + date, + day, + dblfigrule, + dblfloatpagefraction, + dblfloatsep, + dbltextfloatsep, + dbltopfraction, + ddag, + ddagger, + ddot, + ddots, + deadcycles, + DeclareCharacterInheritance, + DeclareDictTranslation, + DeclareErrorFont, + DeclareFixedFont, + DeclareFontEncoding, + DeclareFontEncodingDefaults, + DeclareFontFamily, + DeclareFontShape, + DeclareFontSubstitution, + DeclareLanguage, + DeclareLanguageAlias, + DeclareLanguageDialect, + DeclareListParser, + DeclareMathAccent, + DeclareMathAlphabet, + DeclareMathAlphabet, + DeclareMathDelimiter, + DeclareMathRadical, + DeclareMathSizes, + DeclareMathSymbol, + DeclareMathVersion, + DeclareMicrotypeAlias, + DeclareMicrotypeBabelHook, + DeclareMicrotypeSet, + DeclareMicrotypeSetDefault, + DeclareMicrotypeVariants, + DeclareOldFontCommand, + DeclareOption, + DeclarePreloadSizes, + DeclareRobustCommand, + DeclareSizeFunction, + DeclareSymbolFont, + DeclareSymbolFontAlphabet, + DeclareTextAccent, + DeclareTextAccentDefault, + DeclareTextCommand, + DeclareTextCommandDefault, + DeclareTextComposite, + DeclareTextCompositeCommand, + DeclareTextFontCommand, + DeclareTextSymbol, + DeclareTextSymbolDefault, + DeclareTranslation, + DeclareTranslationFallback, + def, + defaulthyphenchar, + defaultscriptratio, + defaultscriptscriptratio, + defaultskewchar, + deffootnote,deffootnotemark, + definecolor, + deg, + delcode, + delimiter, + delimiterfactor, + delimitershortfall, + delta, + Delta, + depth, + descriptionlabel, + det, + dh,DH, + Diamond, + diamond, + diamondsuit, + dim, + dimen, + dimendef, + dimexpr, + DisableLigatures, + discretionary, + displayindent, + displaylimits, + displaylines, + displaymath, + displaystyle, + displaywidowpenalty, + displaywidth, + div, + divide, + dj,DJ, + do, + document, + documentclass, + documentstyle, + dospecials, + dosupereject, + dot, + doteq, + dotfill, + dots, + doublehyphendemerits, + doublerulesep, + downarrow, + Downarrow, + downbracefill, + dp, + % E + edef, + egroup, + eject, + ell, + else, + em, + emergencystretch, + emph, + empty, + emptyset, + endarray, + endcenter, + endcsname, + enddisplaymath, + enddocument, + endenumerate, + endeqnarray, + endequation, + endflushleft, + endflushright, + endgraf, + endgroup, + endinput, + endinsert, + enditemize, + endline, + endlinechar, + endlist, + endlrbox, + endmath, + endminipage, + endnote, + endpicture, + endsloppypar, + endtabbing, + endtabular, + endtrivlist, + endverbatim, + enlargethispage, + enskip, + enspace, + ensuremath, + enumerate, + epsilon, + eqalign, + eqalignno, + eqnarray, + eqno, + equation, + equiv, + errhelp, + errmessage, + errorcontextlines, + errorstopmode, + escapechar, + eta, + evensidemargin, + everycr, + everydisplay, + everyhbox, + everyjob, + everymath, + everypar, + everyvbox, + ExecuteOptions, + exhyphenpenalty, + exists, + exp, + expandafter, + expandonce, + extracolsep, + % F + fam, + fbox, + fboxrule, + fboxsep, + fi, + filbreak, + filecontents, + fill, + finalhypendemerits, + firstmark, + fiverm, + fivebf, + fivei, + fivesy, + flat, + floatingpenalty, + floatpagefraction, + floatsep, + flushbottom, + flushleft, + flushright, + fmtname, + fmtversion, + fnsymbol, + folio, + font, + fontdimen, + fontencoding, + fontfamily, + fontname, + fontseries, + fontshape, + fontsize, + fontspec, + fontsubfuzz, + footins, + footline, + footnote, + footnotemark, + footnoterule, + footnotesep, + footnotesize, + footnotetext, + footskip, + forall, + forlistloop, + foreignlanguage, + frac, + frame, + framebox, + frenchspacing, + frown, + fussy, + futurelet, + % G + gamma, + Gamma, + gcd, + ge, + GenericError, + GenericInfo, + GenericWarning, + geq, + gets, + GetTranslation, + GetTranslationFor, + gdef, + gg, + global, + globaldefs, + glossary, + goodbreak, + grave, + % H + H, + halign, + hang, + hangafter, + hangindent, + hat, + hbadness, + hbar, + hbox, + headheight, + headline, + headsep, + heartsuit, + height, + hfil, + hfill, + hfilneg, + hfuzz, + hglue, + hideskip, + hidewidth, + hline, + hoffset, + holdinginserts, + hom, + hookleftarrow, + hookrightarrow, + hphantom, + hrule, + hrulefill, + hsize, + hskip, + hskip, + hspace, + hss, + ht, + huge, + Huge, + hypersetup, + hyphenation, + hyphenchar, + hyphenpenalty, + % I + i,I, + ialign, + if, + ifblank, + ifbool,ifboolexpe,ifboolexpr, + ifcase, + ifcat, + ifcsdef, + ifcsname, + ifdim, + ifdef, + ifeof, + iff, + iffalse, + IfFileExists, + ifhbox, + ifhmode, + ifinlist, + ifinner, + ifmmode, + ifnum, + ifodd, + ifstr, + ifstrempty, + ifstrequal, + iftrue, + ifvbox, + ifvmode, + ifvoid, + ifx, + ignorespaces, + ignorespacesafterend, + Im, + imath, + immediate, + in, + include, + includeonly, + indent, + inf, + infty, + indent, + index, + input, + InputIfFileExists, + inputlineno, + insert, + insertpenalties, + int, + interdisplaylinepenalty, + interfootnotelinepenalty, + interlinepenalty, + intextsep, + intop, + iota, + it, + item. + itemindent, + itemitem, + itemize, + itemsep, + iterate, + itfam, + itshape, + % J + j, + jmath, + jobname, + Join, + joinrel, + jot, + % K + k, + kappa, + ker, + kern, + kill, + KOMAoption, + KOMAoptions, + % L + l,L, + label, + labelsep, + labelwidth, + labelenumi, + labelenumii, + labelenumiii, + labelenumiv, + labelitemi, + labelitemii, + labelitemiii, + labelitemiv, + lambda, + Lambda, + land, + langle, + language, + large, + Large, + LARGE, + lastbox, + lastkern, + lastpenalty, + lastskip, + LaTeX, + LaTeXe, + lbrace, + lbrack, + lccode, + lceil, + ldotp, + ldots, + le, + leaders, + leadsto, + leavevmode, + left, + leftarrow, + Leftarrow, + leftarrowfill, + lefteqn, + leftharpoondown, + leftharpoonup, + lefthyphenmin, + leftline, + leftmargin, + leftmargini, + leftmarginii, + leftmarginiii, + leftmarginiv, + leftmarginv, + leftmarginvi, + leftmark, + leftskip, + leftrightarrow, + Leftrightarrow, + leq, + leqalignno, + leqno, + let, + lfloor, + limits, + linepenalty, + lineskip, + lineskiplimits, + lg, + lgroup, + lhd, + lhook, + lim, + liminf, + limsup, + line, + linebreak, + linespread, + linethickness, + linewidth, + list, + listadd, + listfiles, + listfiles, + listparindent, + ll, + llap, + lmoustache, + ln, + lnot, + LoadClassWithOptions, + LoadClass, + LoadDictionary, + LoadDictionaryFor, + LoadMicrotypeFile, + log, + long, + longleftarrow, + Longleftarrow, + longleftrightarrow, + Longleftrightarrow, + longmapsto, + longrightarrow, + loop, + looseness, + lor, + lower, + lowercase, + lq, + lslig, + lsstyle, + lstinline, + lstinputlisting, + lrbox, + ltx@ifnextchar, + LuaLaTeX,LuaTeX, + % M + mag, + magnification, + magstep, + magstephalf, + makeatletter, + makeatother, + makebox, + makefootline, + makeglossary, + makeheadline, + makeindex, + makelabel, + MakeLowercase, + maketitle, + MakeUppercase, + mapsto, + mapstochar, + marginpar, + marginparpush, + marginparsep, + marginparwidth, + mark, + markboth, + markright, + math, + mathaccent, + mathbf, + mathbin, + mathchar, + mathchardef, + mathchoice, + mathclose, + mathcode, + mathellipsis, + mathgroup, + mathhexbox, + mathinner, + mathit, + mathop, + mathopen, + mathord, + mathpalette, + mathparagraph, + mathpunct, + mathrel, + mathrm, + mathsection, + mathsf, + mathsterling, + mathstrut, + mathsurround, + mathtt, + mathunderscore, + mathversion, + matrix, + max, + maxdeadcycles, + maxdepth, + maxdimen, + mbox, + mdseries, + meaning, + medbreak, + medmuskip, + medskip, + medskipamount, + message, + MessageBreak, + mho, + microtypecontext, + microtypesetup, + mid, + midinsert, + min, + minipage, + mit, + mkern, + models, + month, + moveleft, + moveright, + mp, + mscount, + mskip, + mu, + multicolumn, + multiply, + multiput, + multispan, + muskip, + muskipdef, + % N + nabla, + narrower, + natural, + ne, + nearrow, + NeedsTeXFormat, + neg, + negthinspace, + neq, + newbox, + newbool, + newcommand, + newcount, + newcounter, + newdimen, + newenvironment, + newfam, + newfont, + newfontfamily, + newhelp, + newif, + newinsert, + newlabel, + newlanguage, + newlength, + newline, + newlinechar, + newmathalphabet, + newmuskip, + newpage, + newread, + newrobustcmd, + newsavebox, + newskip, + newtheorem, + newtoks, + NewTranslation, + newwrite, + next, + ng,NG, + ni, + noalign, + noboundary, + nobreak, + nobreakspace, + nocite, + nocorr, + nocorrlist, + node, + noexpand, + nofiles, + noindent, + nointerlineskip, + nolimits, + nolinebreak, + nonfrenchspacing, + nonscript, + nonstopmode, + nonumber, + nopagebreak, + nopagenumbers, + normalbaselines, + normalbaselineskip, + normalbottom, + normalcolor, + normalfont, + normalmarginpar, + normallineskip, + normallineskiplimit, + normalsize, + notblank, + nopagebreak, + not, + notin, + nu, + null, + nulldelimiterspace, + nullfont, + number, + numberline, + numexpr, + nwarrow, + % O + o,O, + oalign, + obeycr, + obeylines, + obeyspaces, + oddsidemargin, + odot, + oe,OE, + of, + offinterlineskip, + oint, + ointop, + oldstyle, + oldstylenums, + omega, + Omega, + ominus, + omit, + onecolumn, + ooalign, + openin, + openout, + openup, + oplus, + OptionNotUsed, + or, + oslash, + otimes, + othersectionlevelsformat, + outer, + output, + outputpenalty, + oval, + over, + overbrace, + overfullrule, + overleftarrow, + overline, + overrightarrow, + overwithdelims, + owns, + % P + P, + PackageError, + PackageInfo, + PackageWarning, + PackageWarningNoLine, + pagebody, + pagebreak, + pagecontents, + pagedepth, + pagefilllstretch, + pagefillstretch, + pagefilstretch, + pagegoal, + pageinsert, + pageno, + pagenumbering, + pageref, + pageshrink, + pagestretch, + pagestyle, + pagetotal, + paperheight, + paperwidth, + par, + paragraph, + paragraphmark, + parallel, + parbox, + parfillskip, + parindent, + parsep, + parshape, + parskip, + part, + partformat, + partial, + partname, + partopsep, + PassOptionsToClass,PassOptionsToPackage, + patchcmd, + patterns, + pausing, + pdfLaTeX, + pdfstringdefDisableCommands, + pdfTeX, + penalty, + perp, + pgfkeys, + phantom, + phi, + Phi, + pi, + Pi, + picture, + plainoutput, + pm, + pmatrix, + pmod, + poptabs, + postdisplaypenalty, + pounds, + Pr, + prec, + preceq, + predisplaypenalty, + predisplaysize, + preloaded, + preto, + pretolerance, + prevdepth, + prevgraf, + prime, + printacronyms, + printbibliography, + printendnotes, + printindex, + ProcessPgfOptions, + ProcessOptions, + proclaim, + prod, + propto, + protect, + protected, + protecting, + providecommand,providerobustcmd, + ProvidesClass, + ProvideDictionaryFor, + ProvidesFile, + ProvidesPackage, + ProvideTextCommand, + psi, + Psi, + pushtabs, + put, + % Q + qbezier, + qbeziermax, + qquad, + quad, + % R + r, + radical, + raggedbottom, + raggedleft, + RaggedLeft, + raggedright, + RaggedRight, + raise, + raisebox, + rangle, + rbrace, + rbrack, + rceil, + Re, + read, + ref, + refstepcounter, + relax, + relbar, + Relbar, + relpenalty, + removelastskip, + renewcommand, + renewenvironment, + renewrobustcmd, + RenewTranslation, + repeat, + RequirePackage, + RequirePackageWithOptions, + restorecr, + reversemarginpar, + rfloor, + rgroup, + rhd, + rho, + rhook, + right, + rightarrow, + Rightarrow, + rightarrowfill, + rightharpoondown, + rightharpoonup, + righthyphenmin, + rightleftharpoons, + rightline, + rightmargin, + rightmark, + rightskip, + rlap, + rm, + rmfamily, + rmoustache, + robustify, + roman, + Roman, + romannumeral, + root, + rootbox, + rq, + rule, + % S + S, + samepage, + SaveTranslation, + SaveTranslationFor, + sb, + sbox, + scriptfont, + scriptscriptfont, + scriptscriptstyle, + scriptsize, + scriptspace, + scriptstyle, + scrollmode, + scshape, + searrow, + sec, + secdef, + section, + sectionmark, + selectfont, + selectlanguage, + setbox, + setcapindent, + setcounter, + SetExpansion, + SetExtraKerning, + SetExtraSpacing, + setfnpct, + setkomafont, + setlanguage, + setlength, + setmainfont, + setmainlanguage, + SetMathAlphabet, + setminus, + setmonofont, + setotherlanguage, + setotherlanguages, + SetProtrusion, + setsansfont, + SetSymbolFont, + settabs, + settodepth, + settoheight, + settowidth, + SetTracking, + sevenbf, + seveni, + sevensy, + sevenrm, + sfcode, + sffamily, + sharp, + shipout, + shorthandoff, + shorthandon, + shortstack, + show, + showbox, + showboxbreadth, + showboxdepth, + showhyphens, + showlists, + showoutput, + showoverfull, + showthe, + sidenote, + sigma, + Sigma, + sim, + simeq, + sin, + sinh, + skew, + skewchar, + skip, + skipdef, + sl, + slash, + slfam, + sloppy, + sloppypar, + slshape, + small, + smallbreak, + smallint, + smallskip, + smallskipamount, + smash, + smile, + sp, + space, + spacefactor, + spaceskip, + spadesuit, + span, + special, + splitbotmark, + splitfirstmark, + splitmaxdepth, + splittopskip, + sqcap, + sqcup, + sqrt, + sqsubset, + sqsubseteq, + sqsupset, + sqsupseteq, + ss, + SS, + stackrel, + star, + stepcounter, + stop, + stretch, + string, + strut, + strutbox, + subparagraph, + subparagraphmark, + subsection, + subsectionmark, + subset, + subseteq, + subsubsection, + subsubsectionmark, + succ, + succeq, + sum, + sup, + supereject, + suppressfloats, + supset, + supseteq, + surd, + swarrow, + symbol, + % T + t, + tabalign, + tabbing, + tabbingsep, + tabcolsep, + tableofcontents, + tabskip, + tabular, + tabularnewline, + tabs, + tabsdone, + tabsyet, + tan, + tanh, + tau, + tenbf, + tenex, + teni, + tenit, + tenrm, + tensl, + tensy, + tentt, + TeX, + test, + textasciicircum, + textasciitilde, + textasteriskcentered, + textbackslash, + textbar, + textbf, + textbraceleft, + textbraceright, + textbullet, + textcircled, + textcompwordmark, + textcolor, + textdagger, + textdaggerdbl, + textdollar, + textellipsis, + textemdash, + textemdash, + textenglish, + textexclamdown, + textexclamdown, + textfloatsep, + textfont, + textfraction, + textgreater, + textindent, + textit, + textheight, + textless, + textls, + textmicrotypecontext, + textmd, + textnormal, + textogonekcentered, + textparagraph, + textperiodcentered, + textquestiondown, + textquotedbl, + textquotedblleft, + textquotedblright, + textquoteleft, + textquoteright, + textregistered, + textrm, + textsc, + textsection, + textsf, + textsl, + textsterling, + textstyle, + textsuperscript, + textsection, + textsubscript, + textsuperscript, + textsterling, + TextSymbolUnavailable, + texttt, + texttrademark, + textunderscore, + textup, + textvisiblespace, + textwidth, + th,TH, + thanks, + the, + theendnotes, + theenumi,theenumii,theenumiii,theenumiv, + thefootnote, + thefootnotemark, + thempfn, + thempfn, + thempfootnote, + thepage, + thepart, + theta, + Theta, + thicklines, + thickmuskip, + thinlines, + thinmuskip, + thinspace, + thispagestyle, + tikz, + tilde, + time, + times, + tiny, + title, + to, + today + toks, + toksdef, + tolerance,, + top, + topfigrule, + topfraction, + topglue, + topins, + topinsert, + topmargin, + topmark, + topsep, + topskip, + totalheight, + tracingall, + tracingcommands, + tracingfonts, + tracinglostchars, + tracingmacros, + tracingonline, + tracingoutput, + tracingpages, + tracingparagraphs, + tracingrestores, + tracingstats, + triangle, + triangleleft, + triangleright, + trivlist, + tt, + ttfam, + ttfamily, + ttraggedright, + two@digits, + twocolumn, + typein, + typeout, + % U + u, + uccode, + uchyph, + unboldmath, + underbar, + underbrace, + underline, + unhbox, + unhcopy, + unitlength, + unkern, + unlhd, + unpenalty, + unrhd, + unskip, + unvbox, + unvcopy, + uparrow, + Uparrow, + upbracefill, + updownarrow, + Updownarrow, + uplus, + uppercase, + upsilon, + Upsilon, + upshape, + usebox, + usecounter, + usefont, + UseMicrotypeSet, + usepackage, + UseTextAccent,UseTextSymbol, + upshape, + % V + v, + vadjust, + valign, + value, + varepsilon, + varphi, + varpi, + varrho, + varsigma, + vartheta, + vbadness, + vbox, + vcenter, + vdash, + vdots, + vec, + vector, + vee, + verb, + verbatim, + vert, + Vert, + vfil, + vfill, + vfilneg, + vfootnote, + vfuzz, + vglue, + vline, + voffset, + vphantom, + vrule, + vsize, + vskip, + vspace, + vsplit, + vss, + vtop, + % W + wd, + wedge, + widehat, + widetilde, + widowpenalty, + width, + wlog, + wp, + wr, + write, + % X + xdef, + xdefinecolor, + XeLaTeX, + XeTeX + xi, + Xi, + xleaders, + xspaceskip, + % Y + year, + % Z + zeta +} + +% -------------------------------------------------------------------------- +% command names `morekeywords' that are used as not-indexed texcs for the +% listings style `cnltx': +\def\cnltx@predefined@environments{% + array, + center, + description, + displaymath, + document, + enumerate, + eqnarray, + equation, + figure, + flushleft, + flushright, + itemize, + labeling, + list, + longtable, + lrbox, + math, + minipage, + otherlanguage, + picture, + quote,quoting, + sloppypar, + tabbing, + table, + tabu, + tabular, + tabularx, + tabulary, + trivlist, + verbatim +} + +% -------------------------------------------------------------------------- +% helper commands that print the list of additionally defined keywords and +% texcs: +\def\cnltx@print@list@sep{, } + +\pgfkeys{ + cnltx/.cd, + list-sep/.code = \def\cnltx@print@list@sep{#1} +} + +\newrobustcmd*\cnltx@write@list@entry[2]{% + #1*{#2}\def\cnltx@write@list@entry##1##2{\cnltx@print@list@sep ##1*{##2}}% +} + +\newrobustcmd*\cnltx@write@list[2]{% + \cnltx@fullexpand@twoargs + \forcsvlist + {\noexpand\cnltx@write@list@entry\noexpand#2} + {\expandonce#1}% +} + +\newrobustcmd*\listsilentcmds{% + \begingroup + \cnltx@write@list\cnltx@predefined@control@sequences\cs + \endgroup +} +\newrobustcmd*\listsilentenvs{% + \begingroup + \cnltx@write@list\cnltx@predefined@environments\env + \endgroup +} + + +% -------------------------------------------------------------------------- +% read bibfiles and get name and type of entries: +\RequirePackage{catchfile} +\DeclareListParser*{\cnltx@parse@bibfile}{@} + +\def\cnltx@bibfile@entries{} + +\long\def\cnltx@get@bibfile@entry#1{\ifblank{#1}{}{\cnltx@parse@bibfile@entry#1}} + +\long\def\cnltx@parse@bibfile@entry#1#{% + \cnltx@parse@bibfile@entry@aux{#1}% +} + +\def\cnltx@parse@bibfile@entry@aux#1#2{% + \ifblank{#2}{}{% + \cnltx@parse@bibfile@entry@aux@i{#1}#2\q@stop + }% +} +\long\def\cnltx@parse@bibfile@entry@aux@i#1#2,#3\q@stop{% + \cnltx@ifinlist{{#1}{#2}}\cnltx@bibfile@entries{} + {\listadd\cnltx@bibfile@entries{{#1}{#2}}}% +} +\newbool{cnltx@inlist} +\long\protected\def\cnltx@ifinlist#1#2#3#4{% + \def\do##1{% + \boolfalse{cnltx@inlist}% + \ifstrequal{##1}{#1} + {\booltrue{cnltx@inlist}\listbreak} + {}% + }% + \dolistloop{#2}% + \ifbool{cnltx@inlist} + {#3} + {#4}% +} + +\def\cnltx@read@bibfile@entry#1#2#3{#1#2#3} + +\def\cnltx@bibentry@key#1#2#3{% + #1{#3}\def\cnltx@bibentry@key##1##2##3{\cnltx@print@list@sep##1{##3}}} + +\def\cnltx@bibentry@type#1#2#3{% + #1{@#2}\def\cnltx@bibentry@type##1##2##3{\cnltx@print@list@sep##1{@##2}}} + +\def\cnltx@bibentry#1#2#3{% + #1{#3} (#1{@#2})% + \def\cnltx@bibentry##1##2##3{\cnltx@print@list@sep##1{##3} (##1{@##2})}% +} + +% #1: cs with three args: first formats, second is the type of the entry, the +% third is the name +% #2: cs with one arg that formats whatever #1 prints, passed to #1 +% #3: filename +\def\cnltx@read@bibfile#1#2#3{% + \def\cnltx@bibfile@entries{}% + \CatchFileDef\cnltx@tmpa{#3}{}% + \expandafter\cnltx@parse@bibfile + \expandafter\cnltx@get@bibfile@entry + \expandafter{\cnltx@tmpa}% + \forlistloop{\cnltx@read@bibfile@entry#1#2}\cnltx@bibfile@entries +} + +\newrobustcmd*\listbibfilekeys[1]{% + \begingroup + \makeatletter + \cnltx@read@bibfile\cnltx@bibentry@key\code{#1}% + \endgroup +} + +\newrobustcmd*\listbibfiletypes[1]{% + \begingroup + \makeatletter + \cnltx@read@bibfile\cnltx@bibentry@type\code{#1}% + \endgroup +} + +\newrobustcmd*\listbibfileentries[1]{% + \begingroup + \makeatletter + \cnltx@read@bibfile\cnltx@bibentry\code{#1}% + \endgroup +} + +\endinput + +% -------------------------------------------------------------------------- +HISTORY: + +2013/09/15 v0.4 - first published version +2013/09/20 v0.5 - merged with `cnltx-csnames', added a number of command names +2013/09/21 v0.6 - added loads of command names +2013/09/30 v0.7 - added \listbibfilekeys, \listbibfiletypes and + \listbibfileentries + - added listings language `makeindex' +2013/10/04 v0.7a - the \listbib... commands remove duplicate entries from the + list if they're equal both in entry type and cite key + - added drivers `@class' and `@bundle' + +TODO: diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx-tools.sty b/Master/texmf-dist/tex/latex/cnltx/cnltx-tools.sty new file mode 100644 index 00000000000..67765297dfd --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx-tools.sty @@ -0,0 +1,220 @@ +% -------------------------------------------------------------------------- +% the CNLTX bundle +% +% LaTeX source code and output +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/cnltx/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2013 Clemens Niederberger +% +% 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 Clemens Niederberger. +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +\RequirePackage{cnltx-base} +\ProvidesPackage{cnltx-tools}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] + +% -------------------------------------------------------------------------- +\cnltx@create@bundle@message{tools}{Error} +\cnltx@create@bundle@message{tools}{Warning} +\cnltx@create@bundle@message{tools}{WarningNoLine} +\cnltx@create@bundle@message{tools}{Info} + +% -------------------------------------------------------------------------- +\newcommand*\cnltx@name@first[1]{#1} +\newcommand*\cnltx@name@last[1]{\textsc{#1}} +\newcommand*\cnltx@name@base[1]{#1} + +\pgfkeys{ + cnltx/.cd, + last-name-format/.code = \def\cnltx@name@last##1{#1} , + first-name-format/.code = \def\cnltx@name@first##1{#1} , + name-format/.code = \def\cnltx@name@base##1{#1} +} + +\newcommand*\cnltx@name@idx[1]{\index{#1@#1}} +\newrobustcmd*\cnltx@name@star[2][]{% + \ifblank{#1} + {\cnltx@name@base{\cnltx@name@last{#2}}} + {\cnltx@name@base{\cnltx@name@first{#1} \cnltx@name@last{#2}}}% +} +\newrobustcmd*\cnltx@name@nostar[2][]{% + \ifblank{#1} + {\cnltx@name@base{\cnltx@name@last{#2}}\cnltx@name@idx{#2}} + {% + \cnltx@name@base{\cnltx@name@first{#1} \cnltx@name@last{#2}}% + \cnltx@name@idx{#2, #1}% + }% +} +\def\cnltx@name{\@ifstar{\cnltx@name@star}{\cnltx@name@nostar}} + +\newrobustcmd*\cnltx@newname[3]{% + \csdef{\cnltx@stripbs#1@short}{\cnltx@name@base{#3}\cnltx@name@idx{#3, #2}}% + \csdef{\cnltx@stripbs#1@long}{\cnltx@name@base{#2 #3}\cnltx@name@idx{#3, #2}}% + \newrobustcmd*#1{% + \@ifstar + {\csuse{\cnltx@stripbs#1@short}} + {\csuse{\cnltx@stripbs#1@long}}% + }% +} + +\newrobustcmd*\newname{\cnltx@newname} + +% -------------------------------------------------------------------------- +\PassOptionsToPackage{space=true}{accsupp} +\RequirePackage{accsupp} +% #1: actual text +% #2: other options +% #3: TeX text +\newrobustcmd\cnltx@accsupp[3]{% + \begingroup + \BeginAccSupp{ ActualText = #1 , #2 }% + #3% + \EndAccSupp{}% + \endgroup +} + +\AtBeginDocument{% + \@ifpackageloaded{hyperref} + {} + {\providecommand\texorpdfstring[2]{#1}}% +} + +\def\cnltx@acronym@format{\scshape} + +\pgfkeys{ + cnltx/.cd, + acronym-format/.code = \def\cnltx@acronym@format{#1} +} + +\newcommand*\cnltx@acronym[2]{% + \ifblank{#1} + {% + \texorpdfstring + {% + \cnltx@accsupp{#2}{}{\cnltx@acronym@format#2}% + \index{#2@{\cnltx@acronym@format#2}}% + } + {#2}% + } + {% + \texorpdfstring + {% + \cnltx@accsupp{#1}{}{\cnltx@acronym@format#2}% + \index{#1@{\cnltx@acronym@format#2}}% + } + {#1}% + }% +} + +\newcommand*\cnltxacronym{\cnltx@acronym} + +% -------------------------------------------------------------------------- +% abbreviations: + +% \def\cnltx@abbr@ifdot{\ltx@ifnextchar@nospace.} +\protected\def\cnltx@abbr@dot#1{\cnltx@ifpunctuation*[.]{#1\@}{#1.\@}} + +% -------------------------------------------------------------------------- +% \defabbr +\protected\def\cnltx@defabbr@dot#1#2{\def#1{\cnltx@abbr@dot{#2}}} +\protected\def\cnltx@defabbr@nodot#1#2{\def#1{#2}} + +% \newabbr +\protected\def\cnltx@newabbr@dot#1#2{% + \cnltx@ifdef#1{}{\protected\def#1{\cnltx@abbr@dot{#2}}}} + +\protected\def\cnltx@newabbr@nodot#1#2{% + \cnltx@ifdef#1{}{\protected\def#1{#2}}} + +% \renewabbr +\protected\def\cnltx@renewabbr@dot#1#2{% + \cnltx@ifdef#1{\protected\def#1{\cnltx@abbr@dot{#2}}}{}} + +\protected\def\cnltx@renewabbr@nodot#1#2{% + \cnltx@ifdef#1{\protected\def#1{#2}}{}} + +\def\cnltx@ifdef#1{% + \ifcsname\expandafter\@gobble\string#1\endcsname + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} + +\newrobustcmd*\newabbr{% + \@ifstar{\cnltx@newabbr@nodot}{\cnltx@newabbr@dot}% +} + +\newrobustcmd*\renewabbr{% + \@ifstar{\cnltx@renewabbr@nodot}{\cnltx@renewabbr@dot}% +} + +\newrobustcmd*\defabbr{% + \@ifstar{\cnltx@defabbr@nodot}{\cnltx@defabbr@dot}% +} + +% -------------------------------------------------------------------------- +\RequirePackage{translations} + +\newcommand*\cnltxlatin[1]{\textit{#1}} + +\DeclareTranslationFallback{cnltx-i.e.}{\cnltxlatin{i.\,e}} +\DeclareTranslation{English}{cnltx-i.e.}{\cnltxlatin{i.\,e}} +\DeclareTranslation{German}{cnltx-i.e.}{d.\,h} + +\DeclareTranslationFallback{cnltx-e.g.}{\cnltxlatin{e.\,g}} +\DeclareTranslation{English}{cnltx-e.g.}{\cnltxlatin{e.\,g}} +\DeclareTranslation{German}{cnltx-e.g.}{z.\,B} + +\DeclareTranslationFallback{cnltx-cf.}{\cnltxlatin{cf}} +\DeclareTranslation{English}{cnltx-cf.}{\cnltxlatin{cf}} +\DeclareTranslation{German}{cnltx-cf.}{vgl} + +\DeclareTranslationFallback{cnltx-etc.}{\cnltxlatin{etc}} +\DeclareTranslation{English}{cnltx-etc.}{\cnltxlatin{etc}} +\DeclareTranslation{German}{cnltx-etc.}{etc} + +\newabbr\ie{\GetTranslation{cnltx-i.e.}} +\newabbr\eg{\GetTranslation{cnltx-e.g.}} +\newabbr\cf{\GetTranslation{cnltx-cf.}} +\newabbr\etc{\GetTranslation{cnltx-etc.}} + +\newabbr\zB{z.\,B} +\newabbr\ZB{Z.\,B} +\newabbr\usw{usw} +\newabbr\usf{usf} +\newabbr\uswusf{usw.\@\space usf} +\newabbr\dsh{d.\,h} +\newabbr\Dsh{D.\,h} +\newabbr\vgl{vgl} +\newabbr\Vgl{Vgl} + +\newcommand*\cnltxtimeformat[1]{\textsc{\,#1}} +\newabbr\PM{\cnltxtimeformat{p.m}} +\newabbr\AM{\cnltxtimeformat{a.m}} +\newabbr\BC{\cnltxtimeformat{b.c}} +\newabbr\AD{\cnltxtimeformat{a.d}} + +\endinput + +% -------------------------------------------------------------------------- +HISTORY: + +2013/09/10 v0.2 - first published version +2013/09/30 v0.7 - added abbreviations + diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx.bbx b/Master/texmf-dist/tex/latex/cnltx/cnltx.bbx new file mode 100644 index 00000000000..16b887ab95c --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx.bbx @@ -0,0 +1,130 @@ +\@ifclassloaded{cnltx-doc}{}{% + \GenericError + {(cnltx.bbx)\@spaces\@spaces\@spaces\@spaces} + {cnltx bibliography style error: invalid class} + {See the cnltx bundle documentation for explanation.} + {% + The `cnltx' bibliography style can only be used with the `cnltx-doc' + document class% + }% +} +\ProvidesFile{cnltx.bbx}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] + +\RequireBibliographyStyle{alphabetic} +\ExecuteBibliographyOptions{block=ragged} + +\DeclareBibliographyDriver{latex}{% + \usebibmacro{bibindex}% + \usebibmacro{begentry}% + \usebibmacro{author}% + \usebibmacro{maintainer}% + \setunit{\labelnamepunct}\newblock + \usebibmacro{title+subtitle}% + \printfield{version}% + \setunit{\addcomma\addspace}% + \usebibmacro{date}% + \newunit\newblock + \usebibmacro{url+urldate}% + \newunit\newblock + \usebibmacro{finentry}% +} +\DeclareBibliographyAlias{package}{latex} +\DeclareBibliographyAlias{class}{latex} +\DeclareBibliographyAlias{bundle}{latex} + +\newbibmacro{title+subtitle}{% + \iffieldundef{title}{}{% + \printfield{title}% + \ifbibindex{\indexfield{title}}{}% + \setunit{\adddot\addspace}% + \iffieldundef{subtitle}{}{% + \printfield{subtitle}% + \setunit{\adddot\addspace}% + }% + }% +} + +\newbibmacro*{maintainer}{% + \printtext{% + \ifnameundef{maintainer} + {} + {% + \addcomma\addspace + \ifnumgreater{\value{maintainer}}{1} + {\GetTranslation{cnltx-maintainers}} + {\GetTranslation{cnltx-maintainer}}% + \addcolon\addspace + \printnames{maintainer}% + }% + }% +} + +\DeclareNameAlias[package]{maintainer}{default} +\DeclareNameAlias[class]{maintainer}{default} +\DeclareNameAlias[bundle]{maintainer}{default} + +\DeclareIndexNameAlias[package]{maintainer}{default} +\DeclareIndexNameAlias[class]{maintainer}{default} +\DeclareIndexNameAlias[bundle]{maintainer}{default} + +\DeclareFieldFormat[package]{title}{\pkg*{#1}} +\DeclareFieldFormat[class]{title}{\cls*{#1}} +\DeclareFieldFormat[bundle]{title}{\bnd*{#1}} + +\DeclareIndexFieldFormat[package]{title}{% + \ifstrequal{#1}{\KOMAScript} + {\pkgidx[KOMA-Script]{\KOMAScript}} + {\pkgidx{#1}}% +} +\DeclareIndexFieldFormat[class]{title}{% + \ifstrequal{#1}{\KOMAScript} + {\clsidx[KOMA-Script]{\KOMAScript}} + {\clsidx{#1}}% +} +\DeclareIndexFieldFormat[bundle]{title}{% + \ifstrequal{#1}{\KOMAScript} + {\bndidx[KOMA-Script]{\KOMAScript}} + {\bndidx{#1}}% +} + +\DeclareIndexFieldFormat[package]{indextitle}{% + \ifstrequal{#1}{\KOMAScript} + {\pkgidx[KOMA-Script]{\KOMAScript}} + {\pkgidx{#1}}% +} +\DeclareIndexFieldFormat[class]{indextitle}{% + \ifstrequal{#1}{\KOMAScript} + {\clsidx[KOMA-Script]{\KOMAScript}} + {\clsidx{#1}}% +} +\DeclareIndexFieldFormat[bundle]{indextitle}{% + \ifstrequal{#1}{\KOMAScript} + {\bndidx[KOMA-Script]{\KOMAScript}} + {\bndidx{#1}}% +} + +\DeclareFieldFormat[package]{subtitle}{\mkbibemph{#1}} +\DeclareFieldFormat[class]{subtitle}{\mkbibemph{#1}} +\DeclareFieldFormat[bundle]{subtitle}{\mkbibemph{#1}} + +\DeclareLabelname[package,class,bundle]{% + \field{shortauthor} + \field{author} + \field{maintainer} + \field{shorteditor} + \field{editor} + \field{translator} +} + +\DeclareDriverSourcemap[datatype=bibtex]{ + \map{ + \step[fieldsource=info, fieldtarget=subtitle] + } +} + +\endinput + +HISTORY: + +2013/10/04 v0.7a - added drivers `@class' and `@bundle' + diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx.cbx b/Master/texmf-dist/tex/latex/cnltx/cnltx.cbx new file mode 100644 index 00000000000..142467d2af2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx.cbx @@ -0,0 +1,26 @@ +\@ifclassloaded{cnltx-doc}{}{% + \GenericError + {(cnltx.cbx)\@spaces\@spaces\@spaces\@spaces} + {cnltx citation style error: invalid class} + {See the cnltx bundle documentation for explanation.} + {% + The `cnltx' citation style can only be used with the `cnltx-doc' + document class% + }% +} +\ProvidesFile{cnltx.cbx}[\cnltx@@date\space \cnltx@@version\space \cnltx@@info] + +\RequireCitationStyle{alphabetic} + +\renewbibmacro*{citeindex}{% + \ifciteindex + {% + \indexnames{labelname}% + \indexnames{maintainer}% + \indexfield{indextitle}% + } + {}% +} + + +\endinput diff --git a/Master/texmf-dist/tex/latex/cnltx/cnltx.dbx b/Master/texmf-dist/tex/latex/cnltx/cnltx.dbx new file mode 100644 index 00000000000..b757744ffe2 --- /dev/null +++ b/Master/texmf-dist/tex/latex/cnltx/cnltx.dbx @@ -0,0 +1,37 @@ +\@ifclassloaded{cnltx-doc}{}{% + \GenericError + {(cnltx.dbx)\@spaces\@spaces\@spaces\@spaces} + {cnltx datamodel error: invalid class} + {See the cnltx bundle documentation for explanation.} + {% + The `cnltx' biblatex datamodel can only be used with the `cnltx-doc' + document class% + }% +} +\DeclareDatamodelFields[type=list, datatype=name]{maintainer} +\DeclareDatamodelEntryfields[package,class,bundle]{ + author, + maintainer, + info, + title, + day, + month, + year, + addendum, + language, + note, + subtitle, + titleaddon, + translator, + url, + urlday, + urlmonth, + urlyear, + version +} + +\endinput + +HISTORY: + +2013/10/04 v0.7a - added drivers `@class' and `@bundle' diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 712ce6ecf5b..9f9096822e3 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -117,7 +117,7 @@ my @TLP_working = qw( clefval cleveref clipboard clock clrscode cm-lgc cm-super cm-unicode cmap cmarrows cmbright cmcyr - cmdstring cmdtrack cmll cmpica cmpj cmsd cmtiup + cmdstring cmdtrack cmll cmpica cmpj cmsd cmtiup cnltx codedoc codepage codicefiscaleitaliano collcell collectbox collref colordoc colorinfo colorsep colortab colortbl colorwav colorweb colourchange diff --git a/Master/tlpkg/tlpsrc/cnltx.tlpsrc b/Master/tlpkg/tlpsrc/cnltx.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index 881c1f6af32..2b386cb9b4f 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -128,6 +128,7 @@ depend clock depend cmdstring depend cmdtrack depend cmsd +depend cnltx depend codedoc depend codepage depend collcell -- cgit v1.2.3