%%%============================================================================== %% Copyright 2022 by Alceu Frigeri %% %% This work may be distributed and/or modified under the conditions of %% %% * The [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), %% version 1.3c (or later), and/or %% * The [GNU Affero General Public License](https://www.gnu.org/licenses/agpl-3.0.html), %% version 3 (or later) %% %% This work has the LPPL maintenance status *maintained*. %% %% The Current Maintainer of this work is Alceu Frigeri %% %% This is version 1.0.1beta (2022/09/06) %% %% The list of files that compose this work can be find in the README.md file at %% https://ctan.org/pkg/democodetools %% %%%============================================================================== \NeedsTeXFormat{LaTeX2e}[2022/06/01] \def\tc@tmp@packname{democodelisting} \def\tc@tmp@altpackname{democodelisting} \def\tc@tmp@packdesc{Demo Code Listing} \def\tc@tmp@packdate{2022/09/06} \def\tc@tmp@packversion{1.0.1beta} \let\@exp\expandafter \@exp\edef\csname\tc@tmp@altpackname version\endcsname{\tc@tmp@packversion} \@exp\@exp\@exp\ProvidesPackage\@exp\@exp\@exp{\@exp\tc@tmp@packname\@exp}\@exp[\tc@tmp@packdate\space v\tc@tmp@packversion\space\tc@tmp@packdesc] \RequirePackage{listings} \RequirePackage{scontents} \newlength{\dc@demo@parindent} \newlength{\dc@org@parindent} \setlength\dc@org@parindent{\parindent} \setlength\parindent{0pt} \colorlet{dc@lightcyan}{white!97!cyan} \colorlet{dc@lightgray}{white!97!black} \definecolor{dc@grayblack}{rgb}{0.8,0.8,0.8} \colorlet{dc@darkgreen}{green!45!black!100} \colorlet{dc@darkteal}{teal!45!black!100} \colorlet{dc@darkblue}{blue!40!black!100} \colorlet{dc@darkred}{red!45!black!100} \colorlet{dc@blueishblack}{blue!75!black!100} \colorlet{dc@reddishblack}{red!60!black!100} \colorlet{dc@greenishblack}{green!45!black!100} \def\dc@lstbckgndcolordefault{dc@lightgray}% \def\dc@lststringcolordefault{dc@darkteal} \def\dc@lstcommentcolordefault{dc@darkgreen} \def\dc@lsttexcscolordefault{dc@darkblue} \def\dc@lstkeywdcolordefault{dc@darkblue} \def\dc@lsttexcsBcolordefault{dc@blueishblack} \def\dc@lstkeywdBcolordefault{dc@greenishblack} \def\dc@lstemphcolordefault{dc@reddishblack} \colorlet{dc@lstnumbercolordefault}{white!50!black!100} \def\dc@lstrulecolordefault{gray} \def\dc@lstnumbercolordefault{gray} \DeclareKeys[dclisting]{ settexcs.usage = general, settexcs.code = {\ifblank{#1}{\def\dc@lsttexcs{}}{\def\dc@lsttexcs{#1}}}, texcs.usage = general, texcs.code = {\ifblank{#1}{}{\edef\dc@lsttexcs{\dc@lsttexcs,#1}}}, texcsstyle.usage = general, texcsstyle.code = {\ifblank{#1}{\def\dc@lsttexcsstyle{\bfseries\color{\dc@lsttexcscolordefault}}}{\def\dc@lsttexcsstyle{#1}}}, settexcs2.usage = general, settexcs2.code = {\ifblank{#1}{\def\dc@lsttexcsB{}}{\def\dc@lsttexcsB{#1}}}, texcs2.usage = general, texcs2.code = {\ifblank{#1}{}{\edef\dc@lsttexcsB{\dc@lsttexcsB,#1}}}, texcs2style.usage = general, texcs2style.code = {\ifblank{#1}{\def\dc@lsttexcsBstyle{\bfseries\color{\dc@lsttexcsBcolordefault}}}{\def\dc@lsttexcsBstyle{#1}}}, settexcs3.usage = general, settexcs3.code = {\ifblank{#1}{\def\dc@lsttexcsC{}}{\def\dc@lsttexcsC{#1}}}, texcs3.usage = general, texcs3.code = {\ifblank{#1}{}{\edef\dc@lsttexcsC{\dc@lsttexcsC,#1}}}, texcs3style.usage = general, texcs3style.code = {\ifblank{#1}{\def\dc@lsttexcsCstyle{\bfseries\color{\dc@lsttexcsBcolordefault}}}{\def\dc@lsttexcsCstyle{#1}}}, setkeywd.usage = general, setkeywd.code = {\ifblank{#1}{\def\dc@lstkeywd{}}{\def\dc@lstkeywd{#1}}}, keywd.usage = general, keywd.code = {\ifblank{#1}{}{\edef\dc@lstkeywd{\dc@lstkeywd,#1}}}, keywdstyle.usage = general, keywdstyle.code = {\ifblank{#1}{\def\dc@lstkeywdstyle{\bfseries\color{\dc@lstkeywdcolordefault}}}{\def\dc@lstkeywdstyle{#1}}}, setkeywd2.usage = general, setkeywd2.code = {\ifblank{#1}{\def\dc@lstkeywdB{}}{\def\dc@lstkeywdB{#1}}}, keywd2.usage = general, keywd2.code = {\ifblank{#1}{}{\edef\dc@lstkeywdB{\dc@lstkeywdB,#1}}}, keywd2style.usage = general, keywd2style.code = {\ifblank{#1}{\def\dc@lstkeywdBstyle{\bfseries\color{\dc@lstkeywdBcolordefault}}}{\def\dc@lstkeywdBstyle{#1}}}, setkeywd3.usage = general, setkeywd3.code = {\ifblank{#1}{\def\dc@lstkeywdC{}}{\def\dc@lstkeywdC{#1}}}, keywd3.usage = general, keywd3.code = {\ifblank{#1}{}{\edef\dc@lstkeywdC{\dc@lstkeywdC,#1}}}, keywd3style.usage = general, keywd3style.code = {\ifblank{#1}{\def\dc@lstkeywdCstyle{\bfseries\color{\dc@lstkeywdBcolordefault}}}{\def\dc@lstkeywdCstyle{#1}}}, setemph.usage = general, setemph.code = {\ifblank{#1}{\def\dc@lstemph{}}{\def\dc@lstemph{#1}}}, emph.usage = general, emph.code = {\ifblank{#1}{}{\edef\dc@lstemph{\dc@lstemph,#1}}}, emphstyle.usage = general, emphstyle.code = {\ifblank{#1}{\def\dc@lstemphstyle{\bfseries\color{\dc@lstemphcolordefault}}}{\def\dc@lstemphstyle{#1}}}, setemph2.usage = general, setemph2.code = {\ifblank{#1}{\def\dc@lstemphB{}}{\def\dc@lstemphB{#1}}}, emph2.usage = general, emph2.code = {\ifblank{#1}{}{\edef\dc@lstemphB{\dc@lstemphB,#1}}}, emph2style.usage = general, emph2style.code = {\ifblank{#1}{\def\dc@lstemphBstyle{\bfseries\color{\dc@lstemphcolordefault}}}{\def\dc@lstemphBstyle{#1}}}, setemph3.usage = general, setemph3.code = {\ifblank{#1}{\def\dc@lstemphC{}}{\def\dc@lstemphC{#1}}}, emph3.usage = general, emph3.code = {\ifblank{#1}{}{\edef\dc@lstemphC{\dc@lstemphC,#1}}}, emph3style.usage = general, emph3style.code = {\ifblank{#1}{\def\dc@lstemphCstyle{\bfseries\color{\dc@lstemphcolordefault}}}{\def\dc@lstemphCstyle{#1}}}, stringstyle.usage = general, stringstyle.code = {\ifblank{#1}{\def\dc@lststringstyle{\color{\dc@lststringcolordefault}}}{\def\dc@lststringstyle{#1}}}, commentstyle.usage = general, commentstyle.code = {\ifblank{#1}{\def\dc@lstcommentstyle{\color{\dc@lstcommentcolordefault}}}{\def\dc@lstcommentstyle{#1}}}, bckgndcolor.usage = general, bckgndcolor.code = {\ifblank{#1}{\def\dc@lstbckgndcolor{\color{\dc@lstbckgndcolordefault}}}{\def\dc@lstbckgndcolor{#1}}}, rulecolor.usage = general, rulecolor.code = {\ifblank{#1}{\def\dc@lstrulecolor{\color{\dc@lstrulecolordefault}}}{\def\dc@lstrulecolor{#1}}}, numbers.usage = general, numbers.code = {\ifblank{#1}{\def\dc@lstnumbers{none}}{\def\dc@lstnumbers{#1}}}, numberstyle.usage = general, numberstyle.code = {\ifblank{#1}{\def\dc@lstnumberstyle{\tiny\color{\dc@lstnumbercolordefault}}}{\def\dc@lstnumberstyle{#1}}}, parindent.usage = general, parindent.code = {\setlength\dc@demo@parindent{\parindent}\setdcpar{#1}}, default.usage = general, default.code = {\dc@lstkeysdefault}, } \NewDocumentCommand{\setdclisting}{m}{\SetKeys[dclisting]{#1}} \NewDocumentCommand{\dc@lstkeysdefault}{}{% \setdclisting{% settexcs,texcsstyle,settexcs2,texcs2style,settexcs3,texcs3style,% setkeywd,keywdstyle,setkeywd2,keywd2style,setkeywd3,keywd3style,% setemph,emphstyle,setemph2,emph2style,setemph3,emph3style,% stringstyle,commentstyle,bckgndcolor,rulecolor,% numbers,numberstyle,% }% } \setdclisting{default} \DeclareKeys[dcpar]{ org.usage = general, org.code = {\setlength\dc@demo@parindent\dc@org@parindent}, default.usage = general, default.code = {\setlength\dc@demo@parindent\parindent}, } \DeclareUnknownKeyHandler[dcpar]{\ifblank{#1}{\setlength\dc@demo@parindent\dc@org@parindent}{\setlength\dc@demo@parindent{#1}}} \NewDocumentCommand{\setdcpar}{m}{\SetKeys[dcpar]{#1}} \DeclareKeys[dclisting]{ codeprefix.usage = general, codeprefix.code = {\ifblank{#1}{\def\dc@codeprefix{\LaTeX~Code:}}{\def\dc@codeprefix{#1}}}, resultprefix.usage = general, resultprefix.code = {\ifblank{#1}{\def\dc@resultprefix{\LaTeX~Result:}}{\def\dc@resultprefix{#1}}}, defaulttools.usage = general, defaulttools.code = {\SetKeys[dclisting]{codeprefix,resultprefix}} , } %\DeclareUnknownKeyHandler[dclisting]{\setdclisting{#1={#2}}} %\NewDocumentCommand{\setdctools}{m}{\SetKeys[dctools]{#1}} \SetKeys[dclisting]{defaulttools} %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%% %%% From doctools.dtx file %%% lstlistings 'definitions' %%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%% listings % \lstdefinestyle{lstStyleDefault}{ %%% appearance ,basicstyle=\small\ttfamily % Standardschrift %%% Space and placement ,floatplacement=tbp % is used as float place specifier ,aboveskip=\medskipamount % define the space above and ,belowskip=\medskipamount % below displayed listings. ,lineskip=0pt % specifies additional space between lines in listings. ,boxpos=c % c,b,t %%% The printed range ,showlines=false % prints empty lines at the end of listings %%% characters ,extendedchars=true % allows or prohibits extended characters % in listings, that means (national) % characters of codes 128-255. ,upquote=true % determines printing of quotes ,tabsize=2, % chars of tab ,showtabs=false % do not show tabs ,showspaces=false % do not show spaces ,showstringspaces=false % do not show blank spaces in string %%% Line numbers ,numbers=none % left, right, none %%% Captions ,numberbychapter=true % ,captionpos=b % t,b ,abovecaptionskip=\smallskipamount % the vertical space respectively above ,belowcaptionskip=\smallskipamount % or below each caption %%% Margins and line shape ,linewidth=\linewidth % defines the base line width for listings. ,xleftmargin=0pt % extra margins ,xrightmargin=0pt % ,resetmargins=false % indention from list environments like enumerate % or itemize is reset, i.e. not used. ,breaklines=true % line breaking of long lines. ,breakatwhitespace=false % allows line breaks only at white space. ,breakindent=0pt % is the indention of the second, third, ... % line of broken lines. ,breakautoindent=true % apply intendation ,columns=flexible % ,keepspaces=true % } \lstdefinestyle{lstDocStyleBase}{ %%% base style % ,style=lstStyleDefault %%% appearance ,commentstyle=\slshape %%% Line numbers ,numbers=left % left, right, none ,stepnumber=1 % seperation between numbers ,numberfirstline=false % number first line always ,numberstyle={\dc@lstnumberstyle} % style of numbers ,numbersep=5pt % distance to text ,numberblanklines=true % %%% language ,language = [LaTeX]TeX %%% commands % LaTeX programming ,moretexcs={setlength,usepackage,newcommand,renewcommand,providecommand,RequirePackage,SelectInputMappings,ifpdftex,ifpdfoutput,AtBeginEnvironment,ProvidesPackage}, % other commands ,moretexcs={maketitle,text,includegraphics,chapter,section,subsection, subsubsection,paragraph,textmu,enquote,blockquote,ding,mathds,ifcsdef,Bra,Ket,Braket,subcaption,lettrine,mdfsetup,captionof,listoffigures,listoftables,tableofcontents,appendix} % tables ,moretexcs={newcolumntype,rowfont,taburowcolors,rowcolor,rowcolors,bottomrule, toprule,midrule,} % hyperref ,moretexcs={hypersetup} % glossaries ,moretexcs={gls,printglossary,glsadd,newglossaryentry,newacronym} % Koma ,moretexcs={mainmatter,frontmatter,geometry,KOMAoptions,setkomafont,addtokomafont} % SI, unit ,moretexcs={si,SI,sisetup,unit,unitfrac,micro} % biblatex package ,moretexcs={newblock,ExecuteBibliographyOptions,addbibresource} % math packages ,moretexcs={operatorname,frac,sfrac,dfrac,DeclareMathOperator,mathcal,underset} % demo package ,moretexcs={democodefile,package,cs,command,env,DemoError,PrintDemo} % tablestyles ,moretexcs={theadstart,tbody,tsubheadstart,tsubhead,tend} % code section package ,moretexcs={DefineCodeSection,SetCodeSection,BeginCodeSection, EndCodeSection} % template tools package ,moretexcs={IfDefined,IfUndefined,IfElseDefined,IfElseUndefined,IfMultDefined,IfNotDraft,IfNotDraftElse,IfDraft,IfPackageLoaded,IfElsePackageLoaded,IfPackageNotLoaded,IfPackagesLoaded,IfPackagesNotLoaded,ExecuteAfterPackage,ExecuteBeforePackage,IfTikzLibraryLoaded,IfColumntypeDefined,IfColumntypesDefined,IfColorDefined,IfColorsDefined,IfMathVersionDefined,SetTemplateDefinition,UseDefinition,IfFileExists,iflanguage} % tablestyles ,moretexcs={setuptablefontsize,tablefontsize,setuptablestyle,tablestyle, setuptablecolor,tablecolor,disablealternatecolors, tablealtcolored,tbegin,tbody,tend,thead, theadstart,tsubheadstart,tsubhead,theadrow,tsubheadrow,resettablestyle,theadend,tsubheadend,tableitemize,PreserveBackslash} % todonotes ,moretexcs={todo,missingfigure} % listings ,moretexcs={lstloadlanguages,lstdefinestyle,lstset} % index ,moretexcs={indexsetup} % glossaries ,moretexcs={newglossarystyle,glossarystyle,deftranslation,newglossary} % tikz ,moretexcs={usetikzlibrary} % color ,moretexcs={definecolor,colorlet} % caption ,moretexcs={captionsetup,DeclareCaptionStyle} % floatrow ,moretexcs={floatsetup} % doc.sty ,moretexcs={EnableCrossrefs,DisableCrossrefs,PageIndex,CodelineIndex,CodelineNumbered} % refereces ,moretexcs={cref,Cref,vref,eqnref,figref,tabref,secref,chapref} } %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%% %%% From doctools.dtx file %%% lstlistings 'definitions' %%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% \lstloadlanguages{[LaTeX]TeX} \lstdefinestyle{codestyle}{ %%% base style style=lstDocStyleBase, language=[LaTeX]{TeX}, numbers=none,%{\dc@lstnumbers},% %%% colors rulecolor={\dc@lstrulecolor}, backgroundcolor={\dc@lstbckgndcolor},% stringstyle={\dc@lststringstyle}, commentstyle={\dc@lstcommentstyle}, framerule=0pt,%0.4pt, nolol=true, frame=none, aboveskip=-2ex, belowskip=-2ex, basicstyle=\footnotesize\ttfamily , % Standardschrift rulesep = 0pt, breaklines=true, breakindent=3em, moretexcs={\dc@lsttexcs}, moretexcs=[2]{\dc@lsttexcsB}, moretexcs=[3]{\dc@lsttexcsC}, texcsstyle=*{\dc@lsttexcsstyle}, texcsstyle=*[2]{\dc@lsttexcsBstyle}, texcsstyle=*[3]{\dc@lsttexcsCstyle}, morekeywords={\dc@lstkeywd}, morekeywords=[2]{\dc@lstkeywdB}, morekeywords=[3]{\dc@lstkeywdC}, keywordstyle={\dc@lstkeywdstyle}, keywordstyle=[2]{\dc@lstkeywdBstyle}, keywordstyle=[3]{\dc@lstkeywdCstyle}, emph={\dc@lstemph}, emph=[2]{\dc@lstemphB}, emph=[3]{\dc@lstemphC}, emphstyle={\dc@lstemphstyle}, emphstyle=[2]{\dc@lstemphBstyle}, emphstyle=[3]{\dc@lstemphCstyle}, } \lstset{style=codestyle} %%% %%% Using scontents package !!!! %%% \ExplSyntaxOn \keys_define:nn { scontents / scontents} { st.meta:nn = { scontents } { store-env = #1 }, st.value_required:n = true } \ExplSyntaxOff \newenvsc{stcode} \let\verbatimsc\@undefined \let\verbatimsc@\@undefined \let\endverbatimsc\@undefined \lstnewenvironment{verbatimsc}{\lstset{style=codestyle}}{} \NewDocumentEnvironment{verbsc}{m}{% \let\verbatimsc\@undefined \let\verbatimsc@\@undefined \let\endverbatimsc\@undefined \setdclisting{#1} \edef\dc@tmp{style=codestyle,moretexcs={\dc@lsttexcs},moretexcs=[2]{\dc@lsttexcsB},moretexcs=[3]{\dc@lsttexcsC},% morekeywords={\dc@lstkeywd},morekeywords=[2]{\dc@lstkeywdB},morekeywords=[3]{\dc@lstkeywdC},% emph={\dc@lstemph},emph=[2]{\dc@lstemphB},emph=[3]{\dc@lstemphC},% numbers={\dc@lstnumbers}} \lstnewenvironment{verbatimsc}{\expandafter\lstset\expandafter{\dc@tmp}}{} }{% } \NewDocumentCommand{\DisplayCodeB}{O{}m}{% {% \begin{verbsc}{#1}% \begin{tabular}{J{.98\textwidth}}\dc@codeprefix \\ \typestored{#2}% \end{tabular}% \end{verbsc}% }% } \NewDocumentCommand{\DemoCodeB}{O{}m}{{% \setlength\parindent\dc@org@parindent \begin{verbsc}{#1}% \begin{tabular}{J{.98\textwidth}}% \dc@codeprefix \\% \typestored{#2}\\% \end{tabular}% \begin{tabular}{J{.98\textwidth}}% \dc@resultprefix \\\hline\\[-1ex]% \getstored{#2}\\\hline% \end{tabular}% \end{verbsc}% }} \NewDocumentCommand{\TabbedDemoCodeB}{O{}m}{{% \setlength\parindent\dc@org@parindent \begin{verbsc}{#1}% \arrayrulecolor{gray} \begin{tabular}{J{.49\textwidth}@{}J{.49\textwidth}}% \dc@codeprefix & \dc@resultprefix\\\hline\\[-1ex]% \typestored{#2} & \getstored{#2}\\\hline% \end{tabular}% \end{verbsc}% }} \NewDocumentCommand{\DisplayCode}{O{}m}{{% \begin{verbsc}{#1}% \vspace*{0.5ex} \begin{minipage}{1\textwidth}\dc@codeprefix \\ \typestored{#2}% \end{minipage}% \\[1.5ex]% \end{verbsc}% }} \NewDocumentCommand{\DemoCode}{O{}mO{1ex}}{{% \begin{verbsc}{#1}% \vspace*{1ex} \begin{minipage}{1\textwidth}\dc@codeprefix \\ \typestored{#2}% \end{minipage}% \\[3ex] \begin{minipage}{1\textwidth}% \dc@resultprefix \\[-1.5ex]% \rule{\textwidth}{0.2pt}\vspace*{0.75ex}% \setlength\parindent\dc@demo@parindent% \getstored{#2}% \end{minipage}% \\[#3]% \rule{1\textwidth}{0.2pt}%\vspace*{0.25ex} \end{verbsc}% }} \NewDocumentCommand{\TabbedDemoCode}{O{}mO{1ex}}{{% \begin{verbsc}{#1}% \begin{minipage}{.5\textwidth}% \dc@codeprefix% \end{minipage}% \begin{minipage}{.5\textwidth}% \dc@resultprefix% \end{minipage}\\[-1.5ex]% \rule{\textwidth}{0.2pt}\vspace*{1ex}% \begin{minipage}{.5\textwidth}\vspace*{2ex}% \typestored{#2}\vspace*{1.5ex}% \end{minipage}% \begin{minipage}{.5\textwidth}% \setlength\parindent\dc@demo@parindent% \getstored{#2}% \end{minipage}% \\[#3]% \rule{1\textwidth}{0.2pt}%\vspace*{0.5ex} \end{verbsc}% }} %%% %%% Using scontents package !!!! %%% %%% %%% from https://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Encoding_issue \lstset{literate= {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 {ã}{{\~{a}}}1 {õ}{{\~{o}}}1 {Ã}{{\~{A}}}1 {Õ}{{\~{O}}}1 {ý}{{\'{y}}}1 {Ý}{{\'{Y}}}1 {ÿ}{{\"{y}}}1 {Ÿ}{{\"{Y}}}1 {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 {€}{{\EUR}}1 {£}{{\pounds}}1 } \endinput