From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/codesection/README | 25 ++ macros/latex/contrib/codesection/codesection.dtx | 363 +++++++++++++++++++++++ macros/latex/contrib/codesection/codesection.ins | 28 ++ macros/latex/contrib/codesection/codesection.pdf | Bin 0 -> 377180 bytes 4 files changed, 416 insertions(+) create mode 100644 macros/latex/contrib/codesection/README create mode 100644 macros/latex/contrib/codesection/codesection.dtx create mode 100644 macros/latex/contrib/codesection/codesection.ins create mode 100644 macros/latex/contrib/codesection/codesection.pdf (limited to 'macros/latex/contrib/codesection') diff --git a/macros/latex/contrib/codesection/README b/macros/latex/contrib/codesection/README new file mode 100644 index 0000000000..3cc5768343 --- /dev/null +++ b/macros/latex/contrib/codesection/README @@ -0,0 +1,25 @@ +codesection +=========== +Provides an Environment which can be included or excluded from compilation. + +== Description == + +This packages provides an environment to switch a section of code on or off. The +code can be placed anywhere in the file and is not limited to the document or the +preamble. +The motivation for this package was to have commands which allow to +preselect if sections of code in a preamble of a template are executed or not. + +== Contents == + +This work contains: +- The codesection files: + - codesection.dtx + - codesection.ins +- The documentation: + - codesection.pdf +- This README file + +== Maintained by == +Matthias Pospiech +matthias@pospiech.eu \ No newline at end of file diff --git a/macros/latex/contrib/codesection/codesection.dtx b/macros/latex/contrib/codesection/codesection.dtx new file mode 100644 index 0000000000..a62f3e909f --- /dev/null +++ b/macros/latex/contrib/codesection/codesection.dtx @@ -0,0 +1,363 @@ +% \iffalse meta-comment +% !TeX spellcheck = en-US +% +% File: codesection.sty +% Version: 2014/06/27 v0.1 +% Author: Matthias Pospiech +% Email: +% +% Copyright (C) 2014 by Matthias Pospiech +% --------------------------------------------------------------------------- +% 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 Matthias Pospiech. +% +% This work consists of the files codesection.dtx and codesection.ins +% and the derived filebase codesection.sty. +% +% \fi +% +% \iffalse +%<*driver> +\ProvidesFile{codesection.dtx} +% +%\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%\ProvidesPackage{codesection} +%<*package> + [2014/06/27 v0.1 disableable code sections] +% +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{hypdoc} +\RequirePackage[% + loadHyperref=true, + createIndexEntries=false, + applyLayout=true] +{doctools} % +% +\usepackage{lmodern} + +\usepackage{codesection}[2014/06/27] +\EnableCrossrefs +\CodelineIndex +\RecordChanges + +\begin{document} + \DocInput{codesection.dtx} + \PrintChanges + \PrintIndex +\end{document} +% +% \fi +% +% \CheckSum{0} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{v0.1}{2014/06/27}{Converted to DTX file} +% +% \DoNotIndex{\newcommand,\newenvironment} +% +% \providecommand*{\url}{\texttt} +% \GetFileInfo{codesection.dtx} +% \title{The \textsf{codesection} package} +% \author{Matthias Pospiech \\ \url{matthias@pospiech.eu}} +% \date{\fileversion~from \filedate} +% +% \maketitle +% +% \section{Introduction} +% This packages provides an environment to switch a section of code +% on or off. The code can be placed anywhere in the file and is +% not limited to the document or the preamble. +% The motivation for this package was to have commands which allow to preselect if +% sections of code in a preamble of a template are executed or not. +% +% \section{Origin of the code} +% The code is based on the \texttt{verbatim.sty} package and was +% originally modified by Ulrich Diez to match the pure comment +% functionality. Further modifications are contributed by +% Matthias Pospiech. +% During the development some discussion about the best approach took place +% on de.comp.text.tex% +% \footnote{\url{http://groups.google.com/group/de.comp.text.tex/% +% browse_thread/thread/2c18f0c221ab167f/}}, which resulted in the current code. +% +% \section{Usage} +% The idea of the following commands is to define a collection of code, here +% notated as a \emph{section}, which can be executed as it would be without the +% commands or which is not executed at all. To use that section it must be defined +% with \emph{true} (execute code) or \emph{false} (skip code). +% +% \DescribeMacro{\DefineCodeSection} \oarg{true/false}\marg{name} +% \AfterLastParam +% Defines a code section with a \emph{name}. The default is \emph{true}, +% thus the code will be executed. +% +% \DescribeMacro{\SetCodeSection} \marg{name}\marg{true/false} +% \AfterLastParam +% is like \cs{DefineCodeSection}, but with both arguments mandatory. +% +% \DescribeMacro{\BeginCodeSection} \marg{name} \AfterLastParam +% starts the code section with the given name and +% +% \DescribeMacro{\EndCodeSection} \marg{name} \AfterLastParam +% ends the code section with the given name. Note that both commands need to +% be paired and not to be nested with other code sections. +% +% \cs{BeginCodeSection} and \cs{EndCodeSection} \AfterLastParam +% mimic an environment. It would be preferable to define them as an +% environment, but that opens a group in \TeX{}, which has many disadvantages. +% For example this would make it impossible to load packages. Therefore this + % package defines paired commands and consequently, has no such limitations. +% +% % +% \section{Example} +% In the following code the first section is going to be executed and the second +% and the third are completely skipped. +% \iffalse +%<*example> +% \fi +\begin{lstlisting}[style=lstDemoStyleLaTeXCode] +\DefineCodeSection[true]{ExecuteMe} +\DefineCodeSection[false]{SkipMe} +% +\BeginCodeSection{ExecuteMe} + This sentence has ... +\EndCodeSection{ExecuteMe} +% +\BeginCodeSection{SkipMe} + no end. +\EndCodeSection{SkipMe} +% +\SetCodeSection{ExecuteMe}{false} +% +\BeginCodeSection{ExecuteMe} + a different ending. +\EndCodeSection{ExecuteMe} +\end{lstlisting} +% \iffalse +% +% \fi +% +% \DefineCodeSection[true]{ExecuteMe} +% \DefineCodeSection[false]{SkipMe} +% \BeginCodeSection{ExecuteMe} +% This sentence has ... +% \EndCodeSection{ExecuteMe} +% % +% \BeginCodeSection{SkipMe} +% no end. +% \EndCodeSection{SkipMe} +% % +% \SetCodeSection{ExecuteMe}{false} +% % +% \BeginCodeSection{ExecuteMe} +% a different ending. +% \EndCodeSection{ExecuteMe}% +% +% \StopEventually{} +% +% \section{Implementation} +% +% \iffalse +%<*codesection.sty> +% \fi +% +% +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\ProvidesPackage{codesection} + [2014/06/27 v0.1 disableable code sections] +\RequirePackage{etoolbox} +% \end{macrocode} +% +% \begin{macro}{\DefineCodeSection} +% \begin{macrocode} +%%---------------------------------------------------------------------- +%% provide new if (\ifCodeSection) +%% with definition \CodeSection +%% +\newcommand{\DefineCodeSection}[2][true]{% + \expandafter\newif\csname ifCodeSection#2\endcsname + \csname CodeSection#2#1\endcsname +}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\SetCodeSection} +% \begin{macrocode} +%%---------------------------------------------------------------------- +%% Alternative to \DefineCodeSection +\newcommand{\SetCodeSection}[2]{% + \DefineCodeSection[#2]{#1} +}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\BeginCodeSection} +% \begin{macrocode} +%%---------------------------------------------------------------------- +\newcommand\BeginCodeSection[1]{% + \ifcsdef{ifCodeSection#1}{}{% + \PackageError{codesection}{Section #1 is unknown\MessageBreak}{}% + } + \csname ifCodeSection#1\endcsname + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi + {% comment all code inside template section + \@bsphack +%% open new group + \begingroup +%% save current template section name + \def\@currtemplate{#1}% + \let\do\@makeother\dospecials + \catcode`\^^M\active +%% enter main loop + \codeSection@ + }% + {% execute all code inside template section +%% = do nothing except trimming spaces + \@bsphack\@esphack% + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\EndCodeSection} +% \begin{macrocode} +%%---------------------------------------------------------------------- +%% The macros \@bsphack and \@esphack are internal to LaTeX; +%% they ensure that an entity like a marginal note or +%% label definition does not introduce any extra space +%% into a paragraph, independently of whether or not +%% it is attached to a word. +\newcommand\EndCodeSection[1]{\@bsphack\@esphack} +% \end{macrocode} +% \end{macro} +% +% Modified code from \texttt{verbatim.sty}. This code is not very well documented, +% because I do not understand it well enough. +% \begin{macrocode} +%%---------------------------------------------------------------------- +%% usage ??? +\@ifundefined{vrb@catcodes}{% + \def\vrb@catcodes{% + \catcode`\!12\catcode`\[12\catcode`\]12% + }% +}{}% +%%---------------------------------------------------------------------- +\begingroup +\vrb@catcodes +\lccode`\!=`\\ +\lccode`\[=`\{ +\lccode`\]=`\} +\catcode`\~=\active +\lccode`\~=`\^^M +\lccode`\C=`\C +\lowercase{% +%%---------------------------------------------------------------------- + \def\codeSection@#1{% + \endgroup +%% ---- + \def\codeSection@##1~{\codeSection@@##1!#1\@nil}% +%% ---- + \def\codeSection@@##1!#1{\futurelet\next\codeSection@@@}% +%% ---- + \def\codeSection@@@##1\@nil{% + \ifx\next\@nil + \let\next\codeSection@ + \else + \def\@tempa####1!#1\@nil{####1}% + \def\next{\expandafter\codeSection@test\@tempa##1\@nil~}% + \fi + \next + }% +%% ---- + \def\codeSection@test##1{% + \let\next\codeSection@test + \if\noexpand##1\noexpand~\let\next\codeSection@ + \else \if\noexpand##1 + \else \if\noexpand##1\noexpand[\let\@tempc\@empty + \let\next\codeSection@testend + \else \def\next{\codeSection@##1}% + \fi\fi\fi + \next + }% +%% ---- + \def\codeSection@testend##1{% + \if\noexpand##1\noexpand~\let\next\codeSection@ + \else \if\noexpand##1\noexpand]\let\next\codeSection@@testend + \else\if\noexpand##1\noexpand!\def\next{\codeSection@!}% + \else \expandafter\def\expandafter\@tempc\expandafter + {\@tempc##1}% + \fi\fi\fi + \next + }% +%% ---- test if end statement belongs to current section +%% saved in \@currtemplate + \def\codeSection@@testend{% + \ifx\@tempc\@currtemplate +%% end group and call rescan + \edef\next{\noexpand\endgroup\noexpand\@esphack + \noexpand\codeSection@rescan{\@currtemplate}}% + \else +%% start loop gain + \let\next\codeSection@ + \fi + \next + }% +%% ---- does what ??? + \def\codeSection@rescan##1##2~{% + \if\noexpand~\noexpand##2~% + \else + \@warning{% + Characters dropped after + `\string\EndCodeSection{##1}'% + }% + \fi + }% + }% +%%---------------------------------------------------------------------- +} % lowercase +\codeSection@{EndCodeSection}% +%%---------------------------------------------------------------------- +% \end{macrocode} +% +% +% \iffalse +% +% \fi +% +% \Finale +\endinput + diff --git a/macros/latex/contrib/codesection/codesection.ins b/macros/latex/contrib/codesection/codesection.ins new file mode 100644 index 0000000000..63909b975c --- /dev/null +++ b/macros/latex/contrib/codesection/codesection.ins @@ -0,0 +1,28 @@ +% See file 'codesection.dtx' for copyright and licence. + +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\usedir{tex/latex/codesection} + +\generate{ + \file{codesection.sty}{\from{codesection.dtx}{codesection.sty}} +} + +\obeyspaces +\Msg{*************************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the following *} +\Msg{* file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* codesection.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* codesection.dtx through LaTeX. *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{* *} +\Msg{*************************************************************} + +\endbatchfile diff --git a/macros/latex/contrib/codesection/codesection.pdf b/macros/latex/contrib/codesection/codesection.pdf new file mode 100644 index 0000000000..c04f1d95a1 Binary files /dev/null and b/macros/latex/contrib/codesection/codesection.pdf differ -- cgit v1.2.3