diff options
author | Karl Berry <karl@freefriends.org> | 2012-12-28 22:46:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-12-28 22:46:43 +0000 |
commit | aa3041c0939f2447fc48fd4c3ad830dfe75ef401 (patch) | |
tree | f72a6d6589b2d2763ad34d7755b94dc8878742d1 /Master/texmf-dist/doc/latex/concepts | |
parent | 87e35eb4054f370617fc566daff3a5a6f527211a (diff) |
concepts (28dec12)
git-svn-id: svn://tug.org/texlive/trunk@28649 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/concepts')
-rw-r--r-- | Master/texmf-dist/doc/latex/concepts/concepts.pdf | bin | 339208 -> 326899 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/concepts/concepts.tex | 369 |
2 files changed, 94 insertions, 275 deletions
diff --git a/Master/texmf-dist/doc/latex/concepts/concepts.pdf b/Master/texmf-dist/doc/latex/concepts/concepts.pdf Binary files differindex b6c5c697e51..b4418f5522e 100644 --- a/Master/texmf-dist/doc/latex/concepts/concepts.pdf +++ b/Master/texmf-dist/doc/latex/concepts/concepts.pdf diff --git a/Master/texmf-dist/doc/latex/concepts/concepts.tex b/Master/texmf-dist/doc/latex/concepts/concepts.tex index d8582de46e8..7a26c65024c 100644 --- a/Master/texmf-dist/doc/latex/concepts/concepts.tex +++ b/Master/texmf-dist/doc/latex/concepts/concepts.tex @@ -20,61 +20,17 @@ % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% 'ltxdoc' to typeset the documentation -% -\documentclass[a4paper]{ltxdoc} - -%%% including the 'concepts' package itself -% -\usepackage{concepts}[2012/11/25] - -%%% including other packages we need -% -\usepackage{etextools} -\usepackage{etoolbox} -\usepackage{framed} -\usepackage{color} -\usepackage{marginnote} -\usepackage{listings} -\usepackage{lstautogobble} -\usepackage{textcomp} -\usepackage{ifthen} -\usepackage{atbegshi} -\usepackage{tikz} -\usepackage{amssymb} - -%%% including 'internal' package for setting and running -%%% code examples with a single source -% -\usepackage{dry} +\documentclass[a4paper]{packagedoc} -%%% skip any indentation directly after a code block or macro signature -% -\makeatletter - \newcommand*{\@noindentnext}{\everypar{{\setbox\z@\lastbox}\everypar{}}} - \AfterEndEnvironment{codeframe}{\@noindentnext} - \AfterEndEnvironment{uninterestingcodeframe}{\@noindentnext} - \apptocmd{\marg}{\@noindentnext}{}{} - \apptocmd{\oarg}{\@noindentnext}{}{} - \apptocmd{\parg}{\@noindentnext}{}{} - \pretocmd{\DescribeMacro}{\noindent\\}{}{} -\makeatother - -%%% documentation options -% -\EnableCrossrefs -\CodelineIndex -\RecordChanges +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Setup % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% title and author information -% -\GetFileInfo{concepts.sty} -\title{The \textsf{concepts} package\thanks{% - This document corresponds to \textsf{concepts}~\fileversion, dated \filedate. - Development of this package is organized at \texttt{http://latex-concepts.googlecode.com}. - I am happy to receive feedback.% -}} -\author{Michiel Helvensteijn \\ \texttt{mhelvens+latex@gmail.com}} +\moretexcs{% + NewConcept,ConceptOption,ConceptName,ConceptSymbol,% + ConceptSymbols,ConceptNameAndSymbols,delta,d,product,p,% + prd% +} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Changes % @@ -109,15 +65,17 @@ this information. But I don't want to manually keep track of all that. It's error-prone and it takes time. I'd rather focus on the theory. There are already techniques and packages that help lighten the load: +% \begin{itemize} - \item Rather than use any names or symbols directly in the text, declare - a macro for each one. If you ever need to change one, you'll only - have to do it in one place. You'll also be far less likely to - introduce any typos. - \item There are packages out there to keep track of and output a glossary% - \footnote{It is sometimes called a nomenclature. - The distinction is subtle.}. + \item Rather than use any names or symbols directly in the text, declare + a macro for each one. If you ever need to change one, you'll only + have to do it in one place. You'll also be far less likely to + introduce any typos. + \item There are packages out there to keep track of and output a glossary% + \footnote{It is sometimes called a nomenclature. + The distinction is subtle.}. \end{itemize} + But I'm not aware of any technique or package to ensure I'm not using a name or symbol inconsistently, thereby potentially confusing the reader. And even if there was, using all these techniques at the @@ -133,125 +91,20 @@ cannot generate a glossary yet. In future versions, it will interface with the \textsf{glossaries} package to accomplish this, and more. I'm also planning to implement a rudimentary typesystem, to catch even more -kinds of mistakes in symbol usage. There will also be additional ways of -typesetting concept-related stuff, such as useful sentence fragments. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Usage Prep % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%% formatting the code blocks -% -\setlength{\FrameSep}{0pt} -\setlength{\MacroIndent}{16pt} -\setlength{\MacrocodeTopsep}{2pt} -\newenvironment{codeframe}{% - \definecolor{shadecolor}{rgb}{.9,.9,.9}% - \begin{framed}% - \begin{shaded}% -}{% - \end{shaded}\vspace{-2.8mm}% - \end{framed}% -} - -%%% meta-optional arguments (that means: without explicit []) -% -\makeatletter - \newcommand*{\movarg}[1]{[ \verb|#1| ]\@noindentnext} - \newcommand*{\momarg}[1]{[ \meta{#1} ]\@noindentnext} -\makeatother - -%%% listings language for examples -% -\lstdefinelanguage{latex}{ - language=[LaTeX]tex, - moretexcs={detokenize, - NewConcept,ConceptOption,ConceptName,ConceptSymbol, - ConceptSymbols,ConceptNameAndSymbols, - delta,product,p,d,prd} -} - -\makeatletter - -%%% adding a border around content without putting it in a TeX group (scope) -% -\newcounter{boxcount}[page] -\newcommand{\boxstart}{% - \stepcounter{boxcount}% - \raisebox{1.6ex}{\ensuremath{\vcenter{\hbox{% - \tikz[remember picture, overlay]{\coordinate (start box \arabic{boxcount});}% - }}}}% -} -\newcommand{\boxend}{% - \raisebox{-1.6ex}{\ensuremath{\vcenter{\hbox{% - \tikz[remember picture, overlay]{\coordinate (end box \arabic{boxcount});}% - }}}}% -} -\AtBeginShipout{\AtBeginShipoutUpperLeft{% - \ifthenelse{\value{boxcount} > 0}{% - \tikz[remember picture,overlay]{% - \foreach \boxmarker in {1,...,\arabic{boxcount}}% - \draw[black]% - (start box \boxmarker) +(.07mm,0mm) rectangle% - (end box \boxmarker);% - }% - }{}% -}} - -%%% TeX example environments -% -\newlength{\texexamplespace} -\setlength{\texexamplespace}{1.2mm} -\NewDRYer{latex-example-show}{}{% - \addvspace{\texexamplespace}% - \noindent\begin{minipage}{\textwidth} - \begin{codeframe}% - \renewcommand{\ttdefault}{pcr}% - \vspace{-1mm}% - \lstinputlisting[% - language=latex,basicstyle=\ttfamily\small,% - texcsstyle=*\bfseries,% - upquote=true,% - tabsize=1% - ]{\DRYFilename}% - \vspace{-1mm}% - \end{codeframe}% - \end{minipage}\\[-.45mm] - \boxstart$\ $\DRYContent$\ $\boxend% - \@noindentnext\par\addvspace{\texexamplespace}% -} -\NewDRYer{latex-example}{}{% - \addvspace{\texexamplespace}% - \noindent\begin{minipage}{\textwidth} - \begin{codeframe}% - \renewcommand{\ttdefault}{pcr}% - \vspace{-1mm}% - \lstinputlisting[% - language=latex,basicstyle=\ttfamily\small,% - texcsstyle=*\bfseries,% - upquote=true,% - tabsize=1% - ]{\DRYFilename}% - \vspace{-1mm}% - \end{codeframe}% - \end{minipage}% - \DRYContent% - \@noindentnext\par\addvspace{\texexamplespace}% -} - -\makeatother +kinds of mistakes in symbol usage. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Usage} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -In short: every concept first has to be declared using the |\NewConcept| macro. +Every concept first has to be declared using the |\NewConcept| macro. Afterwards, its name and associated symbols can by typeset using other macros. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\NewConcept} - \marg{concept key} \oarg{options}\\ +\describemacro{\NewConcept}{ + \marg{concept key} \oarg{options} +} Every concept needs a unique \meta{concept key}, by which it will be identified for the rest of the document. This key can also be used to automatically @@ -280,30 +133,28 @@ options. Note that the option names are case-sensitive: of this concept, delimited by curly brackets\\ --- default: |{}| (the empty list) \item[symbolcmd] the `short' command that may be used to typeset a - specific symbol of this concept, given a numeric index + specific symbol \end{description} -\noindent Here are a few examples which will also be used to illustrate the other commands: +Here are a few examples which will also be used to illustrate the other commands: \begin{latex-example} - \NewConcept{swproduct}[ - name = software product, % options 'plural', 'Plural' - Name = Software Product, % are implicitly defined - namecmd = \product, % defines \product - symbols = {p}, % p represents a product - symbolcmd = \p % defines \p - ] +\NewConcept{swproduct}[ + name = software product, % options 'plural', 'Plural' + Name = Software Product, % are implicitly defined + namecmd = \product, % defines \product + symbols = {p}, % p represents a product + symbolcmd = \p % defines \p +] \end{latex-example} - +% \begin{latex-example} - \let\delta\relax % I won't be using the greek letter - \let\d\relax % or the 'dot under a letter' macro - - \NewConcept{delta}[ - namecmd, % defines \delta - symbols = {x, y, z}, % x, y and z represent deltas - symbolcmd = \d % defines \d - ] +\let\delta\relax \let\d\relax % I won't be using these +\NewConcept{delta}[ + namecmd, % defines \delta + symbols = {x, y, z}, % x, y and z represent deltas + symbolcmd = \d % defines \d +] \end{latex-example} There are certain restrictions on new concept declarations. You may @@ -316,20 +167,21 @@ properly in an expansion-only context, e.g. be robust. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\ConceptOption} - \marg{concept key} \marg{option key}\\\nopagebreak +\describemacro{\ConceptOption}{ + \marg{concept key} \marg{option key} +} This command can be used to get back any option value given a specific \meta{concept~key} and \meta{option key}. For example: \begin{latex-example-show} - \ConceptOption{delta}{Plural} +\ConceptOption{delta}{Plural} \end{latex-example-show} - +% \begin{latex-example-show} - \edef\prd{\ConceptOption{swproduct}{namecmd}}% - {\ttfamily\expandafter\detokenize\expandafter{\prd}}% - expands to ``\prd''. +\edef\prd{\ConceptOption{swproduct}{namecmd}}% +{\ttfamily\expandafter\detokenize\expandafter{\prd}}% + expands to ``\prd''. \end{latex-example-show} |\ConceptOption| is `fully expandable', meaning that it can expand at @@ -343,8 +195,9 @@ no further. After that you can expand it further if you wish. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\ConceptName} - \movarg{\textasciicircum} \movarg{*} \marg{concept key}\\\nopagebreak +\describemacro{\ConceptName}{ + \movarg{\textasciicircum} \movarg{*} \marg{concept key} +} With this command you can typeset the name of the concept with \meta{concept key} in any of four forms. The |^| modifier gives you the capitalized version. The |*| @@ -352,25 +205,27 @@ modifier gives you the plural version. The combination gives you both. The order between |^| and |*| doesn't matter. \begin{latex-example-show} - \ConceptName^*{delta} can transform a \ConceptName{swproduct}. +\ConceptName^*{delta} can transform a \ConceptName{swproduct}. \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\noindent\\\marginnote{\meta{namecmd}} - \movarg{\textasciicircum} \movarg{*}\\\nopagebreak +\describemetamacro{namecmd}{ + \movarg{\textasciicircum} \movarg{*} +} This is the `short' version of |\ConceptName|, specific for each concept that was declared with the |namecmd| option. It supports the same modifiers. \begin{latex-example-show} - \delta^* can easily transform a \product. +\delta^* can easily transform a \product. \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\ConceptSymbol} - \marg{concept key} \oarg{symbol index}\\\nopagebreak +\describemacro{\ConceptSymbol}{ + \marg{concept key} \oarg{symbol index} +} This command typesets a specific symbol associated with a a given concept. It is always typeset in math mode. Specify the concept with the \meta{concept key} @@ -381,18 +236,19 @@ concept options. If a concept has only one allocated symbol the index may be omitted. If there is more than one symbol, the index is mandatory. \begin{latex-example-show} - \product^* have symbols like \ConceptSymbol{swproduct}. +\product^* have symbols like \ConceptSymbol{swproduct}. \end{latex-example-show} - +% \begin{latex-example-show} - $\ConceptSymbol{delta}[2] \cdot \ConceptSymbol{delta}[1] = - \ConceptSymbol{delta}[1] \cdot \ConceptSymbol{delta}[2]$ +$\ConceptSymbol{delta}[2] \cdot \ConceptSymbol{delta}[1] = + \ConceptSymbol{delta}[1] \cdot \ConceptSymbol{delta}[2]$ \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\noindent\\\marginnote{\meta{symbolcmd}} - \momarg{symbol index}\\\nopagebreak +\describemetamacro{symbolcmd}{ + \momarg{symbol index} +} This is the `short' version of |\ConceptSymbol|, specific for each concept that was declared with the |symbolcmd| option. The optional index is given directly @@ -401,17 +257,18 @@ allowed to use square brackets. See the list-variation of this short command below. \begin{latex-example-show} - $(\d2 \cdot \d1)(\p) = \d2(\d1(\p)) = \d2(\p') = \p''$ +$(\d2 \cdot \d1)(\p) = \d2(\d1(\p)) = \d2(\p') = \p''$ \end{latex-example-show} -\noindent As you can see, this short construct requires a lot less space than the +As you can see, this short construct requires a lot less space than the full |\ConceptSymbol| command, so its use is recommended for readability. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\ConceptSymbols} +\describemacro{\ConceptSymbols}{ \marg{concept key} \oarg{separator} - \oarg{last separator} \marg{symbol indices}\\\nopagebreak + \oarg{last separator} \marg{symbol indices} +} This command typesets a \meta{separator} separated list of symbols associated with the given concept, optionally with a different \meta{last separator}. Specify @@ -424,19 +281,19 @@ The indices are 1-based and point to a place in the symbol list provided with th concept options. The index-list is mandatory, but can be empty. \begin{latex-example-show} - The symbols \ConceptSymbols{delta}{1,2,3} represent \delta*. +The symbols \ConceptSymbols{delta}{1,2,3} represent \delta*. \end{latex-example-show} - +% \begin{latex-example-show} - $\{\ConceptSymbols{delta}[;]{1,1,1}\}$ contains only \d1. +$\{\ConceptSymbols{delta}[;]{1,1,1}\}$ contains only \d1. \end{latex-example-show} - +% \begin{latex-example-show} - What about \ConceptSymbols{delta}[,][$ and $]{3, 2, 1}? +What about \ConceptSymbols{delta}[,][$ and $]{3, 2, 1}? \end{latex-example-show} - +% \begin{latex-example-show} - xx\ConceptSymbols{delta}{}xx +xx\ConceptSymbols{delta}{}xx \end{latex-example-show} If you need any symbol in the resulting list to have some decoration (like a @@ -446,34 +303,36 @@ accordingly. This currently only works for decorations that would be specified start with the index itself: \begin{latex-example-show} - \ldots such as the symbols in - $(\ConceptSymbols{delta}{1_1, 2'', 3^{\d1(\p)}})$. +\ldots such as the symbols in + $(\ConceptSymbols{delta}{1_1, 2'', 3^{\d1(\p)}})$. \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\noindent\\\marginnote{\meta{symbolcmd}} - \oarg{symbol indices}\\\nopagebreak +\describemetamacro{symbolcmd}{ + \oarg{symbol indices} +} This is the `short' version of |\ConceptSymbols|, specific for each concept that was declared with the |symbolcmd| option. The \meta{symbol indices} list needs to be delimited by square brackets as shown below. \begin{latex-example-show} - $\forall \d[1,2] \in D:\ \d1 \| \d2\ \Rightarrow\ {} - \exists \d[3'] \in D:\ \d1 \prec \d3' \land \d2 \prec \d3'$ +$\forall \d[1,2] \in D:\ \d1 \| \d2\ \Rightarrow\ {} + \exists \d[3'] \in D:\ \d1 \prec \d3' \land \d2 \prec \d3'$ \end{latex-example-show} - +% \begin{latex-example-show} - xx\d[]xx\p[]xx +xx\d[]xx\p[]xx \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\DescribeMacro{\ConceptNameAndSymbols} +\describemacro{\ConceptNameAndSymbols}{ \movarg{\textasciicircum} \marg{concept key} \oarg{separator} \oarg{last separator} - \marg{symbol indices}\\\nopagebreak + \marg{symbol indices} +} This command is the `hybrid' version of |\ConceptName| and |\ConceptSymbols|. It typesets the name of the concept followed by a \meta{separator} separated list @@ -490,15 +349,16 @@ You can still supply the |^| modifier to capitalize the name but the choice between singular and plural form is determined by the number of \meta{symbol indices}. \begin{latex-example-show} - We use \ConceptNameAndSymbols{delta}[,][$ and also $]{1,2,3}. +We use \ConceptNameAndSymbols{delta}[,][$ and also $]{1,2,3}. \end{latex-example-show} For some other neat tricks, read the documentation of |\ConceptSymbols| above. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\noindent\\\marginnote{\meta{namecmd}} - \movarg{\textasciicircum} \oarg{symbol indices}\\\nopagebreak +\describemetamacro{namecmd}{ + \movarg{\textasciicircum} \oarg{symbol indices} +} This is a `short' version of |\ConceptNameAndSymbols|, specific for each concept that was declared with the |namecmd| option. @@ -507,7 +367,7 @@ as shown below. The list is comma-delimited and the last (or only) delimiter is the word `and'. \begin{latex-example-show} - \delta^[1,2] come before \delta[3]. +\delta^[1,2] come before \delta[3]. \end{latex-example-show} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -529,7 +389,6 @@ amount of features we can take advantage of. Secondly, I will program the Here is an incomplete list of the features I am planning to implement: \begin{itemize} \item full integration with the \textsf{glossaries} package - \item commands to \emph{modify} existing concepts \item typesetting a \emph{summary} of the concepts introduced in each chapter / section \item management of \emph{tuples} and \emph{sets} of concept instances \item management of \emph{subconcepts} plus a rudimentary \emph{typesystem} that @@ -537,45 +396,5 @@ Here is an incomplete list of the features I am planning to implement: \end{itemize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Implementation Prep % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\makeatletter -\renewenvironment{codeframe}{% - \definecolor{shadecolor}{rgb}{.9,.9,.9}% - \begin{shaded}% -}{% - \end{shaded}% -} - -\newenvironment{uninterestingcodeframe}{% - \vspace{-5mm}% - \definecolor{shadecolor}{rgb}{.97,.97,.97}% - \begin{shaded}% - \definecolor{uninterestingcodecolor}{rgb}{.4,.4,.4}% - \let\old@macro@font\macro@font% - \def\macro@font{\color{uninterestingcodecolor}\old@macro@font}% -}{% - \end{shaded}% -} -\makeatother - -\StopEventually{ - \PrintChanges -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Implementation} % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -We now show and explain the entire implementation in |concepts.sty|. - -\DocInput{concepts.sty} - -\Finale - -\PrintIndex - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |