From 07a6550aa7f741c870ad36d20f966bc13b0772c1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 1 Aug 2021 20:35:09 +0000 Subject: latexindent (1aug21) git-svn-id: svn://tug.org/texlive/trunk@60132 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/support/latexindent/README | 2 +- .../doc/support/latexindent/appendices.tex | 85 +- .../doc/support/latexindent/figure-schematic.tex | 24 +- .../doc/support/latexindent/latexindent.pdf | Bin 946088 -> 949988 bytes .../doc/support/latexindent/latexindent.tex | 123 +- .../sec-conclusions-know-limitations.tex | 27 +- .../support/latexindent/sec-default-user-local.tex | 715 +++---- .../doc/support/latexindent/sec-demonstration.tex | 18 +- .../doc/support/latexindent/sec-fine-tuning.tex | 51 +- .../doc/support/latexindent/sec-how-to-use.tex | 230 ++- .../latexindent/sec-indent-config-and-settings.tex | 132 +- .../doc/support/latexindent/sec-introduction.tex | 62 +- .../doc/support/latexindent/sec-replacements.tex | 107 +- .../doc/support/latexindent/sec-the-m-switch.tex | 1947 +------------------- .../subsec-combine-text-wrap-para-line-breaks.tex | 112 ++ .../subsec-commands-and-their-options.tex | 141 +- .../subsec-conflicting-poly-switches.tex | 170 -- .../subsec-noAdditionalIndent-indentRules.tex | 16 +- .../latexindent/subsec-one-sentence-per-line.tex | 404 ++++ .../subsec-partnering-poly-switches.tex | 54 - .../support/latexindent/subsec-poly-switches.tex | 1101 +++++++++++ .../latexindent/subsec-remove-para-line-breaks.tex | 217 +++ .../latexindent/subsec-text-wrap-summary.tex | 26 + .../doc/support/latexindent/subsec-text-wrap.tex | 359 ++++ .../subsubsec-commands-with-arguments.tex | 45 +- .../subsubsec-environments-and-their-arguments.tex | 114 +- .../subsubsec-environments-with-items.tex | 33 +- .../doc/support/latexindent/subsubsec-headings.tex | 37 +- .../doc/support/latexindent/subsubsec-ifelsefi.tex | 26 +- .../subsubsec-no-add-remaining-code-blocks.tex | 70 +- .../doc/support/latexindent/subsubsec-special.tex | 15 +- .../texmf-dist/doc/support/latexindent/title.tex | 4 +- .../scripts/latexindent/LatexIndent/Document.pm | 40 +- .../latexindent/LatexIndent/GetYamlSettings.pm | 21 + .../latexindent/LatexIndent/ModifyLineBreaks.pm | 68 +- .../scripts/latexindent/LatexIndent/Version.pm | 4 +- .../scripts/latexindent/defaultSettings.yaml | 10 +- .../texmf-dist/scripts/latexindent/latexindent.pl | 2 +- 38 files changed, 3433 insertions(+), 3179 deletions(-) create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-combine-text-wrap-para-line-breaks.tex delete mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-one-sentence-per-line.tex delete mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-poly-switches.tex create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-remove-para-line-breaks.tex create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-text-wrap-summary.tex create mode 100644 Master/texmf-dist/doc/support/latexindent/subsec-text-wrap.tex (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/support/latexindent/README b/Master/texmf-dist/doc/support/latexindent/README index a49f1a231fc..04fd1c5b5fc 100644 --- a/Master/texmf-dist/doc/support/latexindent/README +++ b/Master/texmf-dist/doc/support/latexindent/README @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - latexindent.pl, version 3.10.1, 2021-07-23 + latexindent.pl, version 3.11, 2021-07-31 PERL script to indent code within environments, and align delimited environments in .tex files. diff --git a/Master/texmf-dist/doc/support/latexindent/appendices.tex b/Master/texmf-dist/doc/support/latexindent/appendices.tex index b6f1e9615c0..bbeefb5fd13 100644 --- a/Master/texmf-dist/doc/support/latexindent/appendices.tex +++ b/Master/texmf-dist/doc/support/latexindent/appendices.tex @@ -1,11 +1,11 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \appendix \section{Required Perl modules}\label{sec:requiredmodules} - If you intend to use \texttt{latexindent.pl} and \emph{not} one of the - supplied standalone executable files, then you will need a few standard Perl modules -- - if you can run the minimum code in \cref{lst:helloworld} (\texttt{perl helloworld.pl}) then you will be able to run - \texttt{latexindent.pl}, otherwise you may need to install the missing modules -- see - \cref{sec:module-installer,sec:manual-module-instal}. + If you intend to use \texttt{latexindent.pl} and \emph{not} one of the supplied + standalone executable files, then you will need a few standard Perl modules -- if you can + run the minimum code in \cref{lst:helloworld} (\texttt{perl helloworld.pl}) then you will + be able to run \texttt{latexindent.pl}, otherwise you may need to install the missing + modules -- see \cref{sec:module-installer,sec:manual-module-instal}. \begin{cmhlistings}[style=tcblatex,language=Perl]{\texttt{helloworld.pl}}{lst:helloworld} #!/usr/bin/perl @@ -33,8 +33,9 @@ exit; \end{cmhlistings} \subsection{Module installer script}\label{sec:module-installer} - \announce{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a helper script that will - install any missing \texttt{perl} modules on your system; if you run + \announce{2018-01-13}{perl module helper script} \texttt{latexindent.pl} ships with a + helper script that will install any missing \texttt{perl} modules on your system; if you + run \begin{commandshell} perl latexindent-module-installer.pl \end{commandshell} @@ -42,8 +43,8 @@ perl latexindent-module-installer.pl \begin{dosprompt} perl latexindent-module-installer.pl \end{dosprompt} - then, once you have answered \texttt{Y}, the appropriate modules will be - installed onto your distribution. + then, once you have answered \texttt{Y}, the appropriate modules will be installed onto + your distribution. \subsection{Manually installed modules}\label{sec:manual-module-instal} Manually installing the modules given in \cref{lst:helloworld} will vary depending on @@ -77,10 +78,10 @@ sudo cpanm Unicode::GCString sudo perl -MCPAN -e'install "File::HomeDir"' \end{commandshell} - If you are using Alpine, some \texttt{Perl} modules are not build-compatible - with Alpine, but replacements are available through \texttt{apk}. For example, - you might use the commands given in \cref{lst:alpine-install}; thanks to - \cite{jun-sheaf} for providing these details. + If you are using Alpine, some \texttt{Perl} modules are not build-compatible with Alpine, + but replacements are available through \texttt{apk}. For example, you might use the + commands given in \cref{lst:alpine-install}; thanks to \cite{jun-sheaf} for providing + these details. \begin{cmhlistings}[style=tcblatex,language=Bash]{\texttt{alpine-install.sh}}{lst:alpine-install} # Installing perl @@ -106,7 +107,9 @@ cpanm -n YAML::Tiny cpanm -n Unicode::GCString \end{cmhlistings} - Users of NixOS might like to see \href{https://github.com/cmhughes/latexindent.pl/issues/222}{https://github.com/cmhughes/latexindent.pl/issues/222} for tips. + Users of NixOS might like to see + \href{https://github.com/cmhughes/latexindent.pl/issues/222}{https://github.com/cmhughes/latexindent.pl/issues/222} + for tips. \subsubsection{Mac} Users of the Macintosh operating system might like to explore the following commands, for example: @@ -124,7 +127,7 @@ cpanm Unicode::GCString readily available on CPAN \cite{cpan}. \texttt{indent.log} will contain details of the location - of the Perl modules on your system. \texttt{latexindent.exe} is a standalone executable + of the Perl modules on your system. \texttt{latexindent.exe} is a standalone executable for Windows (and therefore does not require a Perl distribution) and caches copies of the Perl modules onto your system; if you wish to see where they are cached, use the \texttt{trace} option, e.g @@ -134,14 +137,14 @@ latexindent.exe -t myfile.tex \section{Updating the path variable}\label{sec:updating-path} \texttt{latexindent.pl} has a few scripts (available at \cite{latexindent-home}) that can - update the \texttt{path} variables. Thank you to \cite{jasjuang} for this - feature. If you're on a Linux or Mac machine, then you'll want \texttt{CMakeLists.txt} - from \cite{latexindent-home}. + update the \texttt{path} variables. Thank you to \cite{jasjuang} for this feature. If + you're on a Linux or Mac machine, then you'll want \texttt{CMakeLists.txt} from + \cite{latexindent-home}. \subsection{Add to path for Linux} To add \texttt{latexindent.pl} to the path for Linux, follow these steps: \begin{enumerate} - \item download \texttt{latexindent.pl} and its associated modules, \texttt{defaultSettings.yaml}, to - your chosen directory from \cite{latexindent-home} ; + \item download \texttt{latexindent.pl} and its associated modules, + \texttt{defaultSettings.yaml}, to your chosen directory from \cite{latexindent-home} ; \item within your directory, create a directory called \texttt{path-helper-files} and download \texttt{CMakeLists.txt} and \lstinline!cmake_uninstall.cmake.in! from \cite{latexindent-home}/path-helper-files to this directory; @@ -162,8 +165,8 @@ sudo make install \begin{commandshell} ls /usr/local/bin \end{commandshell} - again to check that \texttt{latexindent.pl}, its modules and \texttt{defaultSettings.yaml} have - been added. + again to check that \texttt{latexindent.pl}, its modules and + \texttt{defaultSettings.yaml} have been added. \end{enumerate} To \emph{remove} the files, run \begin{commandshell} @@ -172,10 +175,10 @@ sudo make uninstall \subsection{Add to path for Windows} To add \texttt{latexindent.exe} to the path for Windows, follow these steps: \begin{enumerate} - \item download \texttt{latexindent.exe}, \texttt{defaultSettings.yaml}, \texttt{add-to-path.bat} from - \cite{latexindent-home} to your chosen directory; - \item open a command prompt and run the following command to see what is \emph{currently} - in your \lstinline!%path%! variable; + \item download \texttt{latexindent.exe}, \texttt{defaultSettings.yaml}, + \texttt{add-to-path.bat} from \cite{latexindent-home} to your chosen directory; + \item open a command prompt and run the following command to see what is \emph{currently} in + your \lstinline!%path%! variable; \begin{dosprompt} echo %path% \end{dosprompt} @@ -226,8 +229,8 @@ TRACE: Searching myenv for optional and mandatory arguments ... no arguments found ----- \end{cmhlistings} - Notice that the information given about \texttt{myenv} is `framed' using - \texttt{+++++} and \lstinline!-----! respectively. + Notice that the information given about \texttt{myenv} is `framed' using \texttt{+++++} + and \lstinline!-----! respectively. \section{Encoding indentconfig.yaml}\label{app:encoding} In relation to \vref{sec:indentconfig}, Windows users that encounter encoding issues with @@ -243,17 +246,17 @@ Active code page: 936 and can then use the settings given in \cref{lst:indentconfig-encoding1} within their \texttt{indentconfig.yaml}, where 936 is the result of the \texttt{chcp} command. - \cmhlistingsfromfile*{demonstrations/encoding1.yaml}[yaml-TCB]{\texttt{encoding} demonstration for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding1} + \cmhlistingsfromfile{demonstrations/encoding1.yaml}[yaml-TCB]{\texttt{encoding} demonstration for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding1} \section{dos2unix linebreak adjustment} \yamltitle{dos2unixlinebreaks}*{integer} If you use \texttt{latexindent.pl} on a dos-based Windows file on Linux - \announce*{2021-06-19}{dos2unix linebreaks} then you may find that trailing horizontal space is not removed - as you hope. + \announce{2021-06-19}{dos2unix linebreaks} then you may find that trailing horizontal + space is not removed as you hope. - In such a case, you may wish to try setting \texttt{dos2unixlinebreaks} to 1 and employing, - for example, the following command. + In such a case, you may wish to try setting \texttt{dos2unixlinebreaks} to 1 and + employing, for example, the following command. \begin{commandshell} latexindent.pl -y="dos2unixlinebreaks:1" myfile.tex @@ -278,11 +281,10 @@ latexindent.pl myfile.tex -o=outputfile.tex latexindent.pl myfile.tex -outputfile=outputfile.tex latexindent.pl myfile.tex -outputfile outputfile.tex \end{commandshell} - noting that the \emph{output} file is given \emph{next to} the - \texttt{-o} switch. + noting that the \emph{output} file is given \emph{next to} the \texttt{-o} switch. - The fields given in \cref{lst:obsoleteYaml} are \emph{obsolete} from Version 3.0 - onwards. \cmhlistingsfromfile{demonstrations/obsolete.yaml}[yaml-obsolete]{Obsolete YAML fields from Version 3.0}{lst:obsoleteYaml} + The fields given in \cref{lst:obsoleteYaml} are \emph{obsolete} from Version 3.0 onwards. + \cmhlistingsfromfile{demonstrations/obsolete.yaml}[yaml-obsolete]{Obsolete YAML fields from Version 3.0}{lst:obsoleteYaml} There is a slight difference when specifying indentation after headings; specifically, we now write \texttt{indentAfterThisHeading} instead of \texttt{indent}. See @@ -297,9 +299,9 @@ latexindent.pl myfile.tex -outputfile outputfile.tex \end{minipage}% To specify \texttt{noAdditionalIndent} for display-math environments in Version 2.2, you - would write YAML as in \cref{lst:noAdditionalIndentOld}; as of Version 3.0, you would write YAML - as in \cref{lst:indentAfterThisHeadingNew1} or, if you're using \texttt{-m} switch, - \cref{lst:indentAfterThisHeadingNew2}. + would write YAML as in \cref{lst:noAdditionalIndentOld}; as of Version 3.0, you would + write YAML as in \cref{lst:indentAfterThisHeadingNew1} or, if you're using \texttt{-m} + switch, \cref{lst:indentAfterThisHeadingNew2}. \index{specialBeginEnd!update to displaymath V3.0} \begin{minipage}{.45\textwidth} @@ -312,7 +314,8 @@ latexindent.pl myfile.tex -outputfile outputfile.tex \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew1.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew2} \end{minipage}% - \mbox{}\hfill \begin{minipage}{.25\textwidth} + \mbox{}\hfill + \begin{minipage}{.25\textwidth} \hrule \hfill\itshape End\\\mbox{}\hfill\mbox{}\rlap{\hfill\includegraphics{logo}} diff --git a/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex b/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex index 911f85f6ad7..08fea691394 100644 --- a/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex +++ b/Master/texmf-dist/doc/support/latexindent/figure-schematic.tex @@ -3,23 +3,21 @@ \usetikzlibrary{positioning} \begin{document} \begin{tikzpicture}[ - needed/.style={very thick, draw=blue,fill=blue!20, - text centered, minimum height=2.5em,rounded corners=1ex}, - optional/.style={draw=black, very thick,scale=0.8, - text centered, minimum height=2.5em,rounded corners=1ex}, + needed/.style={very thick, draw=blue,fill=blue!20, text centered, minimum height=2.5em,rounded corners=1ex}, + optional/.style={draw=black, very thick,scale=0.8, text centered, minimum height=2.5em,rounded corners=1ex}, optionalfill/.style={fill=black!10}, connections/.style={draw=black!30,dotted,line width=3pt,text=red}, ] % Draw diagram elements - \node (latexindent) [needed,circle] {\texttt{latexindent.pl}}; - \node (default) [needed,above right=.5cm of latexindent] {\texttt{defaultSettings.yaml}}; - \node (indentconfig) [optional,right=of latexindent] {\texttt{indentconfig.yaml}}; - \node (any) [optional,optionalfill,above right=of indentconfig] {\texttt{any.yaml}}; - \node (name) [optional,optionalfill,right=of indentconfig] {\texttt{name.yaml}}; - \node (you) [optional,optionalfill,below right=of indentconfig] {\texttt{you.yaml}}; - \node (want) [optional,optionalfill,below=of indentconfig] {\texttt{want.yaml}}; - \node (local) [optional,below=of latexindent] {\texttt{localSettings.yaml}}; - \node (yamlswitch) [optional,left=of latexindent] {\texttt{-y switch}}; + \node (latexindent) [needed,circle] {\texttt{latexindent.pl}}; + \node (default) [needed,above right=.5cm of latexindent] {\texttt{defaultSettings.yaml}}; + \node (indentconfig) [optional,right=of latexindent] {\texttt{indentconfig.yaml}}; + \node (any) [optional,optionalfill,above right=of indentconfig] {\texttt{any.yaml}}; + \node (name) [optional,optionalfill,right=of indentconfig] {\texttt{name.yaml}}; + \node (you) [optional,optionalfill,below right=of indentconfig] {\texttt{you.yaml}}; + \node (want) [optional,optionalfill,below=of indentconfig] {\texttt{want.yaml}}; + \node (local) [optional,below=of latexindent] {\texttt{localSettings.yaml}}; + \node (yamlswitch) [optional,left=of latexindent] {\texttt{-y switch}}; % Draw arrows between elements \draw[connections,solid] (latexindent) to[in=-90]node[pos=0.5,anchor=north]{1} (default.south) ; \draw[connections,optional] (latexindent) -- node[pos=0.5,anchor=north]{2} (indentconfig) ; diff --git a/Master/texmf-dist/doc/support/latexindent/latexindent.pdf b/Master/texmf-dist/doc/support/latexindent/latexindent.pdf index 09cd1d6f4f7..dfb37e0b765 100644 Binary files a/Master/texmf-dist/doc/support/latexindent/latexindent.pdf and b/Master/texmf-dist/doc/support/latexindent/latexindent.pdf differ diff --git a/Master/texmf-dist/doc/support/latexindent/latexindent.tex b/Master/texmf-dist/doc/support/latexindent/latexindent.tex index 2691cfa9ec7..9379dddcb06 100644 --- a/Master/texmf-dist/doc/support/latexindent/latexindent.tex +++ b/Master/texmf-dist/doc/support/latexindent/latexindent.tex @@ -12,12 +12,12 @@ % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % See . \usepackage[left=4.5cm,right=2.5cm,showframe=false, - top=2cm,bottom=1.5cm,marginparsep=2cm]{geometry} % page setup + top=2cm,bottom=1.5cm,marginparsep=2cm]{geometry} % page setup \usepackage{lmodern} \usepackage{parskip} % paragraph skips \usepackage{booktabs} % beautiful tables @@ -31,7 +31,7 @@ \usepackage{fontawesome} \usepackage[sc,format=hang,font=small]{caption} % captions \usepackage[backend=bibtex]{biblatex} % bibliography -\usepackage{tcolorbox} % framed environments +\usepackage{tcolorbox} % framed environments \usepackage{tikz} \usepackage{xparse} \usepackage[charter]{mathdesign} % changes font @@ -79,9 +79,21 @@ \tcbset{doclang/new={{\bfseries\color{green!50!black}N\normalfont\color{black}}}} \tcbset{doclang/updated={{\bfseries\color{green!50!black}U\normalfont\color{black}}}} \tcbset{doc marginnote={width=1.6cm}} + +% \announce * { YYYY-MM-DD }*{ } +% +% NEW as of current version +% \announce*{date}*[text] means *updated* as of +% \announce*{date}[text] means *new* as of +% +% NOT new as of current version +% \announce{date}*[text] means *updated* as of +% \announce{date}[text] means *new* as of +% \NewDocumentCommand{\announce}{ s m s m }{% \IfBooleanTF{#1}% {% \announce* + % NEW in current version \tcbdocmarginnote[overlay={\node at ([yshift=0mm,xshift=1mm]frame.north east) {\stardemo}; }]{% \IfBooleanTF{#3}% {% \announce*{date}*[text] means *updated* as of @@ -100,6 +112,7 @@ }% }% {% \announce + % NOT new in current version \tcbdocmarginnote{% \IfBooleanTF{#3}% {% \announce{date}*[text] means *updated* as of @@ -223,18 +236,18 @@ raster valign=top,raster columns=2,#1]}{\end{tcbraster}} % \cmhlistingsfromfile -% * no star: not new, star: new +% * no star: not new, star: new % [ listing/minted options ] -% * no star: uses minted library, star: uses listings library star: +% * no star: uses minted library, star: uses listings library star: % {} % [] % {} % {<label>} % % for example, -% \cmhlistingsfromfile*[listing options]... uses listings library and is NEW -% \cmhlistingsfromfile[listing options]... uses listings library -% \cmhlistingsfromfile[listing options]*... uses minted library +% \cmhlistingsfromfile*[listing options]... uses listings library and is NEW +% \cmhlistingsfromfile[listing options]... uses listings library +% \cmhlistingsfromfile[listing options]*... uses minted library % \cmhlistingsfromfile*[listing options]*... uses minted library and is NEW \DeclareTCBInputListing[use counter=lstlisting]{\cmhlistingsfromfile}{s O{} s m O{} m m}{% cmhlistings, @@ -315,181 +328,181 @@ \lstdefinestyle{fileExtensionPreference}{ style=yaml-LST, - firstnumber=41,linerange={41-45}, + firstnumber=44,linerange={44-48}, numbers=left, } \lstdefinestyle{logFilePreferences}{ style=yaml-LST, - firstnumber=85,linerange={85-99}, + firstnumber=88,linerange={88-102}, numbers=left, } \lstdefinestyle{verbatimEnvironments}{ style=yaml-LST, - firstnumber=103,linerange={103-106}, + firstnumber=106,linerange={106-109}, numbers=left, } \lstdefinestyle{verbatimCommands}{ style=yaml-LST, - firstnumber=109,linerange={109-111}, + firstnumber=112,linerange={112-114}, numbers=left, } \lstdefinestyle{noIndentBlock}{ style=yaml-LST, - firstnumber=116,linerange={116-118}, + firstnumber=119,linerange={119-121}, numbers=left, } \lstdefinestyle{removeTrailingWhitespace}{ style=yaml-LST, - firstnumber=147,linerange={147-149}, + firstnumber=150,linerange={150-152}, numbers=left, } \lstdefinestyle{fileContentsEnvironments}{ style=yaml-LST, - firstnumber=122,linerange={122-124}, + firstnumber=125,linerange={125-127}, numbers=left, } \lstdefinestyle{lookForPreamble}{ style=yaml-LST, - firstnumber=130,linerange={130-134}, + firstnumber=133,linerange={133-137}, numbers=left, } \lstdefinestyle{lookForAlignDelims}{ style=yaml-LST, - firstnumber=152,linerange={152-168}, + firstnumber=155,linerange={155-171}, numbers=left, } \lstdefinestyle{indentAfterItems}{ style=yaml-LST, - firstnumber=225,linerange={225-229}, + firstnumber=228,linerange={228-232}, numbers=left, } \lstdefinestyle{itemNames}{ style=yaml-LST, - firstnumber=235,linerange={235-237}, + firstnumber=238,linerange={238-240}, numbers=left, } \lstdefinestyle{specialBeginEnd}{ style=yaml-LST, - firstnumber=241,linerange={241-254}, + firstnumber=244,linerange={244-257}, numbers=left, } \lstdefinestyle{indentAfterHeadings}{ style=yaml-LST, - firstnumber=264,linerange={264-273}, + firstnumber=267,linerange={267-276}, numbers=left, } \lstdefinestyle{noAdditionalIndentGlobalEnv}{ style=yaml-LST, - firstnumber=322,linerange={322-323}, + firstnumber=325,linerange={325-326}, numbers=left, } \lstdefinestyle{noAdditionalIndentGlobal}{ style=yaml-LST, - firstnumber=322,linerange={322-334}, + firstnumber=325,linerange={325-337}, numbers=left, } \lstdefinestyle{indentRulesGlobalEnv}{ style=yaml-LST, - firstnumber=338,linerange={338-339}, + firstnumber=341,linerange={341-342}, numbers=left, } \lstdefinestyle{indentRulesGlobal}{ style=yaml-LST, - firstnumber=338,linerange={338-350}, + firstnumber=341,linerange={341-353}, numbers=left, } \lstdefinestyle{commandCodeBlocks}{ style=yaml-LST, - firstnumber=353,linerange={353-368}, + firstnumber=356,linerange={356-371}, numbers=left, } \lstdefinestyle{modifylinebreaks}{ style=yaml-LST, - firstnumber=483,linerange={483-485}, + firstnumber=486,linerange={486-488}, numbers=left, } \lstdefinestyle{textWrapOptions}{ style=yaml-LST, - firstnumber=510,linerange={510-511}, + firstnumber=513,linerange={513-514}, numbers=left, } \lstdefinestyle{textWrapOptionsAll}{ style=yaml-LST, - firstnumber=510,linerange={510-527}, + firstnumber=513,linerange={513-531}, numbers=left, } \lstdefinestyle{removeParagraphLineBreaks}{ style=yaml-LST, - firstnumber=528,linerange={528-542}, + firstnumber=532,linerange={532-546}, numbers=left, } \lstdefinestyle{paragraphsStopAt}{ style=yaml-LST, - firstnumber=543,linerange={543-552}, + firstnumber=547,linerange={547-556}, numbers=left, } \lstdefinestyle{oneSentencePerLine}{ style=yaml-LST, - firstnumber=486,linerange={486-509}, + firstnumber=489,linerange={489-512}, numbers=left, } \lstdefinestyle{sentencesFollow}{ style=yaml-LST, - firstnumber=491,linerange={491-499}, + firstnumber=494,linerange={494-502}, numbers=left, } \lstdefinestyle{sentencesBeginWith}{ style=yaml-LST, - firstnumber=500,linerange={500-503}, + firstnumber=503,linerange={503-506}, numbers=left, } \lstdefinestyle{sentencesEndWith}{ style=yaml-LST, - firstnumber=504,linerange={504-509}, + firstnumber=507,linerange={507-512}, numbers=left, } \lstdefinestyle{modifylinebreaksEnv}{ style=yaml-LST, - firstnumber=553,linerange={553-562}, + firstnumber=557,linerange={557-566}, numbers=left, } \lstdefinestyle{replacements}{ style=yaml-LST, - firstnumber=614,linerange={614-622}, + firstnumber=618,linerange={618-626}, numbers=left, } \lstdefinestyle{fineTuning}{ style=yaml-LST, - firstnumber=625,linerange={625-648}, + firstnumber=629,linerange={629-652}, numbers=left, } @@ -521,12 +534,12 @@ \draw[inner sep=0,minimum size=rnd*15pt+2pt] decorate[decoration={stars,segment length=2cm}] { decorate[decoration={zigzag,segment length=2cm,amplitude=0.3cm}] { - ([xshift=-.5cm,yshift=0.1cm]frame.south west) -- ([xshift=-.5cm,yshift=0.4cm]frame.north west) + ([xshift=-.5cm,yshift=0.1cm]frame.south west) -- ([xshift=-.5cm,yshift=0.4cm]frame.north west) }}; \draw[inner sep=0,minimum size=rnd*15pt+2pt] decorate[decoration={stars,segment length=2cm}] { decorate[decoration={zigzag,segment length=2cm,amplitude=0.3cm}] { - ([xshift=.75cm,yshift=0.1cm]frame.south east) -- ([xshift=.75cm,yshift=0.6cm]frame.north east) + ([xshift=.75cm,yshift=0.1cm]frame.south east) -- ([xshift=.75cm,yshift=0.6cm]frame.north east) }}; \node[anchor=north west,outer sep=2pt,opacity=0.25] at ([xshift=-4.25cm]frame.north west) {\resizebox{3cm}{!}{\faGithub}}; }, @@ -607,18 +620,13 @@ \marginpar{\huge \color{red} \framebox{FIX}}% \typeout{FIXTHIS: p\thepage : #1^^J}% } -% custom section -\titleformat{\section} -{\normalfont\Large\bfseries} -{\llap{\thesection\hskip.5cm}} -{0pt} -{} \newcommand*\ruleline[1]{% \par\noindent\raisebox{.8ex}{\makebox[\linewidth]{\hrulefill\hspace{1ex}\raisebox{-1.8ex}{#1}\hspace{1ex}\hrulefill}}} \newcommand{\imagetouse}{logo-bw} +% custom section \titleformat% Formatting the header {\section} % command [block] % shape - Only managed to get it working with block @@ -634,6 +642,7 @@ {\llap{\thesubsection\hskip.5cm}} {0pt} {} + % custom subsubsection \titleformat{\subsubsection} {\normalfont\bfseries} @@ -641,9 +650,18 @@ {0pt} {} +% custom paragraph +\titleformat{\paragraph} +{\normalfont\bfseries} +{\llap{\theparagraph\hskip.5cm}} +{0pt} +{} + +% title spacing \titlespacing\section{0pt}{12pt plus 4pt minus 2pt}{34pt plus 2pt minus 2pt} \titlespacing\subsection{0pt}{12pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt} \titlespacing\subsubsection{0pt}{12pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt} +\titlespacing\paragraph{0pt}{12pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt} % list of listings \contentsuse{lstlisting}{lol} @@ -662,6 +680,7 @@ {\titlerule*[0.5em]{$\cdot$}\contentspage} [] \AtBeginDocument{\addtocontents{lol}{\protect\begin{widepage}\protect\begin{multicols}{2}}} +\preto{\printindex}{\addtocontents{lol}{\protect\end{multicols}\protect\end{widepage}}} % cleveref settings \crefname{table}{Table}{Tables} @@ -748,7 +767,8 @@ {}% <numberless-entry-format> {\titlerule*[0.5em]{$\cdot$}\contentspage} -\setcounter{secnumdepth}{5} +\setcounter{secnumdepth}{6} +\setcounter{tocdepth}{4} \makeindex \begin{document} \renewcommand*{\thefootnote}{\arabic{footnote}} @@ -773,14 +793,17 @@ \stopcontents[noAdditionalIndent] \input{subsec-commands-and-their-options} \input{sec-the-m-switch} + \input{subsec-text-wrap} + \input{subsec-remove-para-line-breaks} + \input{subsec-combine-text-wrap-para-line-breaks} + \input{subsec-text-wrap-summary} + \input{subsec-one-sentence-per-line} + \input{subsec-poly-switches} \stopcontents[the-m-switch] - \input{subsec-partnering-poly-switches} - \input{subsec-conflicting-poly-switches} \input{sec-replacements} \input{sec-fine-tuning} \input{sec-conclusions-know-limitations} \input{references} \input{appendices} - \addtocontents{lol}{\protect\end{multicols}\protect\end{widepage}} \printindex \end{document} diff --git a/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex b/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex index 938a0d6f530..990e001518a 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex @@ -4,22 +4,25 @@ that are \emph{unknown}! For example, with reference to the multicolumn alignment routine in - \vref{lst:tabular2-mod2}), when working with code blocks in which multicolumn commands + \vref{lst:tabular2-mod2}, when working with code blocks in which multicolumn commands overlap, the algorithm can fail. - Another limitation is to do with efficiency, particularly when the \texttt{-m} - switch is active, as this adds many checks and processes. The current implementation - relies upon finding and storing \emph{every} code block (see the discussion on - \cpageref{page:phases}); I hope that, in a future version, only \emph{nested} code - blocks will need to be stored in the `packing' phase, and that this will improve the - efficiency of the script. + Another limitation is to do with efficiency, particularly when the \texttt{-m} switch is + active, as this adds many checks and processes. The current implementation relies upon + finding and storing \emph{every} code block (see the discussion on + \cpageref{page:phases}); I hope that, in a future version, only \emph{nested} code blocks + will need to be stored in the `packing' phase, and that this will improve the efficiency + of the script. You can run \texttt{latexindent} on any file;% - \announce{2019-07-13}*{ability to call latexindent on any file} if you don't specify an extension, then the extensions that you - specify in \lstinline[breaklines=true]!fileExtensionPreference! (see \vref{lst:fileExtensionPreference}) will be consulted. If you - find a case in which the script struggles, please feel free to report it at - \cite{latexindent-home}, and in the meantime, consider using a \texttt{noIndentBlock} (see \cpageref{lst:noIndentBlock}). + \announce{2019-07-13}*{ability to call latexindent on any file} if you don't specify an + extension, then the extensions that you specify in + \lstinline[breaklines=true]!fileExtensionPreference! (see + \vref{lst:fileExtensionPreference}) will be consulted. If you find a case in which the + script struggles, please feel free to report it at \cite{latexindent-home}, and in the + meantime, consider using a \texttt{noIndentBlock} (see \cpageref{lst:noIndentBlock}). I hope that this script is useful to some; if you find an example where the script does not behave as you think it should, the best way to contact me is to report an issue on - \cite{latexindent-home}; otherwise, feel free to find me on the \url{http://tex.stackexchange.com/users/6621/cmhughes}. + \cite{latexindent-home}; otherwise, feel free to find me on the + \url{http://tex.stackexchange.com/users/6621/cmhughes}. diff --git a/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex b/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex index 89a0596fd57..85738608b9f 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex @@ -1,41 +1,40 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \section{defaultSettings.yaml}\label{sec:defuseloc} - \texttt{latexindent.pl} loads its settings from \texttt{defaultSettings.yaml}. The idea is to - separate the behaviour of the script from the internal working -- this is very similar to - the way that we separate content from form when writing our documents in \LaTeX. - - If you look in \texttt{defaultSettings.yaml} you'll find the switches that govern the behaviour - of \texttt{latexindent.pl}. If you're not sure where \texttt{defaultSettings.yaml} resides on - your computer, don't worry as \texttt{indent.log} will tell you where to find it. - \texttt{defaultSettings.yaml} is commented, but here is a description of what each switch is - designed to do. The default value is given in each case; whenever you see - \emph{integer} in \emph{this} section, assume that it must be - greater than or equal to \texttt{0} unless otherwise stated. - - For most of the settings in \texttt{defaultSettings.yaml} that are specified as integers, then - we understand \texttt{0} to represent `off' and \texttt{1} to - represent `on'. For fields that allow values other than \texttt{0} or - \texttt{1}, it is hoped that the specific context and associated commentary - should make it clear which values are allowed. + \texttt{latexindent.pl} loads its settings from \texttt{defaultSettings.yaml}. The idea + is to separate the behaviour of the script from the internal working -- this is very + similar to the way that we separate content from form when writing our documents in + \LaTeX. + + If you look in \texttt{defaultSettings.yaml} you'll find the switches that govern the + behaviour of \texttt{latexindent.pl}. If you're not sure where + \texttt{defaultSettings.yaml} resides on your computer, don't worry as + \texttt{indent.log} will tell you where to find it. \texttt{defaultSettings.yaml} is + commented, but here is a description of what each switch is designed to do. The default + value is given in each case; whenever you see \emph{integer} in \emph{this} section, + assume that it must be greater than or equal to \texttt{0} unless otherwise stated. + + For most of the settings in \texttt{defaultSettings.yaml} that are specified as integers, + then we understand \texttt{0} to represent `off' and \texttt{1} to represent `on'. For + fields that allow values other than \texttt{0} or \texttt{1}, it is hoped that the + specific context and associated commentary should make it clear which values are allowed. \yamltitle{fileExtensionPreference}*{fields} \texttt{latexindent.pl} can be called to - act on a file without specifying the file extension. For example we can call + act on a file without specifying the file extension. For example we can call \begin{commandshell} latexindent.pl myfile \end{commandshell} - in which case the script will look for \texttt{myfile} with the extensions - specified in \texttt{fileExtensionPreference} in their numeric order. If no match is found, the - script will exit. As with all of the fields, you should change and/or add to this as - necessary. + in which case the script will look for \texttt{myfile} with the extensions specified in + \texttt{fileExtensionPreference} in their numeric order. If no match is found, the script + will exit. As with all of the fields, you should change and/or add to this as necessary. \cmhlistingsfromfile[style=fileExtensionPreference]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileExtensionPreference}}{lst:fileExtensionPreference} Calling \texttt{latexindent.pl myfile} with the (default) settings specified in \cref{lst:fileExtensionPreference} means that the script will first look for - \texttt{myfile.tex}, then \texttt{myfile.sty}, \texttt{myfile.cls}, and - finally \texttt{myfile.bib} in order\footnote{Throughout this manual, listings shown with line numbers represent code - taken directly from \texttt{defaultSettings.yaml}.}. + \texttt{myfile.tex}, then \texttt{myfile.sty}, \texttt{myfile.cls}, and finally + \texttt{myfile.bib} in order\footnote{Throughout this manual, listings shown with line + numbers represent code taken directly from \texttt{defaultSettings.yaml}.}. \index{backup files!extension settings} @@ -43,40 +42,38 @@ latexindent.pl myfile \yamltitle{backupExtension}*{extension name} If you call \texttt{latexindent.pl} with the \texttt{-w} switch (to overwrite - \texttt{myfile.tex}) then it will create a backup file before doing any indentation; - the default extension is \texttt{.bak}, so, for example, - \texttt{myfile.bak0} would be created when calling \texttt{latexindent.pl myfile.tex} for the - first time. + \texttt{myfile.tex}) then it will create a backup file before doing any indentation; the + default extension is \texttt{.bak}, so, for example, \texttt{myfile.bak0} would be + created when calling \texttt{latexindent.pl myfile.tex} for the first time. - By default, every time you subsequently call \texttt{latexindent.pl} with the - \texttt{-w} to act upon \texttt{myfile.tex}, it will create successive - back up files: \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc. + By default, every time you subsequently call \texttt{latexindent.pl} with the \texttt{-w} + to act upon \texttt{myfile.tex}, it will create successive back up files: + \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc. \yamltitle{onlyOneBackUp}*{integer} \label{page:onlyonebackup} \index{backup files!number of backup files} - If you don't want a backup for every time that you call \texttt{latexindent.pl} (so - you don't want \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc) and you - simply want \texttt{myfile.bak} (or whatever you chose \texttt{backupExtension} to be) then change \texttt{onlyOneBackUp} to - \texttt{1}; the default value of \texttt{onlyOneBackUp} is + If you don't want a backup for every time that you call \texttt{latexindent.pl} (so you + don't want \texttt{myfile.bak1}, \texttt{myfile.bak2}, etc) and you simply want + \texttt{myfile.bak} (or whatever you chose \texttt{backupExtension} to be) then change + \texttt{onlyOneBackUp} to \texttt{1}; the default value of \texttt{onlyOneBackUp} is \texttt{0}. \index{backup files!maximum number of backup files} \index{backup files!number of backup files} \yamltitle{maxNumberOfBackUps}*{integer} - Some users may only want a finite number of backup files, say at most - $3$, in which case, they can change this switch. The smallest value of - \texttt{maxNumberOfBackUps} is $0$ which will \emph{not} - prevent backup files being made; in this case, the behaviour will be dictated entirely by - \texttt{onlyOneBackUp}. The default value of \texttt{maxNumberOfBackUps} is - \texttt{0}. + Some users may only want a finite number of backup files, say at most $3$, in which case, + they can change this switch. The smallest value of \texttt{maxNumberOfBackUps} is $0$ + which will \emph{not} prevent backup files being made; in this case, the behaviour will + be dictated entirely by \texttt{onlyOneBackUp}. The default value of + \texttt{maxNumberOfBackUps} is \texttt{0}. \yamltitle{cycleThroughBackUps}*{integer} \index{backup files!cycle through} Some users may wish to cycle through backup files, by deleting the oldest backup file and keeping only the most recent; for example, with \texttt{maxNumberOfBackUps: 4}, and - \texttt{cycleThroughBackUps} set to \texttt{1} then the \texttt{copy} - procedure given below would be obeyed. + \texttt{cycleThroughBackUps} set to \texttt{1} then the \texttt{copy} procedure given + below would be obeyed. \begin{commandshell} copy myfile.bak1 to myfile.bak0 @@ -89,37 +86,38 @@ copy myfile.bak4 to myfile.bak3 \yamltitle{logFilePreferences}*{fields} \texttt{latexindent.pl} writes information to \texttt{indent.log}, some of which can be customized by changing \texttt{logFilePreferences}; see - \cref{lst:logFilePreferences}. If you load your own user settings (see \vref{sec:indentconfig}) - then \texttt{latexindent.pl} will detail them in \texttt{indent.log}; you can choose - not to have the details logged by switching \texttt{showEveryYamlRead} to - \texttt{0}. Once all of your settings have been loaded, you can see the - amalgamated settings in the log file by switching \texttt{showAmalgamatedSettings} to - \texttt{1}, if you wish. + \cref{lst:logFilePreferences}. If you load your own user settings (see + \vref{sec:indentconfig}) then \texttt{latexindent.pl} will detail them in + \texttt{indent.log}; you can choose not to have the details logged by switching + \texttt{showEveryYamlRead} to \texttt{0}. Once all of your settings have been loaded, you + can see the amalgamated settings in the log file by switching + \texttt{showAmalgamatedSettings} to \texttt{1}, if you wish. - \cmhlistingsfromfile*[style=logFilePreferences,]*{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences} + \cmhlistingsfromfile[style=logFilePreferences,]*{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences} When% - \announce{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either of the - \texttt{trace} modes (see \cpageref{page:traceswitch}) are active, you will receive - detailed information in \texttt{indent.log}. You can specify character strings to - appear before and after the notification of a found code block using, respectively, - \texttt{showDecorationStartCodeBlockTrace} and \texttt{showDecorationFinishCodeBlockTrace}. A demonstration is given in + \announce{2018-01-13}{showDecorationStartCodeBlockTrace feature for log file} either of + the \texttt{trace} modes (see \cpageref{page:traceswitch}) are active, you will receive + detailed information in \texttt{indent.log}. You can specify character strings to appear + before and after the notification of a found code block using, respectively, + \texttt{showDecorationStartCodeBlockTrace} and + \texttt{showDecorationFinishCodeBlockTrace}. A demonstration is given in \vref{app:logfile-demo}. The log file will end with the characters given in \texttt{endLogFileWith}, and will report the \texttt{GitHub} address of \texttt{latexindent.pl} to the log file if \texttt{showGitHubInfoFooter} is set to \texttt{1}. - Note: \texttt{latexindent.pl} no longer uses the \texttt{log4perl} module to handle - the creation of the logfile.% + Note: \texttt{latexindent.pl} no longer uses the \texttt{log4perl} module to handle the + creation of the logfile.% \announce{2021-03-14}*{no longer using log4perl} Some of the options% - \announce*{2021-06-19}*{logFilePreferences updated to include Dumper options}for Perl's + \announce{2021-06-19}*{logFilePreferences updated to include Dumper options}for Perl's \texttt{Dumper} module can be specified in \cref{lst:logFilePreferences}; see - \cite{dumper} and \cite{dumperdemo} for more information. These options - will mostly be helpful for those calling \texttt{latexindent.pl} with the - \texttt{-tt} option described in \cref{sec:commandline}. + \cite{dumper} and \cite{dumperdemo} for more information. These options will mostly be + helpful for those calling \texttt{latexindent.pl} with the \texttt{-tt} option described + in \cref{sec:commandline}. \subsection{Verbatim code blocks} \yamltitle{verbatimEnvironments}*{fields} @@ -135,9 +133,9 @@ copy myfile.bak4 to myfile.bak3 \cmhlistingsfromfile[style=verbatimCommands]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimCommands}}{lst:verbatimCommands} \end{cmhtcbraster} - Note that if you put an environment in \texttt{verbatimEnvironments} and in other fields such - as \texttt{lookForAlignDelims} or \texttt{noAdditionalIndent} then \texttt{latexindent.pl} will - \emph{always} prioritize \texttt{verbatimEnvironments}. + Note that if you put an environment in \texttt{verbatimEnvironments} and in other fields + such as \texttt{lookForAlignDelims} or \texttt{noAdditionalIndent} then + \texttt{latexindent.pl} will \emph{always} prioritize \texttt{verbatimEnvironments}. \yamltitle{verbatimCommands}*{fields} A field that contains a list of commands that are verbatim commands, for example @@ -145,35 +143,35 @@ copy myfile.bak4 to myfile.bak3 breaking routines (only relevant if the \texttt{-m} is active, see \vref{sec:modifylinebreaks}). - With reference to \cref{lst:verbatimCommands}, by default \texttt{latexindent.pl} looks for + With reference to \cref{lst:verbatimCommands}, by default \texttt{latexindent.pl} looks + for \lstinline|\verb| immediately followed by another character, and then it takes the body as anything up to the next occurrence of the character; this means that, for example, \lstinline|\verb!x+3!| is treated as a \texttt{verbatimCommands}. \yamltitle{noIndentBlock}*{fields} If you have a block of code that you don't want \texttt{latexindent.pl} to touch (even if - \index{verbatim!noIndentBlock} it is \emph{not} a verbatim-like environment) then - you can wrap it in an environment from \texttt{noIndentBlock}; you can use any name you - like for this, provided you populate it as demonstrate in \cref{lst:noIndentBlock}. + \index{verbatim!noIndentBlock} it is \emph{not} a verbatim-like environment) then you can + wrap it in an environment from \texttt{noIndentBlock}; you can use any name you like for + this, provided you populate it as demonstrate in \cref{lst:noIndentBlock}. \cmhlistingsfromfile[style=noIndentBlock]*{../defaultSettings.yaml}[width=.4\linewidth,before=\centering,yaml-TCB]{\texttt{noIndentBlock}}{lst:noIndentBlock} Of course, you don't want to have to specify these as null environments in your code, so - you use them with a comment symbol, \lstinline!%!, followed by as many spaces - (possibly none) as you like; see \cref{lst:noIndentBlockdemo} for example. + you use them with a comment symbol, \lstinline!%!, followed by as many spaces (possibly + none) as you like; see \cref{lst:noIndentBlockdemo} for example. \cmhlistingsfromfile{demonstrations/noindentblock.tex}{\texttt{noIndentBlock.tex}}{lst:noIndentBlockdemo} - Important note: it is assumed that the \texttt{noindent} block statements specified - in this way appear on their own line. + Important note: it is assumed that the \texttt{noindent} block statements specified in + this way appear on their own line. The% - \announce*{2021-06-19}{noIndentBlock specified as regex} \texttt{noIndentBlock} - fields can also be specified in terms of \texttt{begin} and - \texttt{end} fields. We use the code in \cref{lst:noIndentBlock1} to demonstrate - this feature. + \announce{2021-06-19}{noIndentBlock specified as regex} \texttt{noIndentBlock} fields can also be specified in terms of \texttt{begin} and + \texttt{end} fields. We use the code in \cref{lst:noIndentBlock1} to demonstrate this + feature. - \cmhlistingsfromfile*{demonstrations/noindentblock1.tex}{\texttt{noIndentBlock1.tex}}{lst:noIndentBlock1} + \cmhlistingsfromfile{demonstrations/noindentblock1.tex}{\texttt{noIndentBlock1.tex}}{lst:noIndentBlock1} The settings given in \cref{lst:noindent1,lst:noindent2} are equivalent: @@ -181,9 +179,9 @@ copy myfile.bak4 to myfile.bak3 raster left skip=-3.5cm, raster right skip=-2cm, raster column skip=.03\linewidth] - \cmhlistingsfromfile*{demonstrations/noindent1.yaml}[yaml-TCB]{\texttt{noindent1.yaml}}{lst:noindent1} - \cmhlistingsfromfile*{demonstrations/noindent2.yaml}[yaml-TCB]{\texttt{noindent2.yaml}}{lst:noindent2} - \cmhlistingsfromfile*{demonstrations/noindent3.yaml}[yaml-TCB]{\texttt{noindent3.yaml}}{lst:noindent3} + \cmhlistingsfromfile{demonstrations/noindent1.yaml}[yaml-TCB]{\texttt{noindent1.yaml}}{lst:noindent1} + \cmhlistingsfromfile{demonstrations/noindent2.yaml}[yaml-TCB]{\texttt{noindent2.yaml}}{lst:noindent2} + \cmhlistingsfromfile{demonstrations/noindent3.yaml}[yaml-TCB]{\texttt{noindent3.yaml}}{lst:noindent3} \end{cmhtcbraster} Upon running the commands @@ -193,26 +191,26 @@ latexindent.pl -l noindent2.yaml noindent1 \end{commandshell} then we receive the output given in \cref{lst:noIndentBlock1-mod1}. - \cmhlistingsfromfile*{demonstrations/noindentblock1-mod1.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent1} or \cref{lst:noindent2}}{lst:noIndentBlock1-mod1} + \cmhlistingsfromfile{demonstrations/noindentblock1-mod1.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent1} or \cref{lst:noindent2}}{lst:noIndentBlock1-mod1} - The \texttt{begin}, \texttt{body} and \texttt{end} fields - for \texttt{noIndentBlock} are all \emph{regular expressions}. If the - \texttt{body} field is not specified, then it takes a default value of + The \texttt{begin}, \texttt{body} and \texttt{end} fields for \texttt{noIndentBlock} are + all \emph{regular expressions}. If the \texttt{body} field is not specified, then it + takes a default value of \lstinline!.*?! which is written explicitly in \cref{lst:noindent1}. In this - context, - we interpret \lstinline!.*?! in words as \emph{the fewest number of characters (possibly none) until the `end' field is reached}. + context, we interpret \lstinline!.*?! in words as \emph{the fewest number of characters + (possibly none) until the `end' field is reached}. - The \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); - by default, it is assumed to be 1 (on). + The \texttt{lookForThis} field is optional, and can take the values 0 (off) or 1 (on); by + default, it is assumed to be 1 (on). - Using \cref{lst:noindent3} demonstrates setting \texttt{lookForThis} to 0 (off); - running the command + Using \cref{lst:noindent3} demonstrates setting \texttt{lookForThis} to 0 (off); running + the command \begin{commandshell} latexindent.pl -l noindent3.yaml noindent1 \end{commandshell} gives the output in \cref{lst:noIndentBlock1-mod3}. - \cmhlistingsfromfile*{demonstrations/noindentblock1-mod3.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent3}}{lst:noIndentBlock1-mod3} + \cmhlistingsfromfile{demonstrations/noindentblock1-mod3.tex}{\texttt{noIndentBlock1.tex} using \cref{lst:noindent3}}{lst:noIndentBlock1-mod3} We will demonstrate this feature later in the documentation in \cref{lst:href3}. @@ -221,9 +219,9 @@ latexindent.pl -l noindent3.yaml noindent1 Before \texttt{latexindent.pl} determines the difference between preamble (if any) and the main document, it first searches for any of the environments specified in - \texttt{fileContentsEnvironments}, see \cref{lst:fileContentsEnvironments}. The behaviour of - \texttt{latexindent.pl} on these environments is determined by their location (preamble - or not), and the value \texttt{indentPreamble}, discussed next. + \texttt{fileContentsEnvironments}, see \cref{lst:fileContentsEnvironments}. The behaviour + of \texttt{latexindent.pl} on these environments is determined by their location + (preamble or not), and the value \texttt{indentPreamble}, discussed next. \cmhlistingsfromfile[style=fileContentsEnvironments]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{fileContentsEnvironments}}{lst:fileContentsEnvironments} @@ -231,26 +229,25 @@ latexindent.pl -l noindent3.yaml noindent1 The preamble of a document can sometimes contain some trickier code for \texttt{latexindent.pl} to operate upon. By default, \texttt{latexindent.pl} won't try to - operate on the preamble (as \texttt{indentPreamble} is set to \texttt{0}, by - default), but if you'd like \texttt{latexindent.pl} to try then change - \texttt{indentPreamble} to \texttt{1}. + operate on the preamble (as \texttt{indentPreamble} is set to \texttt{0}, by default), + but if you'd like \texttt{latexindent.pl} to try then change \texttt{indentPreamble} to + \texttt{1}. \yamltitle{lookForPreamble}*{fields} - Not all files contain preamble; for example, \texttt{sty}, - \texttt{cls} and \texttt{bib} files typically do - \emph{not}. Referencing \cref{lst:lookForPreamble}, if you set, for example, - \texttt{.tex} to \texttt{0}, then regardless of the setting of the - value of \texttt{indentPreamble}, preamble will not be assumed when operating upon - \texttt{.tex} files. + Not all files contain preamble; for example, \texttt{sty}, \texttt{cls} and \texttt{bib} + files typically do \emph{not}. Referencing \cref{lst:lookForPreamble}, if you set, for + example, \texttt{.tex} to \texttt{0}, then regardless of the setting of the value of + \texttt{indentPreamble}, preamble will not be assumed when operating upon \texttt{.tex} + files. \cmhlistingsfromfile[style=lookForPreamble]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{lookForPreamble}{lst:lookForPreamble} \yamltitle{preambleCommandsBeforeEnvironments}{0|1} Assuming that \texttt{latexindent.pl} is asked to operate upon the preamble of a - document, when this switch is set to \texttt{0} then environment code blocks - will be sought first, and then command code blocks. When this switch is set to - \texttt{1}, commands will be sought first. The example that first motivated - this switch contained the code given in \cref{lst:motivatepreambleCommandsBeforeEnvironments}. + document, when this switch is set to \texttt{0} then environment code blocks will be + sought first, and then command code blocks. When this switch is set to \texttt{1}, + commands will be sought first. The example that first motivated this switch contained the + code given in \cref{lst:motivatepreambleCommandsBeforeEnvironments}. \begin{cmhlistings}{Motivating \texttt{preambleCommandsBeforeEnvironments}}{lst:motivatepreambleCommandsBeforeEnvironments} ... @@ -264,19 +261,19 @@ postfoothook=\end{mdframed}, \subsection{Indentation and horizontal space} \yamltitle{defaultIndent}*{horizontal space} This is the default indentation used in the absence of other details for the code block - with which we are working. The default value is \lstinline!\t! which means a tab; - we will explore customisation beyond \texttt{defaultIndent} in \vref{sec:noadd-indent-rules}. + with which we are working. The default value is \lstinline!\t! which means a tab; we will + explore customisation beyond \texttt{defaultIndent} in \vref{sec:noadd-indent-rules}. If you're interested in experimenting with \texttt{latexindent.pl} then you can \emph{remove} all indentation by setting \texttt{defaultIndent: ""}. \yamltitle{removeTrailingWhitespace}*{fields}\label{yaml:removeTrailingWhitespace} - Trailing white space can be removed both \emph{before} and - \emph{after} processing the document, as detailed in \cref{lst:removeTrailingWhitespace}; - each of the fields can take the values \texttt{0} or - \texttt{1}. See \vref{lst:removeTWS-before,lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS} for before and after results. Thanks - to \cite{vosskuhle} for providing this feature. + Trailing white space can be removed both \emph{before} and \emph{after} processing the + document, as detailed in \cref{lst:removeTrailingWhitespace}; each of the fields can take + the values \texttt{0} or \texttt{1}. See + \vref{lst:removeTWS-before,lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS} for before + and after results. Thanks to \cite{vosskuhle} for providing this feature. \begin{minipage}{.4\textwidth} \cmhlistingsfromfile[style=removeTrailingWhitespace]*{../defaultSettings.yaml}[before=\centering,yaml-TCB]{removeTrailingWhitespace}{lst:removeTrailingWhitespace} @@ -288,17 +285,18 @@ removeTrailingWhitespace: 1 \end{yaml} \end{minipage}% - You can specify \texttt{removeTrailingWhitespace} simply as \texttt{0} or - \texttt{1}, if you wish; in this case,% - \announce{2017-06-28}{removeTrailingWhitespace} \texttt{latexindent.pl} will set both \texttt{beforeProcessing} and - \texttt{afterProcessing} to the value you specify; see \cref{lst:removeTrailingWhitespace-alt}. + You can specify \texttt{removeTrailingWhitespace} simply as \texttt{0} or \texttt{1}, if + you wish; in this case,% + \announce{2017-06-28}{removeTrailingWhitespace} \texttt{latexindent.pl} will set both + \texttt{beforeProcessing} and \texttt{afterProcessing} to the value you specify; see + \cref{lst:removeTrailingWhitespace-alt}. \subsection{Aligning at delimiters} \yamltitle{lookForAlignDelims}*{fields} This contains a list of code blocks that are operated upon in a special way by - \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in \texttt{lookForAlignDelims} can actually take - two different forms: the \emph{basic} version is shown in - \cref{lst:aligndelims:basic} and the \emph{advanced} version in + \texttt{latexindent.pl} (see \cref{lst:aligndelims:basic}). In fact, the fields in + \texttt{lookForAlignDelims} can actually take two different forms: the \emph{basic} + version is shown in \cref{lst:aligndelims:basic} and the \emph{advanced} version in \cref{lst:aligndelims:advanced}; we will discuss each in turn. \index{delimiters!advanced settings of lookForAlignDelims} @@ -314,14 +312,14 @@ lookForAlignDelims: Specifying code blocks in this field instructs \texttt{latexindent.pl} to try and align each column by its alignment delimiters. It does have some limitations (discussed further - in \cref{sec:knownlimitations}), but in many cases it will produce results such as those in - \cref{lst:tabularbefore:basic,lst:tabularafter:basic}. + in \cref{sec:knownlimitations}), but in many cases it will produce results such as those + in \cref{lst:tabularbefore:basic,lst:tabularafter:basic}. If you find that \texttt{latexindent.pl} does not perform satisfactorily on such environments then you can set the relevant key to \texttt{0}, for example - \texttt{tabular: 0}; alternatively, if you just want to ignore - \emph{specific} instances of the environment, you could wrap them in something - from \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}). + \texttt{tabular: 0}; alternatively, if you just want to ignore \emph{specific} instances + of the environment, you could wrap them in something from \texttt{noIndentBlock} (see + \vref{lst:noIndentBlock}). \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/tabular1.tex}{\texttt{tabular1.tex}}{lst:tabularbefore:basic} @@ -341,53 +339,54 @@ lookForAlignDelims: \cmhlistingsfromfile[style=lookForAlignDelims]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{lookForAlignDelims} (advanced)}{lst:aligndelims:advanced} Note that you can use a mixture of the basic and advanced form: in - \cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx} are advanced - and \texttt{longtable} is basic. When using the advanced form, each field should - receive at least 1 sub-field, and \emph{can} - (but does not have to) receive any of the following + \cref{lst:aligndelims:advanced} \texttt{tabular} and \texttt{tabularx} are advanced and + \texttt{longtable} is basic. When using the advanced form, each field should receive at + least 1 sub-field, and \emph{can} (but does not have to) receive any of the following fields: \begin{itemize} \item \texttt{delims}: binary switch (0 or 1) equivalent to simply specifying, for - example, \texttt{tabular: 1} in the basic version shown in \cref{lst:aligndelims:basic}. If - \texttt{delims} is set to \texttt{0} then the align at ampersand - routine will not be called for this code block (default: 1); - \item \texttt{alignDoubleBackSlash}: binary switch (0 or 1) to determine if \lstinline!\\! + example, \texttt{tabular: 1} in the basic version shown in \cref{lst:aligndelims:basic}. + If \texttt{delims} is set to \texttt{0} then the align at ampersand routine will not be + called for this code block (default: 1); + \item \texttt{alignDoubleBackSlash}: binary switch (0 or 1) to determine if + \lstinline!\\! should be aligned (default: 1); \item \texttt{spacesBeforeDoubleBackSlash}: optionally,% - \announce{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment} specifies the number (integer $\geq$ 0) of spaces - to be inserted before \lstinline!\\! (default: 1); - %\footnote{Previously this only activated if \texttt{alignDoubleBackSlash} was set to \texttt{0}.} - \item \announce{2017-06-19}{multiColumnGrouping} \texttt{multiColumnGrouping}: binary switch (0 or 1) that details if - \texttt{latexindent.pl} should group columns - above and below a \lstinline!\multicolumn! command (default: 0); - \item \announce{2017-06-19}{alignRowsWithoutMaxDelims} \texttt{alignRowsWithoutMaxDelims}: binary switch (0 or 1) that details if - rows that do not contain the maximum number of delimeters should be formatted so as to - have the ampersands aligned (default: 1); - \item \announce{2018-01-13}{spacesBeforeAmpersand in ampersand alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer - $\geq$ 0) of - spaces to be placed \emph{before} ampersands (default: 1); - \item \announce{2018-01-13}{spacesAfterAmpersand in ampersand alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer - $\geq$ 0) of - spaces to be placed \emph{After} ampersands (default: 1); - \item \announce{2018-01-13}{justification of cells in ampersand alignment}\texttt{justification}: optionally specifies the justification of - each cell as either \emph{left} or \emph{right} (default: left); - \item \announce{2020-03-21}{align final double back slash}{alignFinalDoubleBackSlash} optionally specifies if the - \emph{final} double back slash should be used for alignment (default: 0); + \announce{2018-01-13}*{update to spacesBeforeDoubleBackSlash in ampersand alignment} + specifies the number (integer $\geq$ 0) of spaces to be inserted before + \lstinline!\\! (default: 1); %\footnote{Previously this only activated if \texttt{alignDoubleBackSlash} was set to \texttt{0}.} + \item \announce{2017-06-19}{multiColumnGrouping} \texttt{multiColumnGrouping}: binary switch (0 + or 1) that details if \texttt{latexindent.pl} should group columns above and below a + \lstinline!\multicolumn! command (default: 0); + \item \announce{2017-06-19}{alignRowsWithoutMaxDelims} \texttt{alignRowsWithoutMaxDelims}: + binary switch (0 or 1) that details if rows that do not contain the maximum number of + delimeters should be formatted so as to have the ampersands aligned (default: 1); + \item \announce{2018-01-13}{spacesBeforeAmpersand in ampersand alignment}\texttt{spacesBeforeAmpersand}: optionally specifies the number (integer $\geq$ + 0) of spaces to be placed \emph{before} ampersands (default: 1); + \item \announce{2018-01-13}{spacesAfterAmpersand in ampersand alignment}\texttt{spacesAfterAmpersand}: optionally specifies the number (integer $\geq$ + 0) of spaces to be placed \emph{After} ampersands (default: 1); + \item \announce{2018-01-13}{justification of cells in ampersand alignment}\texttt{justification}: optionally specifies the justification of each cell as + either \emph{left} or \emph{right} (default: left); + \item \announce{2020-03-21}{align final double back slash}{alignFinalDoubleBackSlash} + optionally specifies if the \emph{final} double back slash should be used for alignment + (default: 0); \item \announce{2020-03-21}{don't measure feature}{dontMeasure} optionally specifies if - user-specified cells, rows or the largest entries should \emph{not} be - measured (default: 0); - \item \announce{2020-03-21}{delimiter RegEx feature}{delimiterRegEx} optionally specifies the pattern - matching to be used for the alignment delimeter (default: \lstinline3 '(?<!\\)(&)'3); - \item \announce{2020-03-21}{delimiter justification}{delimiterJustification} optionally specifies the justification - for the alignment delimeters (default: left); note that this feature is only useful if - you have delimiters of different lengths in the same column, discussed in - \cref{sec:delimiter-reg-ex}. + user-specified cells, rows or the largest entries should \emph{not} be measured (default: + 0); + \item \announce{2020-03-21}{delimiter RegEx feature}{delimiterRegEx} optionally specifies the + pattern matching to be used for the alignment delimeter (default: + \lstinline3 '(?<!\\)(&)'3); + \item \announce{2020-03-21}{delimiter justification}{delimiterJustification} optionally + specifies the justification for the alignment delimeters (default: left); note that this + feature is only useful if you have delimiters of different lengths in the same column, + discussed in \cref{sec:delimiter-reg-ex}. \end{itemize} We will explore most of these features using the file \texttt{tabular2.tex} in - \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}; we will explore - \texttt{alignFinalDoubleBackSlash} in \cref{lst:tabular4}; the \texttt{dontMeasure} feature - will be described in \cref{sec:dontMeasure}, and \texttt{delimiterRegEx} in + \cref{lst:tabular2} (which contains a \lstinline!\multicolumn! command), and the YAML + files in \crefrange{lst:tabular2YAML}{lst:tabular8YAML}; we will explore + \texttt{alignFinalDoubleBackSlash} in \cref{lst:tabular4}; the \texttt{dontMeasure} + feature will be described in \cref{sec:dontMeasure}, and \texttt{delimiterRegEx} in \cref{sec:delimiter-reg-ex}. \cmhlistingsfromfile{demonstrations/tabular2.tex}{\texttt{tabular2.tex}}{lst:tabular2} @@ -432,7 +431,8 @@ latexindent.pl tabular2.tex -l tabular2.yaml,tabular6.yaml latexindent.pl tabular2.tex -l tabular2.yaml,tabular7.yaml latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml \end{commandshell} - we obtain the respective outputs given in \crefrange{lst:tabular2-default}{lst:tabular2-mod8}. + we obtain the respective outputs given in + \crefrange{lst:tabular2-default}{lst:tabular2-mod8}. \begin{widepage} \cmhlistingsfromfile{demonstrations/tabular2-default.tex}{\texttt{tabular2.tex} default output}{lst:tabular2-default} @@ -447,44 +447,43 @@ latexindent.pl tabular2.tex -l tabular2.yaml,tabular8.yaml Notice in particular: \begin{itemize} - \item in both \cref{lst:tabular2-default,lst:tabular2-mod2} all rows have been aligned at the ampersand, even those - that do not contain the maximum number of ampersands (3 ampersands, in this case); + \item in both \cref{lst:tabular2-default,lst:tabular2-mod2} all rows have been aligned at the + ampersand, even those that do not contain the maximum number of ampersands (3 ampersands, + in this case); \item in \cref{lst:tabular2-default} the columns have been aligned at the ampersand; - \item in \cref{lst:tabular2-mod2} the \lstinline!\multicolumn! command has grouped the - $2$ columns beneath \emph{and} above it, because - \texttt{multiColumnGrouping} is set to $1$ in \cref{lst:tabular2YAML}; - \item in \cref{lst:tabular2-mod3} rows~3 and~6 have \emph{not} been aligned at the - ampersand, because \texttt{alignRowsWithoutMaxDelims} has been to set to $0$ in - \cref{lst:tabular3YAML}; however, the \lstinline!\\! \emph{have} still - been aligned; + \item in \cref{lst:tabular2-mod2} the \lstinline!\multicolumn! command has grouped the $2$ + columns beneath \emph{and} above it, because \texttt{multiColumnGrouping} is set to $1$ + in \cref{lst:tabular2YAML}; + \item in \cref{lst:tabular2-mod3} rows~3 and~6 have \emph{not} been aligned at the ampersand, + because \texttt{alignRowsWithoutMaxDelims} has been to set to $0$ in + \cref{lst:tabular3YAML}; however, the \lstinline!\\! \emph{have} still been aligned; \item in \cref{lst:tabular2-mod4} the columns beneath and above the \lstinline!\multicolumn! - commands have been grouped (because \texttt{multiColumnGrouping} is set to - $1$), and there are at least $4$ spaces - \emph{before} each aligned ampersand because \texttt{spacesBeforeAmpersand} is set to - $4$; + commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and + there are at least $4$ spaces \emph{before} each aligned ampersand because + \texttt{spacesBeforeAmpersand} is set to $4$; \item in \cref{lst:tabular2-mod5} the columns beneath and above the \lstinline!\multicolumn! - commands have been grouped (because \texttt{multiColumnGrouping} is set to - $1$), and there are at least $4$ spaces - \emph{after} each aligned ampersand because \texttt{spacesAfterAmpersand} is set to - $4$; - \item in \cref{lst:tabular2-mod6} the \lstinline!\\! have \emph{not} been - aligned, because \texttt{alignDoubleBackSlash} is set to \texttt{0}, otherwise the - output is the same as \cref{lst:tabular2-mod2}; - \item in \cref{lst:tabular2-mod7} the \lstinline!\\! \emph{have} been - aligned, and because \texttt{spacesBeforeDoubleBackSlash} is set to \texttt{0}, there are - no spaces ahead of them; the output is otherwise the same as \cref{lst:tabular2-mod2}; - \item in \cref{lst:tabular2-mod8} the cells have been \emph{right}-justified; note - that cells above and below the \lstinline!\multicol! statements have still been group - correctly, because of the settings in \cref{lst:tabular2YAML}. + commands have been grouped (because \texttt{multiColumnGrouping} is set to $1$), and + there are at least $4$ spaces \emph{after} each aligned ampersand because + \texttt{spacesAfterAmpersand} is set to $4$; + \item in \cref{lst:tabular2-mod6} the \lstinline!\\! have \emph{not} been aligned, because + \texttt{alignDoubleBackSlash} is set to \texttt{0}, otherwise the output is the same as + \cref{lst:tabular2-mod2}; + \item in \cref{lst:tabular2-mod7} the \lstinline!\\! \emph{have} been aligned, and because + \texttt{spacesBeforeDoubleBackSlash} is set to \texttt{0}, there are no spaces ahead of + them; the output is otherwise the same as \cref{lst:tabular2-mod2}; + \item in \cref{lst:tabular2-mod8} the cells have been \emph{right}-justified; note that cells + above and below the \lstinline!\multicol! statements have still been group correctly, + because of the settings in \cref{lst:tabular2YAML}. \end{itemize} \subsubsection{lookForAlignDelims: spacesBeforeAmpersand} The \texttt{spacesBeforeAmpersand}% - \announce*{2021-06-19}*{spacesBeforeAmpersand leading blank column upgrade} can be specified in a few different - ways. The \emph{basic} form is demonstrated in \cref{lst:tabular4YAML}, but we - can customise the behaviour further by specifying if we would like this value to change - if it encounters a \emph{leading blank column}; that is, when the first column contains only - zero-width entries. We refer to this as the \emph{advanced} form. + \announce{2021-06-19}*{spacesBeforeAmpersand leading blank column upgrade} can be + specified in a few different ways. The \emph{basic} form is demonstrated in + \cref{lst:tabular4YAML}, but we can customise the behaviour further by specifying if we + would like this value to change if it encounters a \emph{leading blank column}; that is, + when the first column contains only zero-width entries. We refer to this as the + \emph{advanced} form. We demonstrate this feature in relation to \cref{lst:aligned1}; upon running the following command @@ -494,18 +493,18 @@ latexindent.pl aligned1.tex -o=+-default then we receive the default output given in \cref{lst:aligned1-default}. \begin{cmhtcbraster} - \cmhlistingsfromfile*{demonstrations/aligned1.tex}{\texttt{aligned1.tex}}{lst:aligned1} - \cmhlistingsfromfile*{demonstrations/aligned1-default.tex}{\texttt{aligned1-default.tex}}{lst:aligned1-default} + \cmhlistingsfromfile{demonstrations/aligned1.tex}{\texttt{aligned1.tex}}{lst:aligned1} + \cmhlistingsfromfile{demonstrations/aligned1-default.tex}{\texttt{aligned1-default.tex}}{lst:aligned1-default} \end{cmhtcbraster} - The settings in \crefrange{lst:sba1}{lst:sba4} are all equivlanent; we have used the not-yet - discussed \texttt{noAdditionalIndent} field (see \vref{sec:noadd-indent-rules}) which will assist - in the demonstration in what follows. + The settings in \crefrange{lst:sba1}{lst:sba4} are all equivlanent; we have used the + not-yet discussed \texttt{noAdditionalIndent} field (see \vref{sec:noadd-indent-rules}) + which will assist in the demonstration in what follows. \begin{cmhtcbraster}[raster columns=2, ] - \cmhlistingsfromfile*{demonstrations/sba1.yaml}[yaml-TCB]{\texttt{sba1.yaml}}{lst:sba1} - \cmhlistingsfromfile*{demonstrations/sba2.yaml}[yaml-TCB]{\texttt{sba2.yaml}}{lst:sba2} - \cmhlistingsfromfile*{demonstrations/sba3.yaml}[yaml-TCB]{\texttt{sba3.yaml}}{lst:sba3} - \cmhlistingsfromfile*{demonstrations/sba4.yaml}[yaml-TCB]{\texttt{sba4.yaml}}{lst:sba4} + \cmhlistingsfromfile{demonstrations/sba1.yaml}[yaml-TCB]{\texttt{sba1.yaml}}{lst:sba1} + \cmhlistingsfromfile{demonstrations/sba2.yaml}[yaml-TCB]{\texttt{sba2.yaml}}{lst:sba2} + \cmhlistingsfromfile{demonstrations/sba3.yaml}[yaml-TCB]{\texttt{sba3.yaml}}{lst:sba3} + \cmhlistingsfromfile{demonstrations/sba4.yaml}[yaml-TCB]{\texttt{sba4.yaml}}{lst:sba4} \end{cmhtcbraster} Upon running the following commands \begin{commandshell} @@ -514,11 +513,11 @@ latexindent.pl aligned1.tex -l sba2.yaml latexindent.pl aligned1.tex -l sba3.yaml latexindent.pl aligned1.tex -l sba4.yaml \end{commandshell} - then we receive the (same) output given in \cref{lst:aligned1-mod1}; we note that there is - \emph{one space} before each ampersand. + then we receive the (same) output given in \cref{lst:aligned1-mod1}; we note that there + is \emph{one space} before each ampersand. \begin{cmhtcbraster} - \cmhlistingsfromfile*{demonstrations/aligned1-mod1.tex}{\texttt{aligned1-mod1.tex}}{lst:aligned1-mod1} + \cmhlistingsfromfile{demonstrations/aligned1-mod1.tex}{\texttt{aligned1-mod1.tex}}{lst:aligned1-mod1} \end{cmhtcbraster} We note in particular: @@ -531,23 +530,23 @@ latexindent.pl aligned1.tex -l sba4.yaml and specified \texttt{spacesBeforeAmpersand}. The default value is \texttt{1}; \item \cref{lst:sba3} demonstrates the new \emph{advanced} way to specify \texttt{spacesBeforeAmpersand}, and - for us to set the \texttt{default} value that sets the number of spaces before - ampersands which are \emph{not} in leading blank columns. The - default value is \texttt{1}. + for us to set the \texttt{default} value that sets the number of spaces before ampersands + which are \emph{not} in leading blank columns. The default value is \texttt{1}. - We note that \texttt{leadingBlankColumn} has not been specified in \cref{lst:sba3}, - and it will inherit the value from \texttt{default}; + We note that \texttt{leadingBlankColumn} has not been specified in \cref{lst:sba3}, and + it will inherit the value from \texttt{default}; \item \cref{lst:sba4} demonstrates spaces to be used before amperands for \emph{leading blank columns}. - We note that \emph{default} has not been specified, and it will be set to - \texttt{1} by default. + We note that \emph{default} has not been specified, and it will be set to \texttt{1} by + default. \end{itemize} We can customise the space before the ampersand in the \emph{leading blank column} of - \cref{lst:aligned1-mod1} by using either of \cref{lst:sba5,lst:sba6}, which are equivalent. + \cref{lst:aligned1-mod1} by using either of \cref{lst:sba5,lst:sba6}, which are + equivalent. \begin{cmhtcbraster} - \cmhlistingsfromfile*{demonstrations/sba5.yaml}[yaml-TCB]{\texttt{sba5.yaml}}{lst:sba5} - \cmhlistingsfromfile*{demonstrations/sba6.yaml}[yaml-TCB]{\texttt{sba6.yaml}}{lst:sba6} + \cmhlistingsfromfile{demonstrations/sba5.yaml}[yaml-TCB]{\texttt{sba5.yaml}}{lst:sba5} + \cmhlistingsfromfile{demonstrations/sba6.yaml}[yaml-TCB]{\texttt{sba6.yaml}}{lst:sba6} \end{cmhtcbraster} Upon running @@ -556,18 +555,18 @@ latexindent.pl aligned1.tex -l sba5.yaml latexindent.pl aligned1.tex -l sba6.yaml \end{commandshell} then we receive the (same) output given in \cref{lst:aligned1-mod5}. We note that the - space before the ampersand in the \emph{leading blank column} has been set to - \texttt{0} by \cref{lst:sba6}. + space before the ampersand in the \emph{leading blank column} has been set to \texttt{0} + by \cref{lst:sba6}. - We can demonstrated this feature further using the settings in \cref{lst:sba7} - which give the output in \cref{lst:aligned1-mod7}. + We can demonstrated this feature further using the settings in \cref{lst:sba7} which give + the output in \cref{lst:aligned1-mod7}. \begin{cmhtcbraster}[raster columns=3, raster left skip=-3.75cm, raster right skip=-2cm,] - \cmhlistingsfromfile*{demonstrations/aligned1-mod5.tex}{\texttt{aligned1-mod5.tex}}{lst:aligned1-mod5} - \cmhlistingsfromfile*{demonstrations/aligned1-mod7.tex}{\texttt{aligned1.tex} using \cref{lst:sba7}}{lst:aligned1-mod7} - \cmhlistingsfromfile*{demonstrations/sba7.yaml}[yaml-TCB]{\texttt{sba7.yaml}}{lst:sba7} + \cmhlistingsfromfile{demonstrations/aligned1-mod5.tex}{\texttt{aligned1-mod5.tex}}{lst:aligned1-mod5} + \cmhlistingsfromfile{demonstrations/aligned1-mod7.tex}{\texttt{aligned1.tex} using \cref{lst:sba7}}{lst:aligned1-mod7} + \cmhlistingsfromfile{demonstrations/sba7.yaml}[yaml-TCB]{\texttt{sba7.yaml}}{lst:sba7} \end{cmhtcbraster} \subsubsection{lookForAlignDelims: alignFinalDoubleBackSlash} We explore% @@ -604,13 +603,14 @@ latexindent.pl tabular4.tex -o=+-FDBS -y="lookForAlignDelims:tabular:alignFinalD As of Version 3.0, the alignment routine works on mandatory and optional arguments within commands, and also within `special' code blocks (see \texttt{specialBeginEnd} on \cpageref{yaml:specialBeginEnd}); for example, assuming that you have a command called - \lstinline!\matrix! and that it is populated within \texttt{lookForAlignDelims} (which it is, by default), and that + \lstinline!\matrix! and that it is populated within \texttt{lookForAlignDelims} + (which it is, by default), and that you run the command \begin{commandshell} latexindent.pl matrix1.tex \end{commandshell} - then the before-and-after results shown in \cref{lst:matrixbefore,lst:matrixafter} are achievable by - default. + then the before-and-after results shown in \cref{lst:matrixbefore,lst:matrixafter} are + achievable by default. \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/matrix1.tex}{\texttt{matrix1.tex}}{lst:matrixbefore} @@ -620,9 +620,10 @@ latexindent.pl matrix1.tex If you have blocks of code that you wish to align at the \& character that are \emph{not} wrapped in, for example, \lstinline!\begin{tabular}! \ldots \lstinline!\end{tabular}!, then you can use the mark up illustrated in - \cref{lst:alignmentmarkup}; the default output is shown in \cref{lst:alignmentmarkup-default}. Note - that the \lstinline!%*! must be next to each other, but that there can be any - number of spaces (possibly none) between the + \cref{lst:alignmentmarkup}; the default output is shown in + \cref{lst:alignmentmarkup-default}. Note + that the \lstinline!%*! must be next to each other, but that there can be any number of + spaces (possibly none) between the \lstinline!*! and \lstinline!\begin{tabular}!; note also that you may use any environment name that you have specified in \texttt{lookForAlignDelims}. @@ -632,16 +633,16 @@ latexindent.pl matrix1.tex \end{cmhtcbraster} With reference to \vref{tab:code-blocks} and the, yet undiscussed, fields of - \texttt{noAdditionalIndent} and \texttt{indentRules} - (see \vref{sec:noadd-indent-rules}), these comment-marked blocks are - considered \texttt{environments}. + \texttt{noAdditionalIndent} and \texttt{indentRules} (see \vref{sec:noadd-indent-rules}), + these comment-marked blocks are considered \texttt{environments}. \subsubsection{lookForAlignDelims: the dontMeasure feature}\label{sec:dontMeasure} The% - \announce{2020-03-21}{don't measure feature} \texttt{lookForAlignDelims} - field can, optionally, receive the \texttt{dontMeasure} option which can be specified - in a few different ways. We will explore this feature in relation to the code given in - \cref{lst:tabular-DM}; the default output is shown in \cref{lst:tabular-DM-default}. + \announce{2020-03-21}{don't measure feature} + \texttt{lookForAlignDelims} field can, optionally, receive the \texttt{dontMeasure} + option which can be specified in a few different ways. We will explore this feature in + relation to the code given in \cref{lst:tabular-DM}; the default output is shown in + \cref{lst:tabular-DM-default}. \index{delimiters!dontMeasure feature} \begin{cmhtcbraster}[raster left skip=-1.5cm,] @@ -649,9 +650,9 @@ latexindent.pl matrix1.tex \cmhlistingsfromfile{demonstrations/tabular-DM-default.tex}{\texttt{tabular-DM.tex} default output}{lst:tabular-DM-default} \end{cmhtcbraster} - The \texttt{dontMeasure} field can be specified as \texttt{largest}, and in - which case, the largest element will not be measured; with reference to the YAML file - given in \cref{lst:dontMeasure1}, we can run the command + The \texttt{dontMeasure} field can be specified as \texttt{largest}, and in which case, + the largest element will not be measured; with reference to the YAML file given in + \cref{lst:dontMeasure1}, we can run the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tabular-DM.tex -l=dontMeasure1.yaml @@ -663,8 +664,8 @@ latexindent.pl tabular-DM.tex -l=dontMeasure1.yaml \cmhlistingsfromfile{demonstrations/dontMeasure1.yaml}[yaml-TCB]{\texttt{dontMeasure1.yaml}}{lst:dontMeasure1} \end{cmhtcbraster} - We note that the \emph{largest} column entries have not contributed to the - measuring routine. + We note that the \emph{largest} column entries have not contributed to the measuring + routine. The \texttt{dontMeasure} field can also be specified in the form demonstrated in \cref{lst:dontMeasure2}. On running the following commands, @@ -704,19 +705,18 @@ latexindent.pl tabular-DM.tex -l=dontMeasure4.yaml \begin{itemize} \item \cref{lst:dontMeasure3} we have specified entries not to be measured, each one has a \emph{string} in the \texttt{this} - field, together with an optional specification of \texttt{applyTo} as - \texttt{cell}; + field, together with an optional specification of \texttt{applyTo} as \texttt{cell}; \item \cref{lst:dontMeasure4} we have specified entries not to be measured as a \emph{regular expression} using - the \texttt{regex} field, together with an optional specification of - \texttt{applyTo} as \texttt{cell} field, together with an optional - specification of \texttt{applyTo} as \texttt{cell}. + the \texttt{regex} field, together with an optional specification of \texttt{applyTo} as + \texttt{cell} field, together with an optional specification of \texttt{applyTo} as + \texttt{cell}. \end{itemize} - In both cases, the default value of \texttt{applyTo} is \texttt{cell}, - and does not need to be specified. + In both cases, the default value of \texttt{applyTo} is \texttt{cell}, and does not need + to be specified. - We may also specify the \texttt{applyTo} field as \texttt{row}, a - demonstration of which is given in \cref{lst:dontMeasure5}; upon running + We may also specify the \texttt{applyTo} field as \texttt{row}, a demonstration of which + is given in \cref{lst:dontMeasure5}; upon running \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tabular-DM.tex -l=dontMeasure5.yaml @@ -727,9 +727,9 @@ latexindent.pl tabular-DM.tex -l=dontMeasure5.yaml \cmhlistingsfromfile{demonstrations/dontMeasure5.yaml}[yaml-TCB]{\texttt{dontMeasure5.yaml}}{lst:dontMeasure5} \end{cmhtcbraster} - Finally, the \texttt{applyTo} field can be specified as \texttt{row}, - together with a \texttt{regex} expression. For example, for the settings given - in \cref{lst:dontMeasure6}, upon running + Finally, the \texttt{applyTo} field can be specified as \texttt{row}, together with a + \texttt{regex} expression. For example, for the settings given in + \cref{lst:dontMeasure6}, upon running \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml @@ -744,11 +744,13 @@ latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml \end{cmhtcbraster} \subsubsection{lookForAlignDelims: the delimiterRegEx and delimiterJustification feature}\label{sec:delimiter-reg-ex} + The delimiter alignment% - \announce{2020-03-21}{delimiterRegEx feature} will, by - default, align code blocks at the ampersand character. The behaviour is controlled by the - \texttt{delimiterRegEx} field within \texttt{lookForAlignDelims}; the default value is - \lstinline3'(?<!\\)(&)'3, which can be read as: \emph{an ampersand, as long as it is not immediately preceeded by a backslash}. + \announce{2020-03-21}{delimiterRegEx feature} will, by default, align code blocks at the + ampersand character. The behaviour is controlled by the \texttt{delimiterRegEx} field + within \texttt{lookForAlignDelims}; the default value is + \lstinline3'(?<!\\)(&)'3, which can be read as: \emph{an ampersand, as long as it is not + immediately preceeded by a backslash}. \index{warning!capturing parenthesis for lookForAlignDelims} \index{capturing parenthesis (regex)} \index{regular expressions!capturing parenthesis} @@ -770,8 +772,8 @@ latexindent.pl tabular-DM.tex -l=dontMeasure6.yaml \end{cmhtcbraster} Let's say that we wish to align the code at either the \lstinline!\=! or - \lstinline!\>!. We employ the settings given in \cref{lst:delimiterRegEx1} and run - the command + \lstinline!\>!. We employ the settings given in \cref{lst:delimiterRegEx1} and + run the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tabbing.tex -l=delimiterRegEx1.yaml @@ -787,9 +789,9 @@ latexindent.pl tabbing.tex -l=delimiterRegEx1.yaml \begin{itemize} \item in \cref{lst:tabbing-mod1} the code has been aligned, as intended, at both the \lstinline!\=! and \lstinline!\>!; - \item in \cref{lst:delimiterRegEx1} we have heeded the warning and captured the expression using - grouping parenthesis, specified a backslash using \lstinline!\\! and said that - it must be followed by either \lstinline!=! or \lstinline!>!. + \item in \cref{lst:delimiterRegEx1} we have heeded the warning and captured the expression + using grouping parenthesis, specified a backslash using \lstinline!\\! and said that it + must be followed by either \lstinline!=! or \lstinline!>!. \end{itemize} We can explore \texttt{delimiterRegEx} a little further using the settings in \cref{lst:delimiterRegEx2} and run the command @@ -808,8 +810,8 @@ latexindent.pl tabbing.tex -l=delimiterRegEx2.yaml Of course, the other lookForAlignDelims options can be used alongside the \texttt{delimiterRegEx}; regardless of the type of delimiter being used (ampersand or - anything else), the fields from \vref{lst:aligndelims:advanced} remain the same; for example, - using the settings in \cref{lst:delimiterRegEx3}, and running + anything else), the fields from \vref{lst:aligndelims:advanced} remain the same; for + example, using the settings in \cref{lst:delimiterRegEx3}, and running \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tabbing.tex -l=delimiterRegEx3.yaml @@ -823,8 +825,8 @@ latexindent.pl tabbing.tex -l=delimiterRegEx3.yaml It is possible that delimiters specified within \texttt{delimiterRegEx} can be of different lengths. Consider the file in \cref{lst:tabbing1}, and associated YAML in - \cref{lst:delimiterRegEx4}. Note that the \cref{lst:delimiterRegEx4} specifies the option for - the delimiter to be either + \cref{lst:delimiterRegEx4}. Note that the \cref{lst:delimiterRegEx4} specifies the option + for the delimiter to be either \lstinline!#! or \lstinline!\>!, \emph{which are different lengths}. Upon running the command \index{switches!-l demonstration} @@ -844,10 +846,10 @@ latexindent.pl tabbing1.tex -l=delimiterRegEx4.yaml -o=+-mod4 \cmhlistingsfromfile{demonstrations/delimiterRegEx4.yaml}[yaml-TCB]{\texttt{delimiterRegEx4.yaml}}{lst:delimiterRegEx4} \end{cmhtcbraster} - You can set the \emph{delimiter} justification as either \texttt{left} (default) - or \texttt{right}, which will only have effect when delimiters in the same - column have different lengths. Using the settings in \cref{lst:delimiterRegEx5} and running - the command + You can set the \emph{delimiter} justification as either \texttt{left} (default) or + \texttt{right}, which will only have effect when delimiters in the same column have + different lengths. Using the settings in \cref{lst:delimiterRegEx5} and running the + command \index{switches!-l demonstration} \index{switches!-o demonstration} \begin{commandshell} @@ -861,15 +863,15 @@ latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5 \cmhlistingsfromfile{demonstrations/delimiterRegEx5.yaml}[yaml-TCB]{\texttt{delimiterRegEx5.yaml}}{lst:delimiterRegEx5} \end{cmhtcbraster} - Note that in \cref{lst:tabbing1-mod5} the second set of delimiters have been - \emph{right aligned} -- it is quite subtle! + Note that in \cref{lst:tabbing1-mod5} the second set of delimiters have been \emph{right + aligned} -- it is quite subtle! \subsection{Indent after items, specials and headings} \yamltitle{indentAfterItems}*{fields} The environment names specified in \texttt{indentAfterItems} tell \texttt{latexindent.pl} - to look for \lstinline!\item! commands; if these switches are set to - \texttt{1} then indentation will be performed so as indent the code after - each \texttt{item}. A demonstration is given in \cref{lst:itemsbefore,lst:itemsafter} + to look for \lstinline!\item! commands; if these switches are set to \texttt{1} then + indentation will be performed so as indent the code after each \texttt{item}. A + demonstration is given in \cref{lst:itemsbefore,lst:itemsafter} \begin{cmhtcbraster}[raster columns=3, raster left skip=-3.5cm, @@ -881,12 +883,11 @@ latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5 \end{cmhtcbraster} \yamltitle{itemNames}*{fields} - If you have your own \texttt{item} commands (perhaps you prefer to use - \texttt{myitem}, for example) then you can put populate them in - \texttt{itemNames}. For example, users of the \texttt{exam} document class - might like to add \texttt{parts} to \texttt{indentAfterItems} and - \texttt{part} to \texttt{itemNames} to their user settings (see - \vref{sec:indentconfig} for details of how to configure user settings, and + If you have your own \texttt{item} commands (perhaps you prefer to use \texttt{myitem}, + for example) then you can put populate them in \texttt{itemNames}. For example, users of + the \texttt{exam} document class might like to add \texttt{parts} to + \texttt{indentAfterItems} and \texttt{part} to \texttt{itemNames} to their user settings + (see \vref{sec:indentconfig} for details of how to configure user settings, and \vref{lst:mysettings} \\ in particular \label{page:examsettings}.) \cmhlistingsfromfile[style=itemNames]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{itemNames}}{lst:itemNames} @@ -894,41 +895,43 @@ latexindent.pl tabbing1.tex -l=delimiterRegEx5.yaml -o=+-mod5 \yamltitle{specialBeginEnd}*{fields}\label{yaml:specialBeginEnd} The fields specified \index{specialBeginEnd!introduction}% - \announce{2017-08-21}*{specialBeginEnd} in - \texttt{specialBeginEnd} are, in their default state, focused on math mode begin and end - statements, but there is no requirement for this to be the case; \cref{lst:specialBeginEnd} - shows the default settings of \texttt{specialBeginEnd}. + \announce{2017-08-21}*{specialBeginEnd} in \texttt{specialBeginEnd} are, in their default + state, focused on math mode begin and end statements, but there is no requirement for + this to be the case; \cref{lst:specialBeginEnd} shows the default settings of + \texttt{specialBeginEnd}. \index{specialBeginEnd!default settings} \cmhlistingsfromfile[style=specialBeginEnd]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeginEnd}}{lst:specialBeginEnd} - The field \texttt{displayMath} represents \lstinline!\[...\]!, - \texttt{inlineMath} represents + The field \texttt{displayMath} represents \lstinline!\[...\]!, \texttt{inlineMath} + represents \lstinline!$...$! and \texttt{displayMathTex} represents \lstinline!$$...$$!. You can, of course, rename these in your own YAML files (see \vref{sec:localsettings}); indeed, you might like to set up your own special begin and end statements. - A demonstration of the before-and-after results are shown in \cref{lst:specialbefore,lst:specialafter}. + A demonstration of the before-and-after results are shown in + \cref{lst:specialbefore,lst:specialafter}. \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/special1.tex}{\texttt{special1.tex} before}{lst:specialbefore} \cmhlistingsfromfile{demonstrations/special1-default.tex}{\texttt{special1.tex} default output}{lst:specialafter} \end{cmhtcbraster} - For each field, \texttt{lookForThis} is set to \texttt{1} by default, - which means that \texttt{latexindent.pl} will look for this pattern; you can tell - \texttt{latexindent.pl} not to look for the pattern, by setting \texttt{lookForThis} - to \texttt{0}. + For each field, \texttt{lookForThis} is set to \texttt{1} by default, which means that + \texttt{latexindent.pl} will look for this pattern; you can tell \texttt{latexindent.pl} + not to look for the pattern, by setting \texttt{lookForThis} to \texttt{0}. There are% - \announce{2017-08-21}{specialBeforeCommand} examples in which it - is advantageous to search for \texttt{specialBeginEnd} fields \emph{before} - searching for commands, and the \texttt{specialBeforeCommand} switch controls this behaviour. - For example, consider the file shown in \cref{lst:specialLRbefore}. + \announce{2017-08-21}{specialBeforeCommand} + examples in which it is advantageous to search for \texttt{specialBeginEnd} fields + \emph{before} searching for commands, and the \texttt{specialBeforeCommand} switch + controls this behaviour. For example, consider the file shown in + \cref{lst:specialLRbefore}. \cmhlistingsfromfile{demonstrations/specialLR.tex}{\texttt{specialLR.tex}}{lst:specialLRbefore} - Now consider the YAML files shown in \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml} + Now consider the YAML files shown in + \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml} \index{specialBeginEnd!searching for special before commands} \begin{cmhtcbraster} @@ -944,7 +947,8 @@ latexindent.pl specialLR.tex -l=specialsLeftRight.yaml latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml \end{commandshell} \end{widepage} - we receive the respective outputs in \cref{lst:specialLR-comm-first-tex,lst:specialLR-special-first-tex}. + we receive the respective outputs in + \cref{lst:specialLR-comm-first-tex,lst:specialLR-special-first-tex}. \begin{minipage}{.49\linewidth} \cmhlistingsfromfile{demonstrations/specialLR-comm-first.tex}{\texttt{specialLR.tex} using \cref{lst:specialsLeftRight-yaml}}{lst:specialLR-comm-first-tex} @@ -958,21 +962,23 @@ latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml \begin{itemize} \item \cref{lst:specialLR-comm-first-tex} the \lstinline!\left! has been treated as a \emph{command}, with one optional argument; - \item \cref{lst:specialLR-special-first-tex} the \texttt{specialBeginEnd} pattern in \cref{lst:specialsLeftRight-yaml} + \item \cref{lst:specialLR-special-first-tex} the \texttt{specialBeginEnd} pattern in + \cref{lst:specialsLeftRight-yaml} has been obeyed because \cref{lst:specialBeforeCommand-yaml} specifies that the \texttt{specialBeginEnd} should be sought \emph{before} commands. \end{itemize} You can,optionally, specify% - \announce{2018-04-27}{update to specialBeginEnd} the - \texttt{middle} field for anything that you specify in \texttt{specialBeginEnd}. - For example, let's consider the \texttt{.tex} file in \cref{lst:special2}. + \announce{2018-04-27}{update to specialBeginEnd} the \texttt{middle} field for anything that you specify in + \texttt{specialBeginEnd}. For example, let's consider the \texttt{.tex} file in + \cref{lst:special2}. \index{specialBeginEnd!middle} \index{specialBeginEnd!IfElsFi example} \cmhlistingsfromfile{demonstrations/special2.tex}{\texttt{special2.tex}}{lst:special2} - Upon saving the YAML settings in \cref{lst:middle-yaml,lst:middle1-yaml} and running the commands + Upon saving the YAML settings in \cref{lst:middle-yaml,lst:middle1-yaml} and running the + commands \index{switches!-l demonstration} \begin{commandshell} latexindent.pl special2.tex -l=middle @@ -992,20 +998,19 @@ latexindent.pl special2.tex -l=middle1 We note that: \begin{itemize} - \item in \cref{lst:special2-mod1} the bodies of each of the \texttt{Elsif} statements - have been indented appropriately; - \item the \texttt{Else} statement has \emph{not} been indented - appropriately in \cref{lst:special2-mod1} -- read on! - \item we have specified multiple settings for the \texttt{middle} field using the - syntax demonstrated in \cref{lst:middle1-yaml} so that the body of the - \texttt{Else} statement has been indented appropriately in - \cref{lst:special2-mod2}. + \item in \cref{lst:special2-mod1} the bodies of each of the \texttt{Elsif} statements have been + indented appropriately; + \item the \texttt{Else} statement has \emph{not} been indented appropriately in + \cref{lst:special2-mod1} -- read on! + \item we have specified multiple settings for the \texttt{middle} field using the syntax + demonstrated in \cref{lst:middle1-yaml} so that the body of the \texttt{Else} statement + has been indented appropriately in \cref{lst:special2-mod2}. \end{itemize} You may% - \announce{2018-08-13}{specialBeginEnd verbatim} specify fields in - \texttt{specialBeginEnd} to be treated as verbatim code blocks by changing - \texttt{lookForThis} to be \texttt{verbatim}. + \announce{2018-08-13}{specialBeginEnd verbatim} + specify fields in \texttt{specialBeginEnd} to be treated as verbatim code blocks by + changing \texttt{lookForThis} to be \texttt{verbatim}. \index{verbatim!specialBeginEnd} For example, beginning with the code in \cref{lst:special3-mod1} and the YAML in @@ -1022,14 +1027,13 @@ latexindent.pl special3.tex -l=special-verb1 \cmhlistingsfromfile{demonstrations/special3-mod1.tex}{\texttt{special3.tex} and output using \cref{lst:special-verb1-yaml}}{lst:special3-mod1} \end{cmhtcbraster} - We can combine the \texttt{specialBeginEnd} with the \texttt{lookForAlignDelims} feature. We - begin with the code in \cref{lst:special-align}. + We can combine the \texttt{specialBeginEnd} with the \texttt{lookForAlignDelims} feature. + We begin with the code in \cref{lst:special-align}. \cmhlistingsfromfile{demonstrations/special-align.tex}{\texttt{special-align.tex}}{lst:special-align} - Let's assume that our goal is to align the code at the \texttt{edge} and - \texttt{node} text; we employ the code given in \cref{lst:edge-node1} and run - the command + Let's assume that our goal is to align the code at the \texttt{edge} and \texttt{node} + text; we employ the code given in \cref{lst:edge-node1} and run the command \index{switches!-l demonstration} \index{switches!-o demonstration} \begin{commandshell} @@ -1050,8 +1054,8 @@ latexindent.pl special-align.tex -l edge-node1.yaml -o=+-mod1 \end{cmhtcbraster} The output in \cref{lst:special-align-mod1} is not quite ideal. We can tweak the settings - within \cref{lst:edge-node1} in order to improve the output; in particular, we employ - the code in \cref{lst:edge-node2} and run the command + within \cref{lst:edge-node1} in order to improve the output; in particular, we employ the + code in \cref{lst:edge-node2} and run the command \index{switches!-l demonstration} \index{switches!-o demonstration} \index{regular expressions!uppercase alph A-Z} @@ -1064,41 +1068,42 @@ latexindent.pl special-align.tex -l edge-node2.yaml -o=+-mod2 \index{regular expressions!horizontal space \textbackslash{h}} \begin{cmhtcbraster}[ raster left skip=-3.5cm,] - \cmhlistingsfromfile*{demonstrations/edge-node2.yaml}[yaml-TCB]{\texttt{edge-node2.yaml}}{lst:edge-node2} + \cmhlistingsfromfile{demonstrations/edge-node2.yaml}[yaml-TCB]{\texttt{edge-node2.yaml}}{lst:edge-node2} \cmhlistingsfromfile{demonstrations/special-align-mod2.tex}{\texttt{special-align.tex} using \cref{lst:edge-node2}}{lst:special-align-mod2} \end{cmhtcbraster} The \texttt{lookForThis} field can be considered optional;% - \announce*{2021-06-19}*{lookForThis optional for specialBeginEnd} by default, it is - assumed to be 1, which is demonstrated in \cref{lst:edge-node2}. + \announce{2021-06-19}*{lookForThis optional for specialBeginEnd} by default, it is assumed to be 1, which is demonstrated in + \cref{lst:edge-node2}. \yamltitle{indentAfterHeadings}*{fields} This field enables the user to specify indentation rules that take effect after heading commands such as \lstinline!\part!, \lstinline!\chapter!, \lstinline!\section!, \lstinline!\subsection*!, or indeed any user-specified command - written in this field.\footnote{There is a slight - difference in interface for this field when comparing Version 2.2 to Version 3.0; see \vref{app:differences} for details.} + written in this field.\footnote{There is a slight difference in interface for this field + when comparing Version 2.2 to Version 3.0; see \vref{app:differences} for details.} \cmhlistingsfromfile[style=indentAfterHeadings]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterHeadings}}{lst:indentAfterHeadings} - The default settings do \emph{not} place indentation after a heading, but - you can easily switch them on by changing \texttt{indentAfterThisHeading} from 0 to 1. The - \texttt{level} field tells \texttt{latexindent.pl} the hierarchy of the heading - structure in your document. You might, for example, like to have both - \texttt{section} and \texttt{subsection} set with \texttt{level: 3} - because you do not want the indentation to go too deep. + The default settings do \emph{not} place indentation after a heading, but you can easily + switch them on by changing \texttt{indentAfterThisHeading} from 0 to 1. The + \texttt{level} field tells \texttt{latexindent.pl} the hierarchy of the heading structure + in your document. You might, for example, like to have both \texttt{section} and + \texttt{subsection} set with \texttt{level: 3} because you do not want the indentation to + go too deep. You can add any of your own custom heading commands to this field, specifying the - \texttt{level} as appropriate. You can also specify your own indentation in - \texttt{indentRules} (see \vref{sec:noadd-indent-rules}); you will find the default \texttt{indentRules} contains + \texttt{level} as appropriate. You can also specify your own indentation in + \texttt{indentRules} (see \vref{sec:noadd-indent-rules}); you will find the default + \texttt{indentRules} contains \lstinline!chapter: " "! which tells \texttt{latexindent.pl} simply to use a space - character after \texttt{\chapter} headings (once \texttt{indent} is set to - \texttt{1} for \texttt{chapter}). + character after \texttt{\chapter} headings (once \texttt{indent} is set to \texttt{1} for + \texttt{chapter}). For example, assuming that you have the code in \cref{lst:headings1yaml} saved into - \texttt{headings1.yaml}, and that you have the text from \cref{lst:headings1} saved - into \texttt{headings1.tex}. + \texttt{headings1.yaml}, and that you have the text from \cref{lst:headings1} saved into + \texttt{headings1.tex}. \begin{cmhtcbraster} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings1.yaml}[yaml-TCB]{\texttt{headings1.yaml}}{lst:headings1yaml} @@ -1120,9 +1125,8 @@ latexindent.pl headings1.tex -l=headings1.yaml \cmhlistingsfromfile[showtabs=true]{demonstrations/headings1-mod2.tex}{\texttt{headings1.tex} second modification}{lst:headings1-mod2} \end{minipage} - Now say that you modify the \texttt{YAML} from \cref{lst:headings1yaml} so that - the \texttt{paragraph} \texttt{level} is \texttt{1}; after - running + Now say that you modify the \texttt{YAML} from \cref{lst:headings1yaml} so that the + \texttt{paragraph} \texttt{level} is \texttt{1}; after running \index{switches!-l demonstration} \begin{commandshell} latexindent.pl headings1.tex -l=headings1.yaml @@ -1135,10 +1139,10 @@ latexindent.pl headings1.tex -l=headings1.yaml \yamltitle{maximumIndentation}*{horizontal space} You can control the maximum indentation given to your file by% - \announce{2017-08-21}{maximumIndentation} specifying the - \texttt{maximumIndentation} field as horizontal space (but \emph{not} including - tabs). This feature uses the \texttt{Text::Tabs} module \cite{texttabs}, and - is \emph{off} by default. + \announce{2017-08-21}{maximumIndentation} specifying + the \texttt{maximumIndentation} field as horizontal space (but \emph{not} including + tabs). This feature uses the \texttt{Text::Tabs} module \cite{texttabs}, and is + \emph{off} by default. For example, consider the example shown in \cref{lst:mult-nested} together with the default output shown in \cref{lst:mult-nested-default}. @@ -1161,14 +1165,16 @@ latexindent.pl mult-nested.tex -l=max-indentation1 \cmhlistingsfromfile[showspaces=true]{demonstrations/mult-nested-max-ind1.tex}{\texttt{mult-nested.tex} using \cref{lst:max-indentation1yaml}}{lst:mult-nested-max-ind1} \end{cmhtcbraster} - Comparing the output in \cref{lst:mult-nested-default,lst:mult-nested-max-ind1} we notice that the (default) tabs of - indentation have been replaced by a single space. + Comparing the output in \cref{lst:mult-nested-default,lst:mult-nested-max-ind1} we notice + that the (default) tabs of indentation have been replaced by a single space. In general, when using the \texttt{maximumIndentation} feature, any leading tabs will be - replaced by equivalent spaces except, of course, those found in \texttt{verbatimEnvironments} (see \vref{lst:verbatimEnvironments}) - or \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}). + replaced by equivalent spaces except, of course, those found in + \texttt{verbatimEnvironments} (see \vref{lst:verbatimEnvironments}) or + \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}). \subsection{The code blocks known latexindent.pl}\label{subsubsec:code-blocks} + As of Version 3.0, \texttt{latexindent.pl} processes documents using code blocks; each of these are shown in \cref{tab:code-blocks}. \index{regular expressions!uppercase alph A-Z} @@ -1247,5 +1253,6 @@ mand arg text \end{table} We will refer to these code blocks in what follows.% - \announce{2019-07-13}{fine tuning of code blocks} Note that the fine tuning of the definition of the code blocks - detailed in \cref{tab:code-blocks} is discussed in \vref{sec:finetuning}. + \announce{2019-07-13}{fine tuning of code blocks} Note that the fine tuning of the + definition of the code blocks detailed in \cref{tab:code-blocks} is discussed in + \vref{sec:finetuning}. diff --git a/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex b/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex index 18459edcda4..0c8e12c154a 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex @@ -4,15 +4,17 @@ want to try the script if you don't much like the results. You might also like to watch the video demonstration I made on youtube \cite{cmh:videodemo} - As you look at \crefrange{lst:filecontentsbefore}{lst:pstricksafter}, remember that \texttt{latexindent.pl} is just - following its rules, and there is nothing particular about these code snippets. All of - the rules can be modified so that you can personalise your indentation scheme. + As you look at \crefrange{lst:filecontentsbefore}{lst:pstricksafter}, remember that + \texttt{latexindent.pl} is just following its rules, and there is nothing particular + about these code snippets. All of the rules can be modified so that you can personalise + your indentation scheme. - In each of the samples given in \crefrange{lst:filecontentsbefore}{lst:pstricksafter} the `before' case is a `worst case - scenario' with no effort to make indentation. The `after' result would be the same, - regardless of the leading white space at the beginning of each line which is stripped by - \texttt{latexindent.pl} (unless a \texttt{verbatim}-like - environment or \texttt{noIndentBlock} is specified -- more on this in \cref{sec:defuseloc}). + In each of the samples given in \crefrange{lst:filecontentsbefore}{lst:pstricksafter} the + `before' case is a `worst case scenario' with no effort to make indentation. The `after' + result would be the same, regardless of the leading white space at the beginning of each + line which is stripped by \texttt{latexindent.pl} (unless a \texttt{verbatim}-like + environment or \texttt{noIndentBlock} is specified -- more on this in + \cref{sec:defuseloc}). \begin{widepage} \centering diff --git a/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex b/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex index 0510e8e66c5..669bff5737c 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex @@ -2,8 +2,9 @@ \section{Fine tuning}\label{sec:finetuning} \texttt{latexindent.pl} operates by looking for the code blocks detailed in \vref{tab:code-blocks}. - \announce{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the details of such code blocks - is controlled by the \texttt{fineTuning} field, detailed in \cref{lst:fineTuning}. + \announce{2019-07-13}{details of fine tuning of code blocks} The fine tuning of the + details of such code blocks is controlled by the \texttt{fineTuning} field, detailed in + \cref{lst:fineTuning}. This field is for those that would like to peek under the bonnet/hood and make some fine tuning to \texttt{latexindent.pl}'s operating. @@ -29,7 +30,7 @@ \end{warning} \begin{widepage} - \cmhlistingsfromfile*[style=fineTuning]*{../defaultSettings.yaml}[width=.95\linewidth,before=\centering,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning} + \cmhlistingsfromfile[style=fineTuning]*{../defaultSettings.yaml}[width=.95\linewidth,before=\centering,yaml-TCB]{\texttt{fineTuning}}{lst:fineTuning} \end{widepage} The fields given in \cref{lst:fineTuning} are all \emph{regular expressions}. This manual @@ -38,8 +39,8 @@ We make the following comments with reference to \cref{lst:fineTuning}: \begin{enumerate} - \item the \texttt{environments:name} field details that the \emph{name} of an - environment can contain: + \item the \texttt{environments:name} field details that the \emph{name} of an environment can + contain: \begin{enumerate} \item \texttt{a-z} lower case letters \item \texttt{A-Z} upper case letters @@ -50,25 +51,23 @@ \item \lstinline!\! backslashes \end{enumerate} \index{regular expressions!at least one +} - The \texttt{+} at the end means \emph{at least one} of the above - characters. + The \texttt{+} at the end means \emph{at least one} of the above characters. \item the \texttt{ifElseFi:name} field: \begin{enumerate} \item \lstinline^@?^ means that it \emph{can possibly} begin with \lstinline^@^ \item followed by \texttt{if} - \item followed by 0 or more characters from \texttt{a-z}, \texttt{A-Z} and - \texttt{@} - \item the \texttt{?} the end means \emph{non-greedy}, which means `stop the - match as soon as possible' + \item followed by 0 or more characters from \texttt{a-z}, \texttt{A-Z} and \texttt{@} + \item the \texttt{?} the end means \emph{non-greedy}, which means `stop the match as soon as + possible' \end{enumerate} \item the \texttt{keyEqualsValuesBracesBrackets} contains some interesting syntax: \begin{enumerate} \item \lstinline!|! means `or' \item \lstinline^(?:(?<!\\)\{)^ the \lstinline^(?:...)^ uses a \emph{non-capturing} group -- you don't necessarily need to worry about what this means, but just know that for the - \texttt{fineTuning} feature you should only ever use \emph{non}-capturing - groups, and \emph{not} capturing groups, which are simply + \texttt{fineTuning} feature you should only ever use \emph{non}-capturing groups, and + \emph{not} capturing groups, which are simply \lstinline!(...)! \item \lstinline^(?<!\\)\{)^ means a \lstinline^{^ but it can \emph{not} be immediately preceded by a \lstinline!\! @@ -90,14 +89,14 @@ \texttt{DBSFinishesWithLineBreak} polyswitches surrounding double back slashes, see \vref{subsec:dbs} \item \texttt{comma} is in relation to the \texttt{CommaStartsOnOwnLine} and - \texttt{CommaFinishesWithLineBreak} polyswitches surrounding commas in optional and mandatory - arguments; see \vref{tab:poly-switch-mapping} + \texttt{CommaFinishesWithLineBreak} polyswitches surrounding commas in optional and + mandatory arguments; see \vref{tab:poly-switch-mapping} \end{enumerate} \end{enumerate} It is not obvious from \cref{lst:fineTuning}, but each of the \texttt{follow}, - \texttt{before} and \texttt{between} fields allow trailing comments, line - breaks, and horizontal spaces between each character. + \texttt{before} and \texttt{between} fields allow trailing comments, line breaks, and + horizontal spaces between each character. \begin{example} As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its @@ -179,15 +178,15 @@ latexindent.pl -m -y='modifyLineBreaks:oneSentencePerLine:manipulateSentences: 1 We can tweak the \texttt{fineTuning} for how trailing comments are classified. For motivation, let's consider the code given in \cref{lst:finetuning4} - \cmhlistingsfromfile*{demonstrations/finetuning4.tex}{\texttt{finetuning4.tex}}{lst:finetuning4} + \cmhlistingsfromfile{demonstrations/finetuning4.tex}{\texttt{finetuning4.tex}}{lst:finetuning4} We will compare the settings given in \cref{lst:href1,lst:href2}. \begin{cmhtcbraster}[raster column skip=.01\linewidth, raster left skip=0cm, raster right skip=-0.5cm,] - \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/href1.yaml}[MLB-TCB]{\texttt{href1.yaml}}{lst:href1} - \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/href2.yaml}[MLB-TCB]{\texttt{href2.yaml}}{lst:href2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/href1.yaml}[MLB-TCB]{\texttt{href1.yaml}}{lst:href1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/href2.yaml}[MLB-TCB]{\texttt{href2.yaml}}{lst:href2} \end{cmhtcbraster} Upon running the following commands @@ -198,16 +197,16 @@ latexindent.pl -m finetuning4.tex -o=+-mod2 -l=href2 we receive the respective output in \cref{lst:finetuning4-mod1,lst:finetuning4-mod2}. \begin{widepage} - \cmhlistingsfromfile*{demonstrations/finetuning4-mod1.tex}{\texttt{finetuning4.tex} using \cref{lst:href1}}{lst:finetuning4-mod1} + \cmhlistingsfromfile{demonstrations/finetuning4-mod1.tex}{\texttt{finetuning4.tex} using \cref{lst:href1}}{lst:finetuning4-mod1} - \cmhlistingsfromfile*{demonstrations/finetuning4-mod2.tex}{\texttt{finetuning4.tex} using \cref{lst:href2}}{lst:finetuning4-mod2} + \cmhlistingsfromfile{demonstrations/finetuning4-mod2.tex}{\texttt{finetuning4.tex} using \cref{lst:href2}}{lst:finetuning4-mod2} \end{widepage} We note that in: \begin{itemize} - \item \cref{lst:finetuning4-mod1} the trailing comments are assumed to be everything following the - first comment symbol, which has meant that everything following it has been moved to the - end of the line; this is undesirable, clearly! + \item \cref{lst:finetuning4-mod1} the trailing comments are assumed to be everything following + the first comment symbol, which has meant that everything following it has been moved to + the end of the line; this is undesirable, clearly! \item \cref{lst:finetuning4-mod2} has fine-tuned the trailing comment matching, and says that \% cannot be immediately preceeded by the words `Handbook', `for' or `Spoken', which means that @@ -224,7 +223,7 @@ latexindent.pl -m finetuning4.tex -o=+-mod3 -l=href3 then we receive the same output given in \cref{lst:finetuning4-mod2}; see also \texttt{paragraphsStopAt} in \vref{lst:paragraphsStopAt}. - \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/href3.yaml}[MLB-TCB]{\texttt{href3.yaml}}{lst:href3} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/href3.yaml}[MLB-TCB]{\texttt{href3.yaml}}{lst:href3} With reference to the \texttt{body} field in \cref{lst:href3}, we note that the \texttt{body} field can be interpreted as: the fewest number of zero or more characters that are not right braces. This diff --git a/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex b/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex index ba35a043280..42553e037a4 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex @@ -2,36 +2,36 @@ \section{How to use the script} \texttt{latexindent.pl} ships as part of the \TeX Live distribution for Linux and Mac users; \texttt{latexindent.exe} ships as part of the \TeX Live and - MiK\TeX{} distributions for Windows users. These files are also available - from github \cite{latexindent-home} should you wish to use them without a - \TeX{} distribution; in this case, you may like to read - \vref{sec:updating-path} which details how the \texttt{path} variable can be - updated. + MiK\TeX{} distributions for Windows users. These files are also available from github + \cite{latexindent-home} should you wish to use them without a \TeX{} distribution; in + this case, you may like to read \vref{sec:updating-path} which details how the + \texttt{path} variable can be updated. In what follows, we will always refer to \texttt{latexindent.pl}, but depending on your operating system and preference, you might substitute \texttt{latexindent.exe} or simply \texttt{latexindent}. There are two ways to use \texttt{latexindent.pl}: from the command line, and using - \texttt{arara}; we discuss these in \cref{sec:commandline} and - \cref{sec:arara} respectively. We will discuss how to change the settings and - behaviour of the script in \vref{sec:defuseloc}. + \texttt{arara}; we discuss these in \cref{sec:commandline} and \cref{sec:arara} + respectively. We will discuss how to change the settings and behaviour of the script in + \vref{sec:defuseloc}. \texttt{latexindent.pl} ships with \texttt{latexindent.exe} for Windows users, so that you can use the script with or without a Perl distribution. If you plan to - use \texttt{latexindent.pl} (i.e, the original Perl script) then you will need a few standard Perl modules -- see - \vref{sec:requiredmodules} for details;% - \announce{2018-01-13}{perl module installer helper script} in particular, note that a module installer helper script is - shipped with \texttt{latexindent.pl}. + use \texttt{latexindent.pl} (i.e, the original Perl script) then you will need a few + standard Perl modules -- see \vref{sec:requiredmodules} for + details;% + \announce{2018-01-13}{perl module installer helper script} in particular, note that a module installer helper script is shipped with + \texttt{latexindent.pl}. \subsection{From the command line}\label{sec:commandline} \texttt{latexindent.pl} has a number of different switches/flags/options, which can be combined in any way that you like, either in short or long form as detailed below. - \texttt{latexindent.pl} produces a \texttt{.log} file, \texttt{indent.log}, - every time it is run; the name of the log file can be customised, but we will refer to - the log file as \texttt{indent.log} throughout this document. There is a base of - information that is written to \texttt{indent.log}, but other additional information - will be written depending on which of the following options are used. + \texttt{latexindent.pl} produces a \texttt{.log} file, \texttt{indent.log}, every time it + is run; the name of the log file can be customised, but we will refer to the log file as + \texttt{indent.log} throughout this document. There is a base of information that is + written to \texttt{indent.log}, but other additional information will be written + depending on which of the following options are used. \flagbox{-v, --version} \index{switches!-v, --version definition and details} @@ -55,8 +55,8 @@ latexindent.pl myfile.tex \end{commandshell} This will operate on \texttt{myfile.tex}, but will simply output to your terminal; - \texttt{myfile.tex} will not be changed by \texttt{latexindent.pl} in any way using - this command. + \texttt{myfile.tex} will not be changed by \texttt{latexindent.pl} in any way using this + command. \flagbox{-w, --overwrite} \index{switches!-w, --overwrite definition and details} @@ -86,44 +86,43 @@ latexindent.pl --outputfile=output.tex myfile.tex latexindent.pl --outputfile output.tex myfile.tex \end{commandshell} - This will indent \texttt{myfile.tex} and output it to \texttt{output.tex}, - overwriting it (\texttt{output.tex}) if it already exists\footnote{Users of version 2.* should - note the subtle change in syntax}. Note - that if \texttt{latexindent.pl} is called with both the \texttt{-w} and - \texttt{-o} switches, then \texttt{-w} will be ignored and - \texttt{-o} will take priority (this seems safer than the other way round). + This will indent \texttt{myfile.tex} and output it to \texttt{output.tex}, overwriting it + (\texttt{output.tex}) if it already exists\footnote{Users of version 2.* should note the + subtle change in syntax}. Note that if \texttt{latexindent.pl} is called with both the + \texttt{-w} and \texttt{-o} switches, then \texttt{-w} will be ignored and \texttt{-o} + will take priority (this seems safer than the other way round). Note that using \texttt{-o} as above is equivalent to using \begin{commandshell} latexindent.pl myfile.tex > output.tex \end{commandshell} - You can call the \texttt{-o} switch with the name of the output file - \emph{without} an extension; in% - \announce{2017-06-25}{upgrade to -o switch} this case, \texttt{latexindent.pl} will use the extension from the - original file. For example, the following two calls to \texttt{latexindent.pl} are - equivalent: + You can call the \texttt{-o} switch with the name of the output file \emph{without} an + extension; in% + \announce{2017-06-25}{upgrade to -o switch} + this case, \texttt{latexindent.pl} will use the extension from the original file. For + example, the following two calls to \texttt{latexindent.pl} are equivalent: \begin{commandshell} latexindent.pl myfile.tex -o=output latexindent.pl myfile.tex -o=output.tex \end{commandshell} - You can call the \texttt{-o} switch using a \texttt{+} symbol at - the beginning; this will% + You can call the \texttt{-o} switch using a \texttt{+} symbol at the beginning; this + will% \announce{2017-06-25}{+ sign in o switch} - concatenate the name of the input file and the text given to the \texttt{-o} - switch. For example, the following two calls to \texttt{latexindent.pl} are equivalent: + concatenate the name of the input file and the text given to the \texttt{-o} switch. For + example, the following two calls to \texttt{latexindent.pl} are equivalent: \begin{commandshell} latexindent.pl myfile.tex -o=+new latexindent.pl myfile.tex -o=myfilenew.tex \end{commandshell} - You can call the \texttt{-o} switch using a \texttt{++} symbol at - the end of the name% + You can call the \texttt{-o} switch using a \texttt{++} symbol at the end of the + name% \announce{2017-06-25}{++ in o switch} of your output file; this tells \texttt{latexindent.pl} to search successively for the name of your - output file concatenated with $0, 1, \ldots$ while the name of the output file - exists. For example, + output file concatenated with $0, 1, \ldots$ while the name of the output file exists. + For example, \begin{commandshell} latexindent.pl myfile.tex -o=output++ \end{commandshell} @@ -137,17 +136,16 @@ latexindent.pl myfile.tex -o=++ tells it to output to \texttt{myfile0.tex}, but if it exists then output to \texttt{myfile1.tex} and so on. - The \texttt{+} and \texttt{++} feature of the - \texttt{-o} switch can be combined; for example, calling + The \texttt{+} and \texttt{++} feature of the \texttt{-o} switch can be combined; for + example, calling \begin{commandshell} latexindent.pl myfile.tex -o=+out++ \end{commandshell} - tells \texttt{latexindent.pl} to output to \texttt{myfileout0.tex}, but if it exists, then - try \texttt{myfileout1.tex}, and so on. + tells \texttt{latexindent.pl} to output to \texttt{myfileout0.tex}, but if it exists, + then try \texttt{myfileout1.tex}, and so on. - There is no need to specify a file extension when using the \texttt{++} - feature, but if you wish to, then you should include it \emph{after} the - \texttt{++} symbols, for example + There is no need to specify a file extension when using the \texttt{++} feature, but if + you wish to, then you should include it \emph{after} the \texttt{++} symbols, for example \begin{commandshell} latexindent.pl myfile.tex -o=+out++.tex \end{commandshell} @@ -186,9 +184,8 @@ latexindent.pl myfile.tex -tt \emph{More detailed} tracing mode: this option gives more details to \texttt{indent.log} - than the standard \texttt{trace} option (note that, even more so than with - \texttt{-t}, especially for large files, performance of the script will be - affected). + than the standard \texttt{trace} option (note that, even more so than with \texttt{-t}, + especially for large files, performance of the script will be affected). \flagbox{-l, --local[=myyaml.yaml,other.yaml,...]} \index{switches!-l, --local definition and details} @@ -202,29 +199,31 @@ latexindent.pl myfile.tex -l=first.yaml,second.yaml,third.yaml \end{commandshell} \label{page:localswitch} - \texttt{latexindent.pl} will always load \texttt{defaultSettings.yaml} (rhymes with camel) - and if it is called with the \texttt{-l} switch and it finds + \texttt{latexindent.pl} will always load \texttt{defaultSettings.yaml} (rhymes with + camel) and if it is called with the \texttt{-l} switch and it finds \texttt{localSettings.yaml} in the same directory as \texttt{myfile.tex}, then, if not - found, it looks for \texttt{localSettings.yaml} (and friends, see \vref{sec:localsettings}) in the current working directory, then these - \announce{2021-03-14}*{-l switch: localSettings and friends} settings will be added to the indentation scheme. Information - will be given in \texttt{indent.log} on the success or failure of loading - \texttt{localSettings.yaml}. - - The \texttt{-l} flag can take an \emph{optional} parameter which - details the name (or names separated by commas) of a YAML file(s) that resides in the - same directory as \texttt{myfile.tex}; you can use this option if you would like to - load a settings file in the current working directory that is \emph{not} - called \texttt{localSettings.yaml}.% - \announce{2017-08-21}*{-l switch absolute paths} - In fact, you can specify both \emph{relative} and \emph{absolute paths} for - your YAML files; for example + found, it looks for \texttt{localSettings.yaml} (and friends, see + \vref{sec:localsettings}) in the current working directory, then + these% + \announce{2021-03-14}*{-l switch: localSettings and + friends} settings will be added to the indentation scheme. Information will be given in + \texttt{indent.log} on the success or failure of loading \texttt{localSettings.yaml}. + + The \texttt{-l} flag can take an \emph{optional} parameter which details the name (or + names separated by commas) of a YAML file(s) that resides in the same directory as + \texttt{myfile.tex}; you can use this option if you would like to load a settings file in + the current working directory that is \emph{not} called + \texttt{localSettings.yaml}.% + \announce{2017-08-21}*{-l + switch absolute paths} In fact, you can specify both \emph{relative} and \emph{absolute + paths} for your YAML files; for example \begin{commandshell} latexindent.pl -l=../../myyaml.yaml myfile.tex latexindent.pl -l=/home/cmhughes/Desktop/myyaml.yaml myfile.tex latexindent.pl -l=C:\Users\cmhughes\Desktop\myyaml.yaml myfile.tex \end{commandshell} - You will find a lot of other explicit demonstrations of how to use the - \texttt{-l} switch throughout this documentation, + You will find a lot of other explicit demonstrations of how to use the \texttt{-l} switch + throughout this documentation, You can call the \texttt{-l} switch with a `+' symbol either before or after \announce{2017-06-25}{+ sign with -l switch} another YAML file; for example: @@ -247,11 +246,12 @@ latexindent.pl -l+myyaml.yaml myfile.tex \begin{commandshell} latexindent.pl -l + myyaml.yaml myfile.tex \end{commandshell} - will \emph{only} load \texttt{localSettings.yaml}, and \texttt{myyaml.yaml} - will be ignored. If you wish to use spaces between any of the YAML settings, then you - must wrap the entire list of YAML files in quotes, as demonstrated above. + will \emph{only} load \texttt{localSettings.yaml}, and \texttt{myyaml.yaml} will be + ignored. If you wish to use spaces between any of the YAML settings, then you must wrap + the entire list of YAML files in quotes, as demonstrated above. - You may also choose to omit the \texttt{yaml} extension, such as + You may also choose to omit the \texttt{yaml} extension, such + as% \announce{2017-06-25}{no extension for -l switch} \begin{commandshell} latexindent.pl -l=localSettings,myyaml myfile.tex @@ -268,31 +268,29 @@ latexindent.pl myfile.tex -y='modifyLineBreaks:environments:EndStartsOnOwnLine:3 latexindent.pl myfile.tex -y='modifyLineBreaks:environments:one:EndStartsOnOwnLine:3' -m \end{commandshell} \label{page:yamlswitch}You% - \announce{2017-08-21}{the -y switch} can specify YAML settings from the command line using the - \texttt{-y} or \texttt{--yaml} switch; - sample demonstrations are given above. Note, in particular, that multiple settings can - be specified by separating them via commas. There is a further option to use a - \texttt{;} to separate fields, which is demonstrated in - \vref{sec:yamlswitch}. - - Any settings specified via this switch will be loaded \emph{after} any - specified using the \texttt{-l} switch. This is discussed further in - \vref{sec:loadorder}. + \announce{2017-08-21}{the -y switch} can specify YAML settings from the command line + using the \texttt{-y} or \texttt{--yaml} switch; sample demonstrations are given above. + Note, in particular, that multiple settings can be specified by separating them via + commas. There is a further option to use a \texttt{;} to separate fields, which is + demonstrated in \vref{sec:yamlswitch}. + + Any settings specified via this switch will be loaded \emph{after} any specified using + the \texttt{-l} switch. This is discussed further in \vref{sec:loadorder}. \flagbox{-d, --onlydefault} \index{switches!-d, --onlydefault definition and details} \begin{commandshell} latexindent.pl -d myfile.tex \end{commandshell} - Only \texttt{defaultSettings.yaml}: you might like to read \cref{sec:defuseloc} before using - this switch. By default, \texttt{latexindent.pl} will always search for - \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml} in your home directory. If you would - prefer it not to do so then (instead of deleting or renaming \texttt{indentconfig.yaml} or - \texttt{.indentconfig.yaml}) you can simply call the script with the \texttt{-d} - switch; note that this will also tell the script to ignore \texttt{localSettings.yaml} even - if it has been called with the \texttt{-l} switch; \texttt{latexindent.pl}% - \announce{2017-08-21}*{updated -d switch} will also ignore any settings specified from the - \texttt{-y} switch. + Only \texttt{defaultSettings.yaml}: you might like to read \cref{sec:defuseloc} before + using this switch. By default, \texttt{latexindent.pl} will always search for + \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml} in your home directory. If you + would prefer it not to do so then (instead of deleting or renaming + \texttt{indentconfig.yaml} or \texttt{.indentconfig.yaml}) you can simply call the script + with the \texttt{-d} switch; note that this will also tell the script to ignore + \texttt{localSettings.yaml} even if it has been called with the \texttt{-l} switch; + \texttt{latexindent.pl}% + \announce{2017-08-21}*{updated -d switch} will also ignore any settings specified from the \texttt{-y} switch. \flagbox{-c, --cruft=<directory>} \index{switches!-c, --cruft definition and details} @@ -313,13 +311,13 @@ latexindent.pl --logfile other.log myfile.tex latexindent.pl myfile.tex -g other.log \end{commandshell} - By default, \texttt{latexindent.pl} reports information to \texttt{indent.log}, but - if you wish to change the name of this file, simply call the script with your chosen name + By default, \texttt{latexindent.pl} reports information to \texttt{indent.log}, but if + you wish to change the name of this file, simply call the script with your chosen name after the \texttt{-g} switch as demonstrated above. - \announce{2021-05-07}{log file creation updated} If \texttt{latexindent.pl} can not open the log file that you - specify, then the script will operate, and no log file will be produced; this might be - helpful to users who wish to specify the following, for example + \announce{2021-05-07}{log file creation updated} If \texttt{latexindent.pl} can not open + the log file that you specify, then the script will operate, and no log file will be + produced; this might be helpful to users who wish to specify the following, for example \begin{commandshell} latexindent.pl -g /dev/null myfile.tex \end{commandshell} @@ -331,9 +329,8 @@ latexindent.pl -sl myfile.tex latexindent.pl -screenlog myfile.tex \end{commandshell} Using this% - \announce{2018-01-13}{screenlog switch created} option tells - \texttt{latexindent.pl} to output the log file to the screen, as well as to your chosen - log file. + \announce{2018-01-13}{screenlog switch created} option tells \texttt{latexindent.pl} to output the log file to the screen, as + well as to your chosen log file. \flagbox{-m, --modifylinebreaks} \index{switches!-m, --modifylinebreaks definition and details} @@ -358,22 +355,20 @@ cat myfile.tex | latexindent.pl cat myfile.tex | latexindent.pl - \end{commandshell} \texttt{latexindent.pl} will% - \announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can pipe output from - other commands directly into the script. For example assuming that you have content in - \texttt{myfile.tex}, then the above command will output the results of operating upon - \texttt{myfile.tex}. + \announce{2018-01-13}{STDIN allowed} allow input from STDIN, which means that you can + pipe output from other commands directly into the script. For example assuming that you + have content in \texttt{myfile.tex}, then the above command will output the results of + operating upon \texttt{myfile.tex}. - If you wish to use this feature with your own local settings, via the - \texttt{-l} switch, then you should finish your call to - \texttt{latexindent.pl} with a \texttt{-} sign: + If you wish to use this feature with your own local settings, via the \texttt{-l} switch, + then you should finish your call to \texttt{latexindent.pl} with a \texttt{-} sign: \begin{commandshell} cat myfile.tex | latexindent.pl -l=mysettings.yaml - \end{commandshell} Similarly, if you% - \announce{2018-01-13}*{no options/filename updated} simply type - \texttt{latexindent.pl} at the command line, then it will expect (STDIN) input from the - command line. + \announce{2018-01-13}*{no options/filename updated} simply type \texttt{latexindent.pl} at the command line, then + it will expect (STDIN) input from the command line. \begin{commandshell} latexindent.pl \end{commandshell} @@ -383,8 +378,8 @@ latexindent.pl \item \texttt{CTRL+D} on Linux \item \texttt{CTRL+Z} followed by \texttt{ENTER} on Windows \end{itemize} - to signify that your input has finished. Thanks to \cite{xu-cheng} for an update - to this feature. + to signify that your input has finished. Thanks to \cite{xu-cheng} for an update to this + feature. \flagbox{-r, --replacement} \index{switches!-r, --replacement definition and details} \begin{commandshell} @@ -392,8 +387,8 @@ latexindent.pl -r myfile.tex latexindent.pl -replacement myfile.tex \end{commandshell} You can% - \announce{2019-07-13}{replacement mode switch} call - \texttt{latexindent.pl} with the \texttt{-r} switch to instruct it to perform + \announce{2019-07-13}{replacement mode switch} + call \texttt{latexindent.pl} with the \texttt{-r} switch to instruct it to perform replacements/substitutions on your file; full details and examples are given in \vref{sec:replacements}. \index{verbatim!rv, replacementrespectverb switch} @@ -405,10 +400,9 @@ latexindent.pl -rv myfile.tex latexindent.pl -replacementrespectverb myfile.tex \end{commandshell} You can% - \announce{2019-07-13}{replacement mode switch, respecting verbatim} instruct - \texttt{latexindent.pl} to perform replacements/substitutions by using the - \texttt{-rv} switch, but will \emph{respect verbatim code blocks}; full details and - examples are given in \vref{sec:replacements}. + \announce{2019-07-13}{replacement mode switch, respecting verbatim} instruct \texttt{latexindent.pl} to perform + replacements/substitutions by using the \texttt{-rv} switch, but will \emph{respect + verbatim code blocks}; full details and examples are given in \vref{sec:replacements}. \flagbox{-rr, --onlyreplacement} \index{switches!-rr, --onlyreplacement definition and details} @@ -417,11 +411,9 @@ latexindent.pl -rr myfile.tex latexindent.pl -onlyreplacement myfile.tex \end{commandshell} You can% - \announce{2019-07-13}{replacement (only) mode switch} instruct - \texttt{latexindent.pl} to skip all of its other indentation operations and - \emph{only} perform replacements/substitutions by using the - \texttt{-rr} switch; full details and examples are given in - \vref{sec:replacements}. + \announce{2019-07-13}{replacement (only) mode switch} instruct \texttt{latexindent.pl} to skip all of its other indentation operations + and \emph{only} perform replacements/substitutions by using the \texttt{-rr} switch; full + details and examples are given in \vref{sec:replacements}. \subsection{From arara}\label{sec:arara} Using \texttt{latexindent.pl} from the command line is fine for some folks, but others diff --git a/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex b/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex index ddce5c806bf..f2084506ccb 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex @@ -2,26 +2,26 @@ \section{indentconfig.yaml, local settings and the -y switch }\label{sec:indentconfig} The behaviour of \texttt{latexindent.pl} is controlled from the settings specified in any of the YAML files that you tell it to load. By default, \texttt{latexindent.pl} will only - load \texttt{defaultSettings.yaml}, but there are a few ways that you can tell it to load your - own settings files. + load \texttt{defaultSettings.yaml}, but there are a few ways that you can tell it to load + your own settings files. \subsection{indentconfig.yaml and .indentconfig.yaml} - \texttt{latexindent.pl} will always check your home directory for \texttt{indentconfig.yaml} - and \texttt{.indentconfig.yaml} (unless - it is called with the \texttt{-d} switch), which is a plain text file you can create that contains the - \emph{absolute} paths for any settings files that you wish \texttt{latexindent.pl} - to load. There is no difference between \texttt{indentconfig.yaml} and - \texttt{.indentconfig.yaml}, other than the fact that \texttt{.indentconfig.yaml} is a `hidden' - file; thank you to \cite{jacobo-diaz-hidden-config} for providing this feature. In what follows, we - will use \texttt{indentconfig.yaml}, but it is understood that this could equally represent - \texttt{.indentconfig.yaml}. If you have both files in existence then \texttt{indentconfig.yaml} - takes priority. - - For Mac and Linux users, their home directory is \texttt{~/username} while Windows - (Vista onwards) is \lstinline!C:\Users\username!\footnote{If you're not sure - where to put \texttt{indentconfig.yaml}, don't - worry \texttt{latexindent.pl} will tell you in the log file exactly where to - put it assuming it doesn't exist already.} \Cref{lst:indentconfig} + \texttt{latexindent.pl} will always check your home directory for + \texttt{indentconfig.yaml} + and \texttt{.indentconfig.yaml} (unless it is called with the \texttt{-d} switch), which + is a plain text file you can create that contains the \emph{absolute} paths for any + settings files that you wish \texttt{latexindent.pl} to load. There is no difference + between \texttt{indentconfig.yaml} and \texttt{.indentconfig.yaml}, other than the fact + that \texttt{.indentconfig.yaml} is a `hidden' file; thank you to + \cite{jacobo-diaz-hidden-config} for providing this feature. In what follows, we will use + \texttt{indentconfig.yaml}, but it is understood that this could equally represent + \texttt{.indentconfig.yaml}. If you have both files in existence then + \texttt{indentconfig.yaml} takes priority. + + For Mac and Linux users, their home directory is \texttt{~/username} while Windows (Vista + onwards) is \lstinline!C:\Users\username!\footnote{If you're not sure where to put + \texttt{indentconfig.yaml}, don't worry \texttt{latexindent.pl} will tell you in the log + file exactly where to put it assuming it doesn't exist already.} \Cref{lst:indentconfig} shows a sample \texttt{indentconfig.yaml} file. \begin{yaml}{\texttt{indentconfig.yaml} (sample)}{lst:indentconfig} @@ -41,14 +41,14 @@ paths: Note that the \texttt{.yaml} files you specify in \texttt{indentconfig.yaml} will be loaded in the order in which you write them. Each file doesn't have to have every switch - from \texttt{defaultSettings.yaml}; in fact, I recommend that you only keep the switches that - you want to \emph{change} in these settings files. + from \texttt{defaultSettings.yaml}; in fact, I recommend that you only keep the switches + that you want to \emph{change} in these settings files. To get started with your own settings file, you might like to save a copy of \texttt{defaultSettings.yaml} in another directory and call it, for example, - \texttt{mysettings.yaml}. Once you have added the path to \texttt{indentconfig.yaml} you can - change the switches and add more code-block names to it as you see fit -- have a look at - \cref{lst:mysettings} for an example that uses four tabs for the default indent, adds + \texttt{mysettings.yaml}. Once you have added the path to \texttt{indentconfig.yaml} you + can change the switches and add more code-block names to it as you see fit -- have a look + at \cref{lst:mysettings} for an example that uses four tabs for the default indent, adds the \texttt{tabbing} environment/command to the list of environments that contains alignment delimiters; you might also like to refer to the many YAML files detailed throughout the rest of this documentation. @@ -67,8 +67,8 @@ lookForAlignDelims: You can make sure that your settings are loaded by checking \texttt{indent.log} for details -- if you have specified a path that \texttt{latexindent.pl} doesn't recognise then you'll get a warning, otherwise you'll get confirmation that \texttt{latexindent.pl} - has read your settings file \footnote{Windows users - may find that they have to end \texttt{.yaml} files with a blank line}. + has read your settings file \footnote{Windows users may find that they have to end + \texttt{.yaml} files with a blank line}. \index{warning!editing YAML files} \begin{warning} @@ -82,23 +82,23 @@ lookForAlignDelims: \end{warning} If you find that% - \announce*{2021-06-19}{encoding option for indentconfig.yaml} - \texttt{latexindent.pl} does not read your YAML file, then it might be as a result of the - default commandline encoding not being UTF-8; normally this will only occcur for Windows - users. In this case, you might like to explore the \texttt{encoding} option for - \texttt{indentconfig.yaml} as demonstrated in \cref{lst:indentconfig-encoding}. + \announce{2021-06-19}{encoding option for indentconfig.yaml} \texttt{latexindent.pl} does not read your YAML file, then it + might be as a result of the default commandline encoding not being UTF-8; normally this + will only occcur for Windows users. In this case, you might like to explore the + \texttt{encoding} option for \texttt{indentconfig.yaml} as demonstrated in + \cref{lst:indentconfig-encoding}. - \cmhlistingsfromfile*{demonstrations/encoding.yaml}[yaml-TCB]{The \texttt{encoding} option for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding} + \cmhlistingsfromfile{demonstrations/encoding.yaml}[yaml-TCB]{The \texttt{encoding} option for \texttt{indentconfig.yaml}}{lst:indentconfig-encoding} - Thank you to \cite{qiancy98} for this contribution; please see - \vref{app:encoding} and details within \cite{encoding} for further information. + Thank you to \cite{qiancy98} for this contribution; please see \vref{app:encoding} and + details within \cite{encoding} for further information. \subsection{localSettings.yaml and friends}\label{sec:localsettings} The \texttt{-l} switch tells \texttt{latexindent.pl} to look for \texttt{localSettings.yaml} and/or friends in the \emph{same directory} as - \texttt{myfile.tex}. For% - \announce{2021-03-14}*{-l switch: localSettings and friends} - example, if you use the following command + \texttt{myfile.tex}. For% + \announce{2021-03-14}*{-l + switch: localSettings and friends} example, if you use the following command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl -l myfile.tex @@ -124,9 +124,9 @@ latexindent.pl -l myfile.tex latexindent.pl -l=mysettings.yaml myfile.tex \end{commandshell} - Any settings file(s) specified using the \texttt{-l} switch will be read - \emph{after} \texttt{defaultSettings.yaml} and, assuming they exist, any user setting - files specified in \texttt{indentconfig.yaml}. + Any settings file(s) specified using the \texttt{-l} switch will be read \emph{after} + \texttt{defaultSettings.yaml} and, assuming they exist, any user setting files specified + in \texttt{indentconfig.yaml}. Your settings file can contain any switches that you'd like to change; a sample is shown in \cref{lst:localSettings}, and you'll find plenty of further examples throughout this @@ -141,44 +141,41 @@ verbatimEnvironments: myenv: 1 \end{yaml} - You can make sure that your settings file has been loaded by checking - \texttt{indent.log} for details; if it can not be read then you receive a warning, - otherwise you'll get confirmation that \texttt{latexindent.pl} has read your settings - file. + You can make sure that your settings file has been loaded by checking \texttt{indent.log} + for details; if it can not be read then you receive a warning, otherwise you'll get + confirmation that \texttt{latexindent.pl} has read your settings file. \subsection{The -y|yaml switch}\label{sec:yamlswitch} You% - \announce{2017-08-21}{demonstration of the -y switch} may use the - \texttt{-y} switch to load your settings; for example, if you wished to - specify the settings from \cref{lst:localSettings} using the \texttt{-y} - switch, then you could use the following command: + \announce{2017-08-21}{demonstration of the -y switch} + may use the \texttt{-y} switch to load your settings; for example, if you wished to + specify the settings from \cref{lst:localSettings} using the \texttt{-y} switch, then you + could use the following command: \index{verbatim!verbatimEnvironments demonstration (-y switch)} \begin{commandshell} latexindent.pl -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex \end{commandshell} - Note the use of \texttt{;} to specify another field within - \texttt{verbatimEnvironments}. This is shorthand, and equivalent, to using the following - command: + Note the use of \texttt{;} to specify another field within \texttt{verbatimEnvironments}. + This is shorthand, and equivalent, to using the following command: \index{switches!-y demonstration} \begin{commandshell} latexindent.pl -y="verbatimEnvironments:cmhenvironment:0,verbatimEnvironments:myenv:1" myfile.tex \end{commandshell} - You may, of course, specify settings using the \texttt{-y} switch as well as, - for example, settings loaded using the \texttt{-l} switch; for example, + You may, of course, specify settings using the \texttt{-y} switch as well as, for + example, settings loaded using the \texttt{-l} switch; for example, \index{switches!-l demonstration} \index{switches!-y demonstration} \begin{commandshell} latexindent.pl -l=mysettings.yaml -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex \end{commandshell} - Any settings specified using the \texttt{-y} switch will be loaded - \emph{after} any specified using \texttt{indentconfig.yaml} and the - \texttt{-l} switch. + Any settings specified using the \texttt{-y} switch will be loaded \emph{after} any + specified using \texttt{indentconfig.yaml} and the \texttt{-l} switch. If you wish to specify any regex-based settings using the \texttt{-y} switch, - \index{regular expressions!using -y switch} it is important not to use quotes surrounding the regex; for - example, with reference to the `one sentence per line' feature (\vref{sec:onesentenceperline}) - and the listings within \vref{lst:sentencesEndWith}, the following settings give the option - to have sentences end with a semicolon + \index{regular expressions!using -y switch} it is important not to use quotes surrounding + the regex; for example, with reference to the `one sentence per line' feature + (\vref{sec:onesentenceperline}) and the listings within \vref{lst:sentencesEndWith}, the + following settings give the option to have sentences end with a semicolon \index{switches!-y demonstration} \begin{commandshell} latexindent.pl -m --yaml='modifyLineBreaks:oneSentencePerLine:sentencesEndWith:other:\;' @@ -191,15 +188,16 @@ latexindent.pl -m --yaml='modifyLineBreaks:oneSentencePerLine:sentencesEndWith:o \item \texttt{defaultSettings.yaml} is always loaded, and can not be renamed; \item \texttt{anyUserSettings.yaml} and any other arbitrarily-named files specified in \texttt{indentconfig.yaml}; - \item \texttt{localSettings.yaml} but only if found in the same directory as \texttt{myfile.tex} - and called with \texttt{-l} switch; this file can be renamed, provided that - the call to \texttt{latexindent.pl} is adjusted accordingly (see \cref{sec:localsettings}). - You may specify both relative and absolute% - \announce{2017-08-21}*{-l absolute paths} paths to other YAML files using the \texttt{-l} switch, - separating multiple files using commas; + \item \texttt{localSettings.yaml} but only if found in the same directory as + \texttt{myfile.tex} + and called with \texttt{-l} switch; this file can be renamed, provided that the call to + \texttt{latexindent.pl} is adjusted accordingly (see \cref{sec:localsettings}). You may + specify both relative and absolute% + \announce{2017-08-21}*{-l absolute paths} paths to other YAML files using the \texttt{-l} + switch, separating multiple files using commas; \item any settings% - \announce{2017-08-21}{-y switch load order} specified in the - \texttt{-y} switch. + \announce{2017-08-21}{-y switch load order} + specified in the \texttt{-y} switch. \end{enumerate} A visual representation of this is given in \cref{fig:loadorder}. diff --git a/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex b/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex index 887a0968876..c9915e4fcc5 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex @@ -2,17 +2,16 @@ \section{Introduction} \subsection{Thanks} I first created \texttt{latexindent.pl} to help me format chapter files in a big project. - After I blogged about it on the \TeX{} stack exchange - \cite{cmhblog} I received some positive feedback and follow-up feature requests. - A big thank you to Harish Kumar \cite{harish} who helped to develop and test the - initial versions of the script. + After I blogged about it on the \TeX{} stack exchange \cite{cmhblog} I received some + positive feedback and follow-up feature requests. A big thank you to Harish Kumar + \cite{harish} who helped to develop and test the initial versions of the script. The \texttt{YAML}-based interface of \texttt{latexindent.pl} was inspired by the - wonderful \texttt{arara} tool; any similarities are deliberate, and I hope that - it is perceived as the compliment that it is. Thank you to Paulo Cereda and the team for + wonderful \texttt{arara} tool; any similarities are deliberate, and I hope that it is + perceived as the compliment that it is. Thank you to Paulo Cereda and the team for releasing this awesome tool; I initially worried that I was going to have to make a GUI - for \texttt{latexindent.pl}, but the release of \texttt{arara} has meant there is - no need. + for \texttt{latexindent.pl}, but the release of \texttt{arara} has meant there is no + need. There have been several contributors to the project so far (and hopefully more in the future!); thank you very much to the people detailed in \vref{sec:contributors} for their @@ -24,17 +23,17 @@ is released under the GNU General Public License v3.0. Before you start using it on any important files, bear in mind that - \texttt{latexindent.pl} has the option to overwrite your \texttt{.tex} files. It - will always make at least one backup (you can choose how many it makes, see - \cpageref{page:onlyonebackup}) but you should still be careful when using it. The script has - been tested on many files, but there are some known limitations (see - \cref{sec:knownlimitations}). You, the user, are responsible for ensuring that you maintain - backups of your files before running \texttt{latexindent.pl} on them. I think it is - important at this stage to restate an important part of the license here: + \texttt{latexindent.pl} has the option to overwrite your \texttt{.tex} files. It will + always make at least one backup (you can choose how many it makes, see + \cpageref{page:onlyonebackup}) but you should still be careful when using it. The script + has been tested on many files, but there are some known limitations (see + \cref{sec:knownlimitations}). You, the user, are responsible for ensuring that you + maintain backups of your files before running \texttt{latexindent.pl} on them. I think it + is important at this stage to restate an important part of the license here: \begin{quote}\itshape This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. \end{quote} There is certainly no malicious intent in releasing this script, and I do hope that it @@ -101,16 +100,16 @@ % \begin{latexonly} You will occasionally see dates shown in the margin (for example, next to this paragraph!)% - \announce{2017-06-25}{announce} which detail the date - of the version in which the feature was implemented; the `N' stands for `new as of the - date shown' and `U' stands for `updated as of the date shown'. If you see \stardemo, it - means that the feature is either new (N) or updated (U) as of the release of the current - version; if you see \stardemo\, attached to a listing, then it means that listing is new - (N) or updated (U) as of the current version. If you have not read this document before - (and even if you have!), then you can ignore every occurrence of the \stardemo; they are - simply there to highlight new and updated features. The new and updated features in this - documentation (\gitRel) are on the following pages: \listOfNewFeatures - % \end{latexonly} + \announce{2017-06-25}{announce} which detail + the date of the version in which the feature was implemented; the `N' stands for `new as + of the date shown' and `U' stands for `updated as of the date shown'. If you see + \stardemo, it means that the feature is either new (N) or updated (U) as of the release + of the current version; if you see \stardemo\, attached to a listing, then it means that + listing is new (N) or updated (U) as of the current version. If you have not read this + document before (and even if you have!), then you can ignore every occurrence of the + \stardemo; they are simply there to highlight new and updated features. The new and + updated features in this documentation (\gitRel) are on the following pages: + \listOfNewFeatures % \end{latexonly} \subsection{Quick start}\label{sec:quickstart} If you'd like to get started with \texttt{latexindent.pl} then simply type @@ -128,12 +127,13 @@ BEGIN failed--compilation aborted at helloworld.pl line 10. \begin{commandshell} perl latexindent-module-installer.pl \end{commandshell} - You might also like to see \href{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}, for example, as well as - \vref{sec:requiredmodules}. + You might also like to see + \href{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}{https://stackoverflow.com/questions/19590042/error-cant-locate-file-homedir-pm-in-inc}, + for example, as well as \vref{sec:requiredmodules}. \subsection{A word about regular expressions} \index{regular expressions!a word about} - As you read this documentation, you may encounter the term \emph{regular expressions}. I've - tried to write this documentation in such a way so as to allow you to engage with them or - not, as you prefer. This documentation is not designed to be a guide to regular + As you read this documentation, you may encounter the term \emph{regular expressions}. + I've tried to write this documentation in such a way so as to allow you to engage with + them or not, as you prefer. This documentation is not designed to be a guide to regular expressions, and if you'd like to read about them, I recommend \cite{masteringregexp}. diff --git a/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex b/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex index 4362f347203..a31ad0721b9 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex @@ -10,16 +10,16 @@ \texttt{-rv} or \texttt{-rr} switches: \index{verbatim!rv, replacementrespectverb switch} \begin{itemize} - \item the \texttt{-r} switch will perform indentation and replacements, not - respecting verbatim code blocks; - \item the \texttt{-rv} switch will perform indentation and replacements, and - \emph{will} respect verbatim code blocks; - \item the \texttt{-rr} switch will \emph{not} perform indentation, and - will perform replacements not respecting verbatim code blocks. + \item the \texttt{-r} switch will perform indentation and replacements, not respecting verbatim + code blocks; + \item the \texttt{-rv} switch will perform indentation and replacements, and \emph{will} + respect verbatim code blocks; + \item the \texttt{-rr} switch will \emph{not} perform indentation, and will perform + replacements not respecting verbatim code blocks. \end{itemize} - We will demonstrate each of the \texttt{-r}, \texttt{-rv} and - \texttt{-rr} switches, but a summary is given in \cref{tab:replacementswitches}. + We will demonstrate each of the \texttt{-r}, \texttt{-rv} and \texttt{-rr} switches, but + a summary is given in \cref{tab:replacementswitches}. \begin{table}[!htb] \centering @@ -35,23 +35,22 @@ \end{tabular} \end{table} - The default value of the \texttt{replacements} field is shown in - \cref{lst:replacements}; as with all of the other fields, you are encouraged to customise - and change this as you see fit. The options in this field will \emph{only} be - considered if the \texttt{-r}, \texttt{-rv} or - \texttt{-rr} switches are active; when discussing YAML settings related to the - replacement-mode switches, we will use the style given in \cref{lst:replacements}. + The default value of the \texttt{replacements} field is shown in \cref{lst:replacements}; + as with all of the other fields, you are encouraged to customise and change this as you + see fit. The options in this field will \emph{only} be considered if the \texttt{-r}, + \texttt{-rv} or \texttt{-rr} switches are active; when discussing YAML settings related + to the replacement-mode switches, we will use the style given in \cref{lst:replacements}. \cmhlistingsfromfile[style=replacements]*{../defaultSettings.yaml}[width=0.95\linewidth,before=\centering,replace-TCB]{\texttt{replacements}}{lst:replacements} - The first entry within the \texttt{replacements} field is \texttt{amalgamate}, and - is \emph{optional}; by default it is set to 1, so that replacements will be - amalgamated from each settings file that you specify. As you'll see in the demonstrations - that follow, there is no need to specify this field. + The first entry within the \texttt{replacements} field is \texttt{amalgamate}, and is + \emph{optional}; by default it is set to 1, so that replacements will be amalgamated from + each settings file that you specify. As you'll see in the demonstrations that follow, + there is no need to specify this field. You'll notice that, by default, there is only \emph{one} entry in the - \texttt{replacements} field, but it can take as many entries as you would like; each - one needs to begin with a \texttt{-} on its own line. + \texttt{replacements} field, but it can take as many entries as you would like; each one + needs to begin with a \texttt{-} on its own line. \subsection{Introduction to replacements} Let's explore the action of the default settings, and then we'll demonstrate the feature @@ -71,8 +70,8 @@ latexindent.pl -r replace1.tex \end{cmhtcbraster} If we don't wish to perform this replacement, then we can tweak the default settings of - \vref{lst:replacements} by changing \texttt{lookForThis} to 0; we perform this action - in \cref{lst:replace1-yaml}, and run the command + \vref{lst:replacements} by changing \texttt{lookForThis} to 0; we perform this action in + \cref{lst:replace1-yaml}, and run the command \index{switches!-l demonstration} \index{switches!-r demonstration} \begin{commandshell} @@ -85,19 +84,19 @@ latexindent.pl -r replace1.tex -l=replace1.yaml \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/replace1.yaml}[replace-TCB]{\texttt{replace1.yaml}}{lst:replace1-yaml} \end{cmhtcbraster} - Note that in \cref{lst:replace1-yaml} we have specified \texttt{amalgamate} as 0 so - that the default replacements are overwritten. + Note that in \cref{lst:replace1-yaml} we have specified \texttt{amalgamate} as 0 so that + the default replacements are overwritten. - We haven't yet discussed the \texttt{when} field; don't worry, we'll get to it - as part of the discussion in what follows. + We haven't yet discussed the \texttt{when} field; don't worry, we'll get to it as part of + the discussion in what follows. \subsection{The two types of replacements} There are two types of replacements: \begin{enumerate} \item \emph{string}-based replacements, which replace the string in \emph{this} with the string in \emph{that}. - If you specify \texttt{this} and you do not specify \texttt{that}, then - the \texttt{that} field will be assumed to be empty. + If you specify \texttt{this} and you do not specify \texttt{that}, then the \texttt{that} + field will be assumed to be empty. \index{regular expressions!replacement switch, -r} \item \emph{regex}-based replacements, which use the \texttt{substitution} field. \end{enumerate} @@ -105,8 +104,8 @@ latexindent.pl -r replace1.tex -l=replace1.yaml \texttt{latexindent.pl} chooses which type of replacement to make based on which fields have been specified; if the \texttt{this} field is specified, then it will make - \emph{string}-based replacements, regardless of if \texttt{substitution} is - present or not. + \emph{string}-based replacements, regardless of if \texttt{substitution} is present or + not. \subsection{Examples of replacements} \begin{example} @@ -150,19 +149,20 @@ latexindent.pl -r colsep.tex -l=colsep1.yaml \end{cmhtcbraster} The code given in \cref{lst:colsep1} is an example of a \emph{regular expression}, which we may abbreviate to \emph{regex} - in what follows. This manual is not intended to be + in what follows. This manual is not intended to be a tutorial on regular expressions; you might like to read, for example, \cite{masteringregexp} for a detailed covering of the topic. With reference to \cref{lst:colsep1}, we do note the following: \begin{itemize} - \item the general form of the \texttt{substitution} field is \lstinline!s/regex/replacement/modifiers!. You can - place any regular expression you like within this; + \item the general form of the \texttt{substitution} field is + \lstinline!s/regex/replacement/modifiers!. You can place any regular expression you like + within this; \item we have `escaped' the backslash by using \lstinline!\\! \item we have used \lstinline!\d+! to represent \emph{at least} one digit - \item the \texttt{s} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs \texttt{latexindent.pl} to - treat your file as one single line; - \item the \texttt{g} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs \texttt{latexindent.pl} to - make the substitution \emph{globally} throughout your file; you might try removing - the \texttt{g} modifier from \cref{lst:colsep1} and observing the + \item the \texttt{s} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs + \texttt{latexindent.pl} to treat your file as one single line; + \item the \texttt{g} \emph{modifier} (in the \texttt{sg} at the end of the line) instructs + \texttt{latexindent.pl} to make the substitution \emph{globally} throughout your file; + you might try removing the \texttt{g} modifier from \cref{lst:colsep1} and observing the difference in output. \end{itemize} You might like to see \href{https://perldoc.perl.org/perlre.html#Modifiers}{https://perldoc.perl.org/perlre.html\#Modifiers} @@ -241,12 +241,11 @@ latexindent.pl -r displaymath.tex -l=displaymath1.yaml A few notes about \cref{lst:displaymath1}: \begin{enumerate} - \item we have used the \texttt{x} modifier, which allows us to have white space - within the regex; - \item we have used a capture group, \lstinline!(.*?)! which captures the content between - the \lstinline!$$...$$! into the special variable, \lstinline!$1!; - \item we have used the content of the capture group, \lstinline!$1!, in the - replacement text. + \item we have used the \texttt{x} modifier, which allows us to have white space within the + regex; + \item we have used a capture group, \lstinline!(.*?)! which captures the content between the + \lstinline!$$...$$! into the special variable, \lstinline!$1!; + \item we have used the content of the capture group, \lstinline!$1!, in the replacement text. \end{enumerate} See \href{https://perldoc.perl.org/perlre.html#Capture-groups}{https://perldoc.perl.org/perlre.html\#Capture-groups} for a discussion of capture groups. @@ -355,11 +354,11 @@ latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1 \item in \cref{lst:verb1-mod1} indentation has been performed, and that the replacements specified in \cref{lst:verbatim1-yaml} have been performed, even within the verbatim code block; - \item in \cref{lst:verb1-rv-mod1} indentation has been performed, but that the replacements have - \emph{not} been performed within the verbatim environment, because the - \texttt{rv} switch is active; - \item in \cref{lst:verb1-rr-mod1} indentation has \emph{not} been performed, but - that replacements have been performed, not respecting the verbatim code block. + \item in \cref{lst:verb1-rv-mod1} indentation has been performed, but that the replacements + have \emph{not} been performed within the verbatim environment, because the \texttt{rv} + switch is active; + \item in \cref{lst:verb1-rr-mod1} indentation has \emph{not} been performed, but that + replacements have been performed, not respecting the verbatim code block. \end{enumerate} See the summary within \vref{tab:replacementswitches}. @@ -399,11 +398,9 @@ latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml,amalg3-yaml We note that: \begin{enumerate} \item in \cref{lst:amalg1-mod1} the replacements from \cref{lst:amalg1-yaml} have been used; - \item in \cref{lst:amalg1-mod12} the replacements from \cref{lst:amalg1-yaml,lst:amalg2-yaml} have - \emph{both} been used, because the default value of \texttt{amalgamate} - is 1; - \item in \cref{lst:amalg1-mod123} \emph{only} the replacements from - \cref{lst:amalg3-yaml} have been used, because the value of \texttt{amalgamate} has - been set to 0. + \item in \cref{lst:amalg1-mod12} the replacements from \cref{lst:amalg1-yaml,lst:amalg2-yaml} + have \emph{both} been used, because the default value of \texttt{amalgamate} is 1; + \item in \cref{lst:amalg1-mod123} \emph{only} the replacements from \cref{lst:amalg3-yaml} have + been used, because the value of \texttt{amalgamate} has been set to 0. \end{enumerate} \end{example} diff --git a/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex b/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex index d8cdbe62c6d..8a824987f6f 100644 --- a/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex +++ b/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex @@ -5,8 +5,8 @@ \tikz[remember picture,overlay] { \node at (1,0){\includegraphics{logo}}; }} - All features described in this section will only be relevant if the - \texttt{-m} switch is used. + All features described in this section will only be relevant if the \texttt{-m} switch is + used. \startcontents[the-m-switch] \printcontents[the-m-switch]{}{0}{} @@ -17,16 +17,17 @@ \end{wrapfigure} \makebox[0pt][r]{% \raisebox{-\totalheight}[0pt][0pt]{% - \tikz\node[opacity=1] at (0,0) {\includegraphics[width=4cm]{logo}};}}% - As of Version 3.0, \texttt{latexindent.pl} has the \texttt{-m} - switch, which permits \texttt{latexindent.pl} to modify line breaks, according to the - specifications in the \texttt{modifyLineBreaks} field. \emph{The settings - in this field will only be considered if the \texttt{-m} switch has been used}. A - snippet of the default settings of this field is shown in \cref{lst:modifylinebreaks}. + \tikz\node[opacity=1] at (0,0) + {\includegraphics[width=4cm]{logo}};}}% + As of Version 3.0, \texttt{latexindent.pl} has the \texttt{-m} switch, which permits + \texttt{latexindent.pl} to modify line breaks, according to the specifications in the + \texttt{modifyLineBreaks} field. \emph{The settings in this field will only be considered + if the \texttt{-m} switch has been used}. A snippet of the default settings of this field + is shown in \cref{lst:modifylinebreaks}. Having read the previous paragraph, it should sound reasonable that, if you call - \texttt{latexindent.pl} using the \texttt{-m} switch, then you give - it permission to modify line breaks in your file, but let's be clear: + \texttt{latexindent.pl} using the \texttt{-m} switch, then you give it permission to + modify line breaks in your file, but let's be clear: \index{warning!the m switch} \begin{warning} @@ -37,1922 +38,26 @@ \end{warning} \yamltitle{preserveBlankLines}{0|1} - This field is directly related to \emph{poly-switches}, discussed below. By - default, it is set to \texttt{1}, which means that blank lines will be - protected from removal; however, regardless of this setting, multiple blank lines can be - condensed if \texttt{condenseMultipleBlankLinesInto} is greater than \texttt{0}, - discussed next. + This field is directly related to \emph{poly-switches}, discussed in + \cref{sec:poly-switches}. By default, it is set to \texttt{1}, which means that blank + lines will be \emph{protected} from removal; however, regardless of this setting, + multiple blank lines can be condensed if \texttt{condenseMultipleBlankLinesInto} is + greater than \texttt{0}, discussed next. \yamltitle{condenseMultipleBlankLinesInto}*{positive integer} - Assuming that this switch takes an integer value greater than - \texttt{0}, \texttt{latexindent.pl} will condense multiple blank - lines into the number of blank lines illustrated by this switch. As an example, - \cref{lst:mlb-bl} shows a sample file with blank lines; upon running + Assuming that this switch takes an integer value greater than \texttt{0}, + \texttt{latexindent.pl} will condense multiple blank lines into the number of blank lines + illustrated by this switch. As an example, \cref{lst:mlb-bl} shows a sample file with + blank lines; upon running \index{switches!-m demonstration} \begin{commandshell} -latexindent.pl myfile.tex -m +latexindent.pl myfile.tex -m -o=+-mod1 \end{commandshell} - the output is shown in \cref{lst:mlb-bl-out}; note that the multiple blank lines - have been condensed into one blank line, and note also that we have used the - \texttt{-m} switch! - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile{demonstrations/mlb1.tex}{\texttt{mlb1.tex}}{lst:mlb-bl} - \end{minipage}% - \hfill - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile{demonstrations/mlb1-out.tex}{\texttt{mlb1.tex} out output}{lst:mlb-bl-out} - \end{minipage} - -\subsection{textWrapOptions: modifying line breaks by text wrapping}\label{subsec:textwrapping} - When the \texttt{-m} switch is active \texttt{latexindent.pl} has the - ability to wrap text using the options% - \announce{2017-05-27}{textWrapOptions} specified in the \texttt{textWrapOptions} field, see - \cref{lst:textWrapOptions}. The value of \texttt{columns} specifies the - column at which the text should be wrapped. By default, the value of - \texttt{columns} is \texttt{0}, so - \texttt{latexindent.pl} will \emph{not} wrap text; if you change it - to a value of \texttt{2} or more, then text will be wrapped after the - character in the specified column. - \index{modifying linebreaks! by text wrapping, globally} - - \cmhlistingsfromfile[style=textWrapOptions]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptions} - - For example, consider the file give in \cref{lst:textwrap1}. - - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap1.tex}{\texttt{textwrap1.tex}}{lst:textwrap1} - \end{widepage} - - Using the file \texttt{textwrap1.yaml} in \cref{lst:textwrap1-yaml}, and running - the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap1.tex -o textwrap1-mod1.tex -l textwrap1.yaml -\end{commandshell} - we obtain the output in \cref{lst:textwrap1-mod1}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/textwrap1-mod1.tex}{\texttt{textwrap1-mod1.tex}}{lst:textwrap1-mod1} - \cmhlistingsfromfile{demonstrations/textwrap1.yaml}[MLB-TCB]{\texttt{textwrap1.yaml}}{lst:textwrap1-yaml} - \end{cmhtcbraster} - - The text wrapping routine is performed \emph{after} verbatim environments - \index{verbatim!in relation to textWrapOptions} have been stored, so verbatim environments and verbatim - commands are exempt from the routine. For example, using the file in - \cref{lst:textwrap2}, - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap2.tex}{\texttt{textwrap2.tex}}{lst:textwrap2} - \end{widepage} - and running the following command and continuing to use \texttt{textwrap1.yaml} from - \cref{lst:textwrap1-yaml}, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap2.tex -o textwrap2-mod1.tex -l textwrap1.yaml -\end{commandshell} - then the output is as in \cref{lst:textwrap2-mod1}. - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap2-mod1.tex}{\texttt{textwrap2-mod1.tex}}{lst:textwrap2-mod1} - \end{widepage} - Furthermore, the text wrapping routine is performed after the trailing comments have been - stored, and they are also exempt from text wrapping. For example, using the file in - \cref{lst:textwrap3} - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap3.tex}{\texttt{textwrap3.tex}}{lst:textwrap3} - \end{widepage} - and running the following command and continuing to use \texttt{textwrap1.yaml} from - \cref{lst:textwrap1-yaml}, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap3.tex -o textwrap3-mod1.tex -l textwrap1.yaml -\end{commandshell} - then the output is as in \cref{lst:textwrap3-mod1}. - - \cmhlistingsfromfile{demonstrations/textwrap3-mod1.tex}{\texttt{textwrap3-mod1.tex}}{lst:textwrap3-mod1} - - The% - \announce*{2021-07-23}*{huge:overflow is now default} default value of - \texttt{huge} is \texttt{overflow}, which means that words will - \emph{not} be broken by the text wrapping routine, implemented by the - \texttt{Text::Wrap} \cite{textwrap}. There are options to change the - \texttt{huge} option for the \texttt{Text::Wrap} module to either - \texttt{wrap} or \texttt{die}. Before modifying the value of - \texttt{huge}, please bear in mind the following warning: - \index{warning!changing huge (textwrap)} - \begin{warning} - \raggedright - Changing the value of \texttt{huge} to anything other than \texttt{overflow} will slow down - \texttt{latexindent.pl} significantly when the \texttt{-m} switch is active. - - Furthermore, changing \texttt{huge} means that you may have some words \emph{or commands}(!) - split across lines in your .tex file, which may affect your output. I do not recommend - changing this field. - \end{warning} - - For example, using the settings in \cref{lst:textwrap2A-yaml,lst:textwrap2B-yaml} and running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap4.tex -o=+-mod2A -l textwrap2A.yaml -latexindent.pl -m textwrap4.tex -o=+-mod2B -l textwrap2B.yaml -\end{commandshell} - gives the respective output in \cref{lst:textwrap4-mod2A,lst:textwrap4-mod2B}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A} - \cmhlistingsfromfile*{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml} - - \cmhlistingsfromfile{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B} - \cmhlistingsfromfile*{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml} - \end{cmhtcbraster} - - You can also specify the \texttt{tabstop} - field% - \announce{2020-11-06}{tabstop option for text wrap module} as an integer - value, which is passed to the text wrap module; see \cite{textwrap} for - details. Starting with the code in \cref{lst:textwrap-ts} with settings in - \cref{lst:tabstop}, and running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap-ts.tex -o=+-mod1 -l tabstop.yaml -\end{commandshell} - gives the code given in \cref{lst:textwrap-ts-mod1}. - \begin{cmhtcbraster}[raster columns=3, - raster left skip=-3.5cm, - raster right skip=-2cm, - raster column skip=.03\linewidth] - \cmhlistingsfromfile[showtabs=true]*{demonstrations/textwrap-ts.tex}{\texttt{textwrap-ts.tex}}{lst:textwrap-ts} - \cmhlistingsfromfile{demonstrations/tabstop.yaml}[MLB-TCB]{\texttt{tabstop.yaml}}{lst:tabstop} - \cmhlistingsfromfile[showtabs=true]*{demonstrations/textwrap-ts-mod1.tex}{\texttt{textwrap-ts-mod1.tex}}{lst:textwrap-ts-mod1} - \end{cmhtcbraster} - - You can specify \texttt{separator}, \texttt{break} and - \texttt{unexpand} options in your settings in analogous ways to those - demonstrated in \cref{lst:textwrap2B-yaml,lst:tabstop}, and they will be passed to the - \texttt{Text::Wrap} module. I have not found a useful reason to do this; see - \cite{textwrap} for more details. - -\subsubsection{text wrapping on a per-code-block basis} - By default, if the value of \texttt{columns} is greater than 0 and the - \texttt{-m} switch is active, then% - \announce{2018-08-13}*{updates to textWrapOptions} the text wrapping routine will operate before the code blocks - have been searched for. This behaviour is customisable; in particular, you can instead - instruct \texttt{latexindent.pl} to apply \texttt{textWrap} on a - per-code-block basis. Thanks to \cite{zoehneto} for their help in testing and - shaping this feature. - \index{modifying linebreaks! by text wrapping, per-code-block} - - The full details of \texttt{textWrapOptions} are shown in \cref{lst:textWrapOptionsAll}. - In particular, note the field \texttt{perCodeBlockBasis: 0}. - \index{specialBeginEnd!textWrapOptions} - - \cmhlistingsfromfile*[style=textWrapOptionsAll]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptionsAll} - - The code blocks detailed in \cref{lst:textWrapOptionsAll} are with direct reference to - those detailed in \vref{tab:code-blocks}. The only special case is the - \texttt{masterDocument} field; this is designed for `chapter'-type files that may - contain paragraphs that are not within any other code-blocks. The same notation is used - between this feature and the \texttt{removeParagraphLineBreaks} described in - \vref{lst:removeParagraphLineBreaks}; in fact, the two features can even be combined (this is - detailed in \vref{subsec:removeparagraphlinebreaks:and:textwrap}). - - Let's explore these switches with reference to the code given in - \cref{lst:textwrap5}; the text outside of the environment is considered part of - the \texttt{masterDocument}. - - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap5.tex}{\texttt{textwrap5.tex}}{lst:textwrap5} - \end{widepage} - - With reference to this code block, the settings given in \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} each - give the same output. - - \begin{cmhtcbraster}[raster columns=3, - raster left skip=-3.5cm, - raster right skip=-2cm, - raster column skip=.03\linewidth] - \cmhlistingsfromfile{demonstrations/textwrap3.yaml}[MLB-TCB]{\texttt{textwrap3.yaml}}{lst:textwrap3-yaml} - \cmhlistingsfromfile{demonstrations/textwrap4.yaml}[MLB-TCB]{\texttt{textwrap4.yaml}}{lst:textwrap4-yaml} - \cmhlistingsfromfile{demonstrations/textwrap5.yaml}[MLB-TCB]{\texttt{textwrap5.yaml}}{lst:textwrap5-yaml} - \end{cmhtcbraster} - - Let's explore the similarities and differences in the equivalent (with respect to - \cref{lst:textwrap5}) syntax specified in \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml}: - \begin{itemize} - \item in each of \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} notice that \texttt{columns: 30}; - \item in each of \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} notice that \texttt{perCodeBlockBasis: 1}; - \item in \cref{lst:textwrap3-yaml} we have specified \texttt{all: 1} so that the - text wrapping will operate upon \emph{all} code blocks; - \item in \cref{lst:textwrap4-yaml} we have \emph{not} specified - \texttt{all}, and instead, have specified that text wrapping should be - applied to each of \texttt{environments} and \texttt{masterDocument}; - \item in \cref{lst:textwrap5-yaml} we have specified text wrapping for - \texttt{masterDocument} and on a \emph{per-name} basis for - \texttt{environments} code blocks. - \end{itemize} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -s textwrap5.tex -l=textwrap3.yaml -m -latexindent.pl -s textwrap5.tex -l=textwrap4.yaml -m -latexindent.pl -s textwrap5.tex -l=textwrap5.yaml -m -\end{commandshell} - we obtain the output shown in \cref{lst:textwrap5-mod3}. - - \cmhlistingsfromfile{demonstrations/textwrap5-mod3.tex}{\texttt{textwrap5-mod3.tex}}{lst:textwrap5-mod3} - - We can explore the idea of per-name text wrapping given in \cref{lst:textwrap5-yaml} by - using \cref{lst:textwrap6}. - - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap6.tex}{\texttt{textwrap6.tex}}{lst:textwrap6} - \end{widepage} - - In particular, upon running - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -s textwrap6.tex -l=textwrap5.yaml -m -\end{commandshell} - we obtain the output given in \cref{lst:textwrap6-mod5}. - - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap6-mod5.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap5-yaml}}{lst:textwrap6-mod5} - \end{widepage} - - Notice that, because \texttt{environments} has been specified only for - \texttt{myenv} (in \cref{lst:textwrap5-yaml}) that the environment named \texttt{another} has - \emph{not} had text wrapping applied to it. - - The {all} field can be specified with exceptions which can either - be done on a per-code-block or per-name basis; we explore this in relation to - \cref{lst:textwrap6} in the settings given in \crefrange{lst:textwrap6-yaml}{lst:textwrap8-yaml}. - - \begin{adjustwidth}{-3.5cm}{-2.5cm} - \begin{minipage}{.33\linewidth} - \cmhlistingsfromfile{demonstrations/textwrap6.yaml}[MLB-TCB]{\texttt{textwrap6.yaml}}{lst:textwrap6-yaml} - \end{minipage}% - \begin{minipage}{.33\linewidth} - \cmhlistingsfromfile{demonstrations/textwrap7.yaml}[MLB-TCB]{\texttt{textwrap7.yaml}}{lst:textwrap7-yaml} - \end{minipage}% - \begin{minipage}{.33\linewidth} - \cmhlistingsfromfile{demonstrations/textwrap8.yaml}[MLB-TCB]{\texttt{textwrap8.yaml}}{lst:textwrap8-yaml} - \end{minipage} - \end{adjustwidth} - - Upon running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -s textwrap6.tex -l=textwrap6.yaml -m -latexindent.pl -s textwrap6.tex -l=textwrap7.yaml -m -latexindent.pl -s textwrap6.tex -l=textwrap8.yaml -m -\end{commandshell} - we receive the respective output given in \crefrange{lst:textwrap6-mod6}{lst:textwrap6-mod8}. - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap6-mod6.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap6-yaml}}{lst:textwrap6-mod6} - - \cmhlistingsfromfile{demonstrations/textwrap6-mod7.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap7-yaml}}{lst:textwrap6-mod7} - - \cmhlistingsfromfile{demonstrations/textwrap6-mod8.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap8-yaml}}{lst:textwrap6-mod8} - \end{widepage} - - Notice that: - \begin{itemize} - \item in \cref{lst:textwrap6-mod6} the text wrapping routine has not been applied to any - \texttt{environments} because it has been switched off (per-code-block) in - \cref{lst:textwrap6-yaml}; - \item in \cref{lst:textwrap6-mod7} the text wrapping routine has not been applied to - \texttt{myenv} because it has been switched off (per-name) in - \cref{lst:textwrap7-yaml}; - \item in \cref{lst:textwrap6-mod8} the text wrapping routine has not been applied to - \texttt{masterDocument} because of the settings in \cref{lst:textwrap8-yaml}. - \end{itemize} - - The \texttt{columns} field has a variety of different ways that it can be - specified; we've seen two basic ways already: the default (set to - \texttt{0}) and a positive integer (see \vref{lst:textwrap6}, for - example). We explore further options in \crefrange{lst:textwrap9-yaml}{lst:textwrap11-yaml}. - - \begin{cmhtcbraster}[raster columns=3, - raster left skip=-3.5cm, - raster right skip=-2cm, - raster column skip=.03\linewidth] - \cmhlistingsfromfile{demonstrations/textwrap9.yaml}[MLB-TCB]{\texttt{textwrap9.yaml}}{lst:textwrap9-yaml} - \cmhlistingsfromfile{demonstrations/textwrap10.yaml}[MLB-TCB]{\texttt{textwrap10.yaml}}{lst:textwrap10-yaml} - \cmhlistingsfromfile{demonstrations/textwrap11.yaml}[MLB-TCB]{\texttt{textwrap11.yaml}}{lst:textwrap11-yaml} - \end{cmhtcbraster} - - \Cref{lst:textwrap9-yaml} and \cref{lst:textwrap10-yaml} are equivalent. Upon running - the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -s textwrap6.tex -l=textwrap9.yaml -m -latexindent.pl -s textwrap6.tex -l=textwrap11.yaml -m -\end{commandshell} - we receive the respective output given in \cref{lst:textwrap6-mod9,lst:textwrap6-mod11}. - - \begin{widepage} - \cmhlistingsfromfile{demonstrations/textwrap6-mod9.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap9-yaml}}{lst:textwrap6-mod9} - - \cmhlistingsfromfile*{demonstrations/textwrap6-mod11.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap11-yaml}}{lst:textwrap6-mod11} - \end{widepage} - - Notice that: - \begin{itemize} - \item in \cref{lst:textwrap6-mod9} the text for the \texttt{masterDocument} has been - wrapped using \texttt{30} columns, while \texttt{environments} has - been wrapped using \texttt{50} columns; - \item in \cref{lst:textwrap6-mod11} the text for \texttt{myenv} has been wrapped - using \texttt{50} columns, the text for \texttt{another} has - been wrapped using \texttt{15} columns, and \texttt{masterDocument} - has been wrapped using \texttt{30} columns. - \end{itemize} - If you don't specify a \texttt{default} value on per-code-block basis, then - the \texttt{default} value from \texttt{columns} will be inherited; - if you don't specify a default value for \texttt{columns} then - \texttt{80} will be used. - - \texttt{alignAtAmpersandTakesPriority} is set to \texttt{1} by default; assuming - that text wrapping is occurring on a per-code-block basis, and the current - environment/code block is specified within \vref{lst:aligndelims:basic} then text wrapping - will be disabled for this code block. - - If you wish to specify \texttt{afterHeading} commands (see - \vref{lst:indentAfterHeadings}) on a per-name basis, then you need to append the name with - \texttt{:heading}, for example, you might use \texttt{section:heading}. - -\subsubsection{Summary of text wrapping} - It is important to note the following: - \index{verbatim!within summary of text wrapping} - \begin{itemize} - \item Verbatim environments (\vref{lst:verbatimEnvironments}) and verbatim commands - (\vref{lst:verbatimCommands}) will \emph{not} be affected by the text - wrapping routine (see \vref{lst:textwrap2-mod1}); - \item comments will \emph{not} be affected by the text wrapping routine (see - \vref{lst:textwrap3-mod1}); - \item it is possible to wrap text on a per-code-block and a per-name basis; - \announce{2018-08-13}*{updates to textWrapOptions} - \item the text wrapping routine sets \texttt{preserveBlankLines} as - \texttt{1}; - \item indentation is performed \emph{after} the text wrapping routine; as such, - indented code will likely exceed any maximum value set in the \texttt{columns} - field. - \end{itemize} - -\subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline} - You can instruct \texttt{latexindent.pl} to - format% - \announce{2018-01-13}{one sentence per line} your file so that - it puts one sentence per line. Thank you to \cite{mlep} for helping to - shape and test this feature. The behaviour of this part of the script is controlled by - the switches detailed in \cref{lst:oneSentencePerLine}, all of which we discuss next. - \index{modifying linebreaks! by using one sentence per line} - \index{sentences!oneSentencePerLine} - \index{sentences!one sentence per line} - \index{regular expressions!lowercase alph a-z} - \index{regular expressions!uppercase alph A-Z} - - \cmhlistingsfromfile[style=oneSentencePerLine]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine} - -\yamltitle{manipulateSentences}{0|1} - This is a binary switch that details if \texttt{latexindent.pl} should perform the - sentence manipulation routine; it is \emph{off} (set to \texttt{0}) by default, and you will - need to turn it on (by setting it to \texttt{1}) if you want the script - to modify line breaks surrounding and within sentences. - -\yamltitle{removeSentenceLineBreaks}{0|1} - When operating upon sentences \texttt{latexindent.pl} will, by default, remove - internal line breaks as \texttt{removeSentenceLineBreaks} is set to - \texttt{1}. Setting this switch to \texttt{0} instructs - \texttt{latexindent.pl} not to do so. - \index{sentences!removing sentence line breaks} - - For example, consider \texttt{multiple-sentences.tex} shown in \cref{lst:multiple-sentences}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences} - - If we use the YAML files in \cref{lst:manipulate-sentences-yaml,lst:keep-sen-line-breaks-yaml}, and run the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl multiple-sentences -m -l=manipulate-sentences.yaml -latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml -\end{commandshell} - \end{widepage} - then we obtain the respective output given in \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml} - \end{cmhtcbraster} - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml} - \end{cmhtcbraster} - - Notice, in particular, that the `internal' sentence line breaks in - \cref{lst:multiple-sentences} have been removed in \cref{lst:multiple-sentences-mod1}, but have - not been removed in \cref{lst:multiple-sentences-mod2}. - - The remainder of the settings displayed in \vref{lst:oneSentencePerLine} instruct - \texttt{latexindent.pl} on how to define a sentence. From the perspective of - \texttt{latexindent.pl} a sentence must: - \index{sentences!follow} - \index{sentences!begin with} - \index{sentences!end with} - \begin{itemize} - \item \emph{follow} a certain character or set of characters (see - \cref{lst:sentencesFollow}); by default, this is either \lstinline!\par!, a - blank line, a full stop/period (.), exclamation mark (!), question mark (?) right brace - (\}) or a comment on the previous line; - \item \emph{begin} with a character type (see \cref{lst:sentencesBeginWith}); by - default, this is only capital letters; - \item \emph{end} with a character (see \cref{lst:sentencesEndWith}); by - default, these are full stop/period (.), exclamation mark (!) and question mark (?). - \end{itemize} - In each case, you can specify the \texttt{other} field to include any - pattern that you would like; you can specify anything in this field using the language of - regular expressions. - \index{regular expressions!lowercase alph a-z} - \index{regular expressions!uppercase alph A-Z} - - \begin{cmhtcbraster}[raster columns=3, - raster left skip=-3.5cm, - raster right skip=-2cm, - raster column skip=.06\linewidth] - \cmhlistingsfromfile[style=sentencesFollow]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow} - \cmhlistingsfromfile[style=sentencesBeginWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith} - \cmhlistingsfromfile[style=sentencesEndWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith} - \end{cmhtcbraster} - -\subsubsection{sentencesFollow} - Let's explore a few of the switches in \texttt{sentencesFollow}; let's start with - \vref{lst:multiple-sentences}, and use the YAML settings given in - \cref{lst:sentences-follow1-yaml}. Using the command - \index{sentences!follow} - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml -\end{commandshell} - we obtain the output given in \cref{lst:multiple-sentences-mod3}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml} - \end{cmhtcbraster} - - Notice that, because \texttt{blankLine} is set to \texttt{0}, - \texttt{latexindent.pl} will not seek sentences following a blank line, and so the - fourth sentence has not been accounted for. - - We can explore the \texttt{other} field in \cref{lst:sentencesFollow} with - the \texttt{.tex} file detailed in \cref{lst:multiple-sentences1}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml -latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml,sentences-follow2.yaml -\end{commandshell} - \end{widepage} - then we obtain the respective output given in \cref{lst:multiple-sentences1-mod1,lst:multiple-sentences1-mod2}. - \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1} - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=1cm}, - ] - \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow2.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml} - \end{cmhtcbraster} - - Notice that in \cref{lst:multiple-sentences1-mod1} the first sentence after the - \texttt{)} has not been accounted for, but that following the inclusion - of \cref{lst:sentences-follow2-yaml}, the output given in \cref{lst:multiple-sentences1-mod2} - demonstrates that the sentence \emph{has} been accounted for correctly. - -\subsubsection{sentencesBeginWith} - By default, \texttt{latexindent.pl} will only assume that sentences begin with the - upper case letters \texttt{A-Z}; you can instruct the script to define - sentences to begin with lower case letters (see \cref{lst:sentencesBeginWith}), and we can - use the \texttt{other} field to define sentences to begin with other - characters. - \index{sentences!begin with} - - \cmhlistingsfromfile{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml -latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml,sentences-begin1.yaml -\end{commandshell} - \end{widepage} - then we obtain the respective output given in \cref{lst:multiple-sentences2-mod1,lst:multiple-sentences2-mod2}. - \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1} - \index{regular expressions!numeric 0-9} - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=1cm}, - ] - \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-begin1.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml} - \end{cmhtcbraster} - Notice that in \cref{lst:multiple-sentences2-mod1}, the first sentence has been accounted for but - that the subsequent sentences have not. In \cref{lst:multiple-sentences2-mod2}, all of the - sentences have been accounted for, because the \texttt{other} field in - \cref{lst:sentences-begin1-yaml} has defined sentences to begin with either - \lstinline!$! or any numeric digit, \texttt{0} to - \texttt{9}. - -\subsubsection{sentencesEndWith} - Let's return to \vref{lst:multiple-sentences}; we have already seen the default way in - which \texttt{latexindent.pl} will operate on the sentences in this file in - \vref{lst:multiple-sentences-mod1}. We can populate the \texttt{other} field with - any character that we wish; for example, using the YAML specified in - \cref{lst:sentences-end1-yaml} and the command - \index{sentences!end with} - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences -m -l=sentences-end1.yaml -latexindent.pl multiple-sentences -m -l=sentences-end2.yaml -\end{commandshell} - then we obtain the output in \cref{lst:multiple-sentences-mod4}. - \index{regular expressions!lowercase alph a-z} - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml} - \end{cmhtcbraster} - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml} - \end{cmhtcbraster} - - There is a subtle difference between the output in \cref{lst:multiple-sentences-mod4,lst:multiple-sentences-mod5}; in - particular, in \cref{lst:multiple-sentences-mod4} the word \texttt{sentence} has not - been defined as a sentence, because we have not instructed \texttt{latexindent.pl} to - begin sentences with lower case letters. We have changed this by using the settings in - \cref{lst:sentences-end2-yaml}, and the associated output in \cref{lst:multiple-sentences-mod5} - reflects this. - - Referencing \vref{lst:sentencesEndWith}, you'll notice that there is a field called - \texttt{basicFullStop}, which is set to \texttt{0}, and that the - \texttt{betterFullStop} is set to \texttt{1} by default. - - Let's consider the file shown in \cref{lst:url}. - - \cmhlistingsfromfile{demonstrations/url.tex}{\texttt{url.tex}}{lst:url} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl url -m -l=manipulate-sentences.yaml -\end{commandshell} - we obtain the output given in \cref{lst:url-mod1}. - - \cmhlistingsfromfile{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1} - - Notice that the full stop within the url has been interpreted correctly. This is because, - within the \texttt{betterFullStop}, full stops at the end of sentences have the - following properties: - \begin{itemize} - \item they are ignored within \texttt{e.g.} and \texttt{i.e.}; - \item they can not be immediately followed by a lower case or upper case letter; - \item they can not be immediately followed by a hyphen, comma, or number. - \end{itemize} - If you find that the \texttt{betterFullStop} does not work for your purposes, then - you can switch it off by setting it to \texttt{0}, and you can - experiment with the \texttt{other} - field.% - \announce{2019-07-13}{fine tuning the betterFullStop} You can also seek - to customise the \texttt{betterFullStop} routine by using the - \emph{fine tuning}, detailed in \vref{lst:fineTuning}. - - The \texttt{basicFullStop} routine should probably be avoided in most situations, as - it does not accommodate the specifications above. For example, using the following - command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl url -m -l=alt-full-stop1.yaml -\end{commandshell} - and the YAML in \cref{lst:alt-full-stop1-yaml} gives the output in - \cref{lst:url-mod2}. - - \begin{cmhtcbraster}[ raster left skip=-3.5cm, - raster right skip=-2cm, - raster force size=false, - raster column 1/.style={add to width=.1\textwidth}, - raster column skip=.06\linewidth] - \cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/alt-full-stop1.yaml}[MLB-TCB,width=.5\textwidth]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml} - \end{cmhtcbraster} - - Notice that the full stop within the URL has not been accommodated correctly because of - the non-default settings in \cref{lst:alt-full-stop1-yaml}. - -\subsubsection{Features of the oneSentencePerLine routine} - The sentence manipulation routine takes place \emph{after} verbatim - \index{verbatim!in relation to oneSentencePerLine} environments, preamble and trailing comments have been - accounted for; this means that any characters within these types of code blocks will not - be part of the sentence manipulation routine. - - For example, if we begin with the \texttt{.tex} file in - \cref{lst:multiple-sentences3}, and run the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml -\end{commandshell} - then we obtain the output in \cref{lst:multiple-sentences3-mod1}. \cmhlistingsfromfile{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3} - \cmhlistingsfromfile{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1} - - Furthermore, if sentences run across environments then, by default, the line breaks - internal to the sentence will be removed. For example, if we use the - \texttt{.tex} file in \cref{lst:multiple-sentences4} and run the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences4 -m -l=manipulate-sentences.yaml -latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml -\end{commandshell} - then we obtain the output in \cref{lst:multiple-sentences4-mod1,lst:multiple-sentences4-mod2}. \cmhlistingsfromfile{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4} - \begin{widepage} - \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1} - \end{widepage} - \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2} - Once you've read \cref{sec:poly-switches}, you will know that you can accommodate the - removal of internal sentence line breaks by using the YAML in \cref{lst:item-rules2-yaml} - and the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml -\end{commandshell} - the output of which is shown in \cref{lst:multiple-sentences4-mod3}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml} - \end{cmhtcbraster} - -\subsubsection{text wrapping and indenting sentences} - The \texttt{oneSentencePerLine}% - \announce{2018-08-13}{oneSentencePerline text wrap and indent} can be instructed to perform - text wrapping and indentation upon sentences. - \index{sentences!text wrapping} - \index{sentences!indenting} - - Let's use the code in \cref{lst:multiple-sentences5}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences5.tex}{\texttt{multiple-sentences5.tex}}{lst:multiple-sentences5} - - Referencing \cref{lst:sentence-wrap1-yaml}, and running the following command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences5 -m -l=sentence-wrap1.yaml -\end{commandshell} - we receive the output given in \cref{lst:multiple-sentences5-mod1}. - - \begin{cmhtcbraster}[ raster left skip=-3.5cm, - raster right skip=-2cm, - raster force size=false, - raster column 1/.style={add to width=.1\textwidth}, - raster column skip=.06\linewidth] - \cmhlistingsfromfile{demonstrations/multiple-sentences5-mod1.tex}{\texttt{multiple-sentences5.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences5-mod1} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentence-wrap1.yaml}[MLB-TCB,width=0.5\textwidth]{\texttt{sentence-wrap1.yaml}}{lst:sentence-wrap1-yaml} - \end{cmhtcbraster} - - If you wish to specify the \texttt{columns} field on a per-code-block basis - for sentences, then you would use \texttt{sentence}; explicitly, starting with - \vref{lst:textwrap9-yaml}, for example, you would replace/append - \texttt{environments} with, for example, \texttt{sentence: 50}. - - If you specify \texttt{textWrapSentences} as 1, but do \emph{not} - specify a value for \texttt{columns} then the text wrapping will - \emph{not} operate on sentences, and you will see a warning in - \texttt{indent.log}. - - The indentation of sentences requires that sentences are stored as code blocks. This - means that you may need to tweak \vref{lst:sentencesEndWith}. Let's explore this in - relation to \cref{lst:multiple-sentences6}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences6.tex}{\texttt{multiple-sentences6.tex}}{lst:multiple-sentences6} - - By default, \texttt{latexindent.pl} will find the full-stop within the first - \texttt{item}, which means that, upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-y demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml -latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml -y="modifyLineBreaks:oneSentencePerLine:sentenceIndent:''" -\end{commandshell} - we receive the respective output in \cref{lst:multiple-sentences6-mod1} and - \cref{lst:multiple-sentences6-mod2}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod1.tex}{\texttt{multiple-sentences6-mod1.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences6-mod1} - - \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod2.tex}{\texttt{multiple-sentences6-mod2.tex} using \cref{lst:sentence-wrap1-yaml} and no sentence indentation}{lst:multiple-sentences6-mod2} - - We note that \cref{lst:multiple-sentences6-mod1} the \texttt{itemize} code block has - \emph{not} been indented appropriately. This is because the - oneSentencePerLine has been instructed to store sentences (because - \cref{lst:sentence-wrap1-yaml}); each sentence is then searched for code blocks. - - We can tweak the settings in \vref{lst:sentencesEndWith} to ensure that full stops are - not followed by \texttt{item} commands, and that the end of sentences - contains \lstinline!\end{itemize}! as in \cref{lst:itemize-yaml} (if you intend to use this, ensure that you - remove the line breaks from the \texttt{other} field). - \index{regular expressions!lowercase alph a-z} - \index{regular expressions!uppercase alph A-Z} - \index{regular expressions!numeric 0-9} - \index{regular expressions!horizontal space \textbackslash{h}} - - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/itemized.yaml}[MLB-TCB]{\texttt{itemize.yaml}}{lst:itemize-yaml} - - Upon running - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml,itemize.yaml -\end{commandshell} - we receive the output in \cref{lst:multiple-sentences6-mod3}. - - \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod3.tex}{\texttt{multiple-sentences6-mod3.tex} using \cref{lst:sentence-wrap1-yaml} and \cref{lst:itemize-yaml}}{lst:multiple-sentences6-mod3} - - Notice that the sentence has received indentation, and that the - \texttt{itemize} code block has been found and indented correctly. - -\subsection{removeParagraphLineBreaks: modifying line breaks for paragraphs}\label{subsec:removeparagraphlinebreaks} - When the \texttt{-m} switch is active \texttt{latexindent.pl} has the - ability to remove line breaks% - \announce{2017-05-27}{removeParagraphLineBreaks} from within paragraphs; the behaviour is controlled by the - \texttt{removeParagraphLineBreaks} field, detailed in \cref{lst:removeParagraphLineBreaks}. Thank you to - \cite{jowens} for shaping and assisting with the testing of this feature. -\yamltitle{removeParagraphLineBreaks}*{fields} - This feature is considered complimentary to the \texttt{oneSentencePerLine} feature - described in \vref{sec:onesentenceperline}. - \index{specialBeginEnd!removeParagraphLineBreaks} - - \cmhlistingsfromfile[style=removeParagraphLineBreaks]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{removeParagraphLineBreaks}}{lst:removeParagraphLineBreaks} - - This routine can be turned on \emph{globally} for \emph{every} - code block type known to \texttt{latexindent.pl} - (see \vref{tab:code-blocks}) by using the - \texttt{all} switch; by default, this switch is - \emph{off}. Assuming that the \texttt{all} switch is off, - then the routine can be controlled on a per-code-block-type basis, and within that, on a - per-name basis. We will consider examples of each of these in turn, but before we do, - let's specify what \texttt{latexindent.pl} considers as a paragraph: - \begin{itemize} - \item it must begin on its own line with either an alphabetic or numeric character, and not - with any of the code-block types detailed in \vref{tab:code-blocks}; - \item it can include line breaks, but finishes when it meets either a blank line, a - \lstinline!\par! command, or any of the user-specified settings in the - \texttt{paragraphsStopAt} field, detailed in \vref{lst:paragraphsStopAt}. - \end{itemize} - - Let's start with the \texttt{.tex} file in \cref{lst:shortlines}, - together with the YAML settings in \cref{lst:remove-para1-yaml}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines.tex}{\texttt{shortlines.tex}}{lst:shortlines} - \cmhlistingsfromfile{demonstrations/remove-para1.yaml}[MLB-TCB]{\texttt{remove-para1.yaml}}{lst:remove-para1-yaml} - \end{cmhtcbraster} - - Upon running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m shortlines.tex -o shortlines1.tex -l remove-para1.yaml -\end{commandshell} - then we obtain the output given in \cref{lst:shortlines1}. - - \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines1.tex}{\texttt{shortlines1.tex}}{lst:shortlines1} - - Keen readers may notice that some trailing white space must be present in the file in - \cref{lst:shortlines} which has crept in to the output in - \cref{lst:shortlines1}. This can be fixed using the YAML file in - \vref{lst:removeTWS-before} and running, for example, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m shortlines.tex -o shortlines1-tws.tex -l remove-para1.yaml,removeTWS-before.yaml -\end{commandshell} - in which case the output is as in \cref{lst:shortlines1-tws}; notice that the double - spaces present in \cref{lst:shortlines1} have been addressed. - - \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines1-tws.tex}{\texttt{shortlines1-tws.tex}}{lst:shortlines1-tws} - - Keeping with the settings in \cref{lst:remove-para1-yaml}, we note that the - \texttt{all} switch applies to \emph{all} code block - types. So, for example, let's consider the files in \cref{lst:shortlines-mand,lst:shortlines-opt} - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/shortlines-mand.tex}{\texttt{shortlines-mand.tex}}{lst:shortlines-mand} - \cmhlistingsfromfile{demonstrations/shortlines-opt.tex}{\texttt{shortlines-opt.tex}}{lst:shortlines-opt} - \end{cmhtcbraster} - - Upon running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m shortlines-mand.tex -o shortlines-mand1.tex -l remove-para1.yaml -latexindent.pl -m shortlines-opt.tex -o shortlines-opt1.tex -l remove-para1.yaml -\end{commandshell} - \end{widepage} - - then we obtain the respective output given in \cref{lst:shortlines-mand1,lst:shortlines-opt1}. - - \cmhlistingsfromfile{demonstrations/shortlines-mand1.tex}{\texttt{shortlines-mand1.tex}}{lst:shortlines-mand1} - \cmhlistingsfromfile{demonstrations/shortlines-opt1.tex}{\texttt{shortlines-opt1.tex}}{lst:shortlines-opt1} - - Assuming that we turn \emph{off} the \texttt{all} switch - (by setting it to \texttt{0}), then we can control the behaviour of - \texttt{removeParagraphLineBreaks} either on a per-code-block-type basis, or on a per-name - basis. - - For example, let's use the code in \cref{lst:shortlines-envs}, and consider the settings - in \cref{lst:remove-para2-yaml,lst:remove-para3-yaml}; note that in \cref{lst:remove-para2-yaml} we specify that - \emph{every} environment should receive treatment from the routine, while - in \cref{lst:remove-para3-yaml} we specify that \emph{only} the - \texttt{one} environment should receive the treatment. - - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/shortlines-envs.tex}{\texttt{shortlines-envs.tex}}{lst:shortlines-envs} - \end{minipage} - \hfill - \begin{minipage}{.49\linewidth} - \cmhlistingsfromfile{demonstrations/remove-para2.yaml}[MLB-TCB]{\texttt{remove-para2.yaml}}{lst:remove-para2-yaml} - \cmhlistingsfromfile{demonstrations/remove-para3.yaml}[MLB-TCB]{\texttt{remove-para3.yaml}}{lst:remove-para3-yaml} - \end{minipage} - - Upon running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m shortlines-envs.tex -o shortlines-envs2.tex -l remove-para2.yaml -latexindent.pl -m shortlines-envs.tex -o shortlines-envs3.tex -l remove-para3.yaml -\end{commandshell} - \end{widepage} - then we obtain the respective output given in \cref{lst:shortlines-envs2,lst:shortlines-envs3}. - - \cmhlistingsfromfile{demonstrations/shortlines-envs2.tex}{\texttt{shortlines-envs2.tex}}{lst:shortlines-envs2} - \cmhlistingsfromfile{demonstrations/shortlines-envs3.tex}{\texttt{shortlines-envs3.tex}}{lst:shortlines-envs3} - - The remaining code-block types can be customised in analogous ways, although note that - \texttt{commands}, \texttt{keyEqualsValuesBracesBrackets}, \texttt{namedGroupingBracesBrackets}, - \texttt{UnNamedGroupingBracesBrackets} are controlled by the \texttt{optionalArguments} and the - \texttt{mandatoryArguments}. - - The only special case is the \texttt{masterDocument} field; this is designed for - `chapter'-type files that may contain paragraphs that are not within any other - code-blocks. For example, consider the file in \cref{lst:shortlines-md}, with the YAML - settings in \cref{lst:remove-para4-yaml}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/shortlines-md.tex}{\texttt{shortlines-md.tex}}{lst:shortlines-md} - \cmhlistingsfromfile{demonstrations/remove-para4.yaml}[MLB-TCB]{\texttt{remove-para4.yaml}}{lst:remove-para4-yaml} - \end{cmhtcbraster} - - Upon running the following command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m shortlines-md.tex -o shortlines-md4.tex -l remove-para4.yaml -\end{commandshell} - \end{widepage} - then we obtain the output in \cref{lst:shortlines-md4}. \cmhlistingsfromfile{demonstrations/shortlines-md4.tex}{\texttt{shortlines-md4.tex}}{lst:shortlines-md4} - - Note% - \announce{2018-08-13}*{updates to all in removeParagraphLineBreaks} that the - \texttt{all} field can take the same exceptions detailed in - \cref{lst:textwrap6-yaml}{lst:textwrap8-yaml}. - -\yamltitle{paragraphsStopAt}*{fields} - The paragraph line break routine considers blank lines and the - \lstinline|\par| command to be the end of a paragraph; - \announce{2017-05-27}{paragraphsStopAt} you can fine tune the behaviour of the routine further by - using the \texttt{paragraphsStopAt} fields, shown in \cref{lst:paragraphsStopAt}. - \index{specialBeginEnd!paragraphsStopAt} - \index{verbatim!in relation to paragraphsStopAt} - - \cmhlistingsfromfile[style=paragraphsStopAt]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{paragraphsStopAt}}{lst:paragraphsStopAt} - - The fields specified in \texttt{paragraphsStopAt} tell \texttt{latexindent.pl} to - stop the current paragraph when it reaches a line that \emph{begins} with - any of the code-block types specified as \texttt{1} in - \cref{lst:paragraphsStopAt}. By default, you'll see that the paragraph line break - routine will stop when it reaches an environment or verbatim code block at the beginning - of a line. It is \emph{not} possible to specify these fields on a - per-name basis. - - Let's use the \texttt{.tex} file in \cref{lst:sl-stop}; we will, - in turn, consider the settings in \cref{lst:stop-command-yaml,lst:stop-comment-yaml}. - - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/sl-stop.tex}{\texttt{sl-stop.tex}}{lst:sl-stop} - \end{minipage} - \hfill - \begin{minipage}{.49\linewidth} - \cmhlistingsfromfile{demonstrations/stop-command.yaml}[MLB-TCB]{\texttt{stop-command.yaml}}{lst:stop-command-yaml} - - \cmhlistingsfromfile{demonstrations/stop-comment.yaml}[MLB-TCB]{\texttt{stop-comment.yaml}}{lst:stop-comment-yaml} - \end{minipage} - - Upon using the settings from \vref{lst:remove-para4-yaml} and running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m sl-stop.tex -o sl-stop4.tex -l remove-para4.yaml -latexindent.pl -m sl-stop.tex -o sl-stop4-command.tex -l=remove-para4.yaml,stop-command.yaml -latexindent.pl -m sl-stop.tex -o sl-stop4-comment.tex -l=remove-para4.yaml,stop-comment.yaml -\end{commandshell} - \end{widepage} - we obtain the respective outputs in \crefrange{lst:sl-stop4}{lst:sl-stop4-comment}; notice in particular - that: - \begin{itemize} - \item in \cref{lst:sl-stop4} the paragraph line break routine has included commands and - comments; - \item in \cref{lst:sl-stop4-command} the paragraph line break routine has - \emph{stopped} at the \texttt{emph} command, because in - \cref{lst:stop-command-yaml} we have specified \texttt{commands} to be - \texttt{1}, and \texttt{emph} is at the beginning of a - line; - \item in \cref{lst:sl-stop4-comment} the paragraph line break routine has - \emph{stopped} at the comments, because in \cref{lst:stop-comment-yaml} we - have specified \texttt{comments} to be \texttt{1}, and the - comment is at the beginning of a line. - \end{itemize} - In all outputs in \crefrange{lst:sl-stop4}{lst:sl-stop4-comment} we notice that the paragraph line break - routine has stopped at \lstinline!\begin{myenv}! because, by default, - \texttt{environments} is set to \texttt{1} in - \vref{lst:paragraphsStopAt}. - - \cmhlistingsfromfile{demonstrations/sl-stop4.tex}{\texttt{sl-stop4.tex}}{lst:sl-stop4} - \cmhlistingsfromfile{demonstrations/sl-stop4-command.tex}{\texttt{sl-stop4-command.tex}}{lst:sl-stop4-command} - \cmhlistingsfromfile{demonstrations/sl-stop4-comment.tex}{\texttt{sl-stop4-comment.tex}}{lst:sl-stop4-comment} - -\subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap} - - The% - \announce{2018-08-13}{combine text wrap and remove paragraph line breaks} text wrapping - routine (\vref{subsec:textwrapping}) and remove paragraph line breaks routine - (\vref{subsec:removeparagraphlinebreaks}) can be combined. - - We motivate this feature with the code given in \cref{lst:textwrap7}. - - \cmhlistingsfromfile{demonstrations/textwrap7.tex}{\texttt{textwrap7.tex}}{lst:textwrap7} - - Applying the text wrap routine from \vref{subsec:textwrapping} with, for example, - \vref{lst:textwrap3-yaml} gives the output in \cref{lst:textwrap7-mod3}. - - \cmhlistingsfromfile{demonstrations/textwrap7-mod3.tex}{\texttt{textwrap7.tex} using \cref{lst:textwrap3-yaml}}{lst:textwrap7-mod3} - - The text wrapping routine has behaved as expected, but it may be desired to remove - paragraph line breaks \emph{before} performing the text wrapping routine. - The desired behaviour can be achieved by employing the \texttt{beforeTextWrap} - switch. - - Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \index{switches!-o demonstration} - \begin{commandshell} -latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12 -\end{commandshell} - we obtain the output in \cref{lst:textwrap7-mod12}. + the output is shown in \cref{lst:mlb-bl-out}; note that the multiple blank lines have + been condensed into one blank line, and note also that we have used the \texttt{-m} + switch! \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12} - \cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml} - \end{cmhtcbraster} - - In \cref{lst:textwrap7-mod12} the paragraph line breaks have first been removed from - \cref{lst:textwrap7}, and then the text wrapping routine has been applied. It is - envisaged that variants of \cref{lst:textwrap12-yaml} will be among the most useful - settings for these two features. - -\subsection{Poly-switches}\label{sec:poly-switches} - Every other field in the \texttt{modifyLineBreaks} field uses poly-switches, and can - take one of the following% - \announce{2017-08-21}*{blank line poly-switch} integer values: - \index{modifying linebreaks! using poly-switches} - \index{poly-switches!definition} - \index{poly-switches!values} - \index{poly-switches!off by default: set to 0} - \begin{description} - \item[$-1$] \emph{remove mode}: line breaks before or after the - \emph{<part of thing>} can be removed (assuming that \texttt{preserveBlankLines} is - set to \texttt{0}); - \item[0] \emph{off mode}: line breaks will not be modified for the - \emph{<part of thing>} under consideration; - \item[1] \emph{add mode}: a line break will be added before or after the - \emph{<part of thing>} under consideration, assuming that - there is not already a line break before or after the \emph{<part of thing>}; - \item[2] \emph{comment then add mode}: a comment symbol will be added, followed by a line break - before or after the \emph{<part of thing>} under consideration, assuming that there - is not already a comment and line break before or after the \emph{<part of thing>}; - \item[3] \emph{add then blank line mode}% - \announce{2017-08-21}{blank line poly-switch}: a line break will be added before or after the - \emph{<part of thing>} under consideration, assuming that - there is not already a line break before or after the \emph{<part of thing>}, - followed by a blank line; - \item[4] \emph{add blank line mode}% - \announce{2019-07-13}{blank line poly-switch}; a blank line will - be added before or after the \emph{<part of thing>} under consideration, even if the - \emph{<part of thing>} is already on its own line. - \end{description} - In the above, \emph{<part of thing>} refers to either the - \emph{begin statement}, \emph{body} or - \emph{end statement} of the code blocks detailed in \vref{tab:code-blocks}. - All poly-switches are \emph{off} by default; - \texttt{latexindent.pl} searches first of all for per-name settings, and then - followed by global per-thing settings. - -\subsection{modifyLineBreaks for environments}\label{sec:modifylinebreaks-environments} - We start by viewing a snippet of \texttt{defaultSettings.yaml} in - \cref{lst:environments-mlb}; note that it contains \emph{global} settings - (immediately after the \texttt{environments} field) and that - \emph{per-name} settings are also allowed -- in the case of - \cref{lst:environments-mlb}, settings for \texttt{equation*} have been - specified for demonstration. Note that all poly-switches are \emph{off} (set to 0) - by default. - \index{poly-switches!default values} - \index{poly-switches!environment global example} - \index{poly-switches!environment per-code block example} - - \cmhlistingsfromfile[style=modifylinebreaksEnv]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb} - - Let's begin with the simple example given in \cref{lst:env-mlb1-tex}; note that we - have annotated key parts of the file using $\BeginStartsOnOwnLine$, - $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$ and $\EndFinishesWithLineBreak$, - these will be related to fields specified in \cref{lst:environments-mlb}. - \index{poly-switches!visualisation: $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$, $\EndFinishesWithLineBreak$} - - \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb1.tex}}{lst:env-mlb1-tex} -before words(*@$\BeginStartsOnOwnLine$@*) \begin{myenv}(*@$\BodyStartsOnOwnLine$@*)body of myenv(*@$\EndStartsOnOwnLine$@*)\end{myenv}(*@$\EndFinishesWithLineBreak$@*) after words -\end{cmhlistings} - -\subsubsection{Adding line breaks: BeginStartsOnOwnLine and BodyStartsOnOwnLine} - Let's explore \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine} in - \cref{lst:env-mlb1,lst:env-mlb2}, and in particular, let's allow each of them in turn to take - a value of $1$. - \index{modifying linebreaks! at the \emph{beginning} of a code block} - \index{poly-switches!adding line breaks: set to 1} - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb1.yaml}[MLB-TCB]{\texttt{env-mlb1.yaml}}{lst:env-mlb1} - \end{minipage} - \hfill - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb2.yaml}[MLB-TCB]{\texttt{env-mlb2.yaml}}{lst:env-mlb2} - \end{minipage} - - After running the following commands, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb.tex -l env-mlb1.yaml -latexindent.pl -m env-mlb.tex -l env-mlb2.yaml -\end{commandshell} - the output is as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2} respectively. - - \begin{widepage} - \begin{minipage}{.56\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod1.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb1}}{lst:env-mlb-mod1} - \end{minipage} - \hfill - \begin{minipage}{.43\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod2.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb2}}{lst:env-mlb-mod2} - \end{minipage} - \end{widepage} - - There are a couple of points to note: - \begin{itemize} - \item in \cref{lst:env-mlb-mod1} a line break has been added at the point denoted by - $\BeginStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; no other line breaks have been - changed; - \item in \cref{lst:env-mlb-mod2} a line break has been added at the point denoted by - $\BodyStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; furthermore, note that the - \emph{body} of \texttt{myenv} has received the appropriate - (default) indentation. - \end{itemize} - - Let's now change each of the \texttt{1} values in - \cref{lst:env-mlb1,lst:env-mlb2} so that they are $2$ and save them - into \texttt{env-mlb3.yaml} and \texttt{env-mlb4.yaml} respectively (see - \cref{lst:env-mlb3,lst:env-mlb4}). - \index{poly-switches!adding comments and then line breaks: set to 2} - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb3.yaml}[MLB-TCB]{\texttt{env-mlb3.yaml}}{lst:env-mlb3} - \end{minipage} - \hfill - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb4.yaml}[MLB-TCB]{\texttt{env-mlb4.yaml}}{lst:env-mlb4} - \end{minipage} - - Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod3,lst:env-mlb-mod4}. - - \begin{widepage} - \begin{minipage}{.56\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod3.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb3}}{lst:env-mlb-mod3} - \end{minipage} - \hfill - \begin{minipage}{.43\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod4.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb4}}{lst:env-mlb-mod4} - \end{minipage} - \end{widepage} - - Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but this time a - comment symbol has been added before adding the line break; in both cases, trailing - horizontal space has been stripped before doing so. - - Let's% - \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each - of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so that they - are $3$ and save them into \texttt{env-mlb5.yaml} and - \texttt{env-mlb6.yaml} respectively (see \cref{lst:env-mlb5,lst:env-mlb6}). - \index{poly-switches!adding blank lines: set to 3} - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb5.yaml}[MLB-TCB]{\texttt{env-mlb5.yaml}}{lst:env-mlb5} - \end{minipage} - \hfill - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb6.yaml}[MLB-TCB]{\texttt{env-mlb6.yaml}}{lst:env-mlb6} - \end{minipage} - - Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod5,lst:env-mlb-mod6}. - - \begin{widepage} - \begin{minipage}{.56\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod5.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb5}}{lst:env-mlb-mod5} - \end{minipage} - \hfill - \begin{minipage}{.43\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod6.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb6}}{lst:env-mlb-mod6} - \end{minipage} - \end{widepage} - - Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but this time a - \emph{blank line} has been added after adding the line break. - - Let's now change% - \announce{2019-07-13}{demonstration of new blank line poly-switch} each - of the \texttt{1} values in \cref{lst:env-mlb5,lst:env-mlb6} so that they - are $4$ and save them into \texttt{env-beg4.yaml} and - \texttt{env-body4.yaml} respectively (see \cref{lst:env-beg4,lst:env-body4}). - \index{poly-switches!adding blank lines (again"!): set to 4} - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4} - \end{minipage} - \hfill - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4} - \end{minipage} - - We will demonstrate this poly-switch value using the code in - \cref{lst:env-mlb1-text}. - - \cmhlistingsfromfile{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text} - - Upon running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb1.tex -l env-beg4.yaml -latexindent.pl -m env-mlb.1tex -l env-body4.yaml -\end{commandshell} - - then we receive the respective outputs in \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4} - \cmhlistingsfromfile{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4} - \end{cmhtcbraster} - - We note in particular that, by design, for this value of the poly-switches: - \begin{enumerate} - \item in \cref{lst:env-mlb1-beg4} a blank line has been inserted before the - \lstinline!\begin! statement, even though the \lstinline!\begin! - statement was already on its own line; - \item in \cref{lst:env-mlb1-body4} a blank line has been inserted before the beginning of the - \emph{body}, even though it already began on its own line. - \end{enumerate} - -\subsubsection{Adding line breaks using EndStartsOnOwnLine and EndFinishesWithLineBreak} - Let's explore \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak} in - \cref{lst:env-mlb7,lst:env-mlb8}, and in particular, let's allow each of them in turn to take - a value of $1$. - \index{modifying linebreaks! at the \emph{end} of a code block} - \index{poly-switches!adding line breaks: set to 1} - - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb7.yaml}[MLB-TCB]{\texttt{env-mlb7.yaml}}{lst:env-mlb7} - \end{minipage} - \hfill - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb8.yaml}[MLB-TCB]{\texttt{env-mlb8.yaml}}{lst:env-mlb8} - \end{minipage} - - After running the following commands, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb.tex -l env-mlb7.yaml -latexindent.pl -m env-mlb.tex -l env-mlb8.yaml -\end{commandshell} - the output is as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}. - - \begin{widepage} - \begin{minipage}{.42\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod7.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb7}}{lst:env-mlb-mod7} - \end{minipage} - \hfill - \begin{minipage}{.57\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod8.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb8}}{lst:env-mlb-mod8} - \end{minipage} - \end{widepage} - - There are a couple of points to note: - \begin{itemize} - \item in \cref{lst:env-mlb-mod7} a line break has been added at the point denoted by - $\EndStartsOnOwnLine$ in \vref{lst:env-mlb1-tex}; no other line breaks have been - changed and the \lstinline!\end{myenv}! statement has \emph{not} - received indentation (as intended); - \item in \cref{lst:env-mlb-mod8} a line break has been added at the point denoted by - $\EndFinishesWithLineBreak$ in \vref{lst:env-mlb1-tex}. - \end{itemize} - - Let's now change each of the \texttt{1} values in - \cref{lst:env-mlb7,lst:env-mlb8} so that they are $2$ and save them - into \texttt{env-mlb9.yaml} and \texttt{env-mlb10.yaml} respectively (see - \cref{lst:env-mlb9,lst:env-mlb10}). - \index{poly-switches!adding comments and then line breaks: set to 2} - - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb9.yaml}[MLB-TCB]{\texttt{env-mlb9.yaml}}{lst:env-mlb9} - \end{minipage} - \hfill - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb10.yaml}[MLB-TCB]{\texttt{env-mlb10.yaml}}{lst:env-mlb10} - \end{minipage} - - Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod9,lst:env-mlb-mod10}. - - \begin{widepage} - \begin{minipage}{.43\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod9.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb9}}{lst:env-mlb-mod9} - \end{minipage} - \hfill - \begin{minipage}{.56\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod10.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb10}}{lst:env-mlb-mod10} - \end{minipage} - \end{widepage} - - Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, but this time a - comment symbol has been added before adding the line break; in both cases, trailing - horizontal space has been stripped before doing so. - - Let's% - \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each - of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so that they - are $3$ and save them into \texttt{env-mlb11.yaml} and - \texttt{env-mlb12.yaml} respectively (see \cref{lst:env-mlb11,lst:env-mlb12}). - \index{poly-switches!adding blank lines: set to 3} - - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb11.yaml}[MLB-TCB]{\texttt{env-mlb11.yaml}}{lst:env-mlb11} - \end{minipage} - \hfill - \begin{minipage}{.49\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb12.yaml}[MLB-TCB]{\texttt{env-mlb12.yaml}}{lst:env-mlb12} - \end{minipage} - - Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod11,lst:env-mlb-mod12}. - - \begin{widepage} - \begin{minipage}{.42\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod11.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb11}}{lst:env-mlb-mod11} - \end{minipage} - \hfill - \begin{minipage}{.57\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb-mod12.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb12}}{lst:env-mlb-mod12} - \end{minipage} - \end{widepage} - - Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, and that a - \emph{blank line} has been added after the line break. - - Let's now change% - \announce{2019-07-13}{demonstration of new blank line poly-switch} each - of the \texttt{1} values in \cref{lst:env-mlb11,lst:env-mlb12} so that they - are $4$ and save them into \texttt{env-end4.yaml} and - \texttt{env-end-f4.yaml} respectively (see \cref{lst:env-end4,lst:env-end-f4}). - \index{poly-switches!adding blank lines (again"!): set to 4} - - \begin{minipage}{.45\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4} - \end{minipage} - \hfill - \begin{minipage}{.5\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4} - \end{minipage} - - We will demonstrate this poly-switch value using the code from - \vref{lst:env-mlb1-text}. - - Upon running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb1.tex -l env-end4.yaml -latexindent.pl -m env-mlb.1tex -l env-end-f4.yaml -\end{commandshell} - - then we receive the respective outputs in \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4} - \cmhlistingsfromfile{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4} - \end{cmhtcbraster} - - We note in particular that, by design, for this value of the poly-switches: - \begin{enumerate} - \item in \cref{lst:env-mlb1-end4} a blank line has been inserted before the - \lstinline!\end! statement, even though the \lstinline!\end! - statement was already on its own line; - \item in \cref{lst:env-mlb1-end-f4} a blank line has been inserted after the - \lstinline!\end! statement, even though it already began on its own line. - \end{enumerate} - -\subsubsection{poly-switches 1, 2, and 3 only add line breaks when necessary} - If you ask \texttt{latexindent.pl} to add a line break (possibly with a comment) - using a poly-switch value of $1$ (or $2$ - or $3$), it will only do so if necessary. For example, if you - process the file in \vref{lst:mlb2} using poly-switch values of 1, 2, or 3, - it will be left unchanged. - - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb2.tex}{\texttt{env-mlb2.tex}}{lst:mlb2} - \end{minipage} - \hfill - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb3.tex}{\texttt{env-mlb3.tex}}{lst:mlb3} - \end{minipage} - - Setting the poly-switches to a value of $4$ instructs - \texttt{latexindent.pl} to add a line break even if the \emph{<part of thing>} - is already on its own line; see \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4} and - \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}. - - In contrast, the output from processing the file in \cref{lst:mlb3} will - vary depending on the poly-switches used; in \cref{lst:env-mlb3-mod2} you'll see that - the comment symbol after the \lstinline!\begin{myenv}! has been moved to the next line, - as \texttt{BodyStartsOnOwnLine} is set to \texttt{1}. In - \cref{lst:env-mlb3-mod4} you'll see that the comment has been accounted for correctly - because \texttt{BodyStartsOnOwnLine} has been set to \texttt{2}, and - the comment symbol has \emph{not} been moved to its own line. You're - encouraged to experiment with \cref{lst:mlb3} and by setting the other - poly-switches considered so far to \texttt{2} in turn. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/env-mlb3-mod2.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb2}}{lst:env-mlb3-mod2} - \cmhlistingsfromfile{demonstrations/env-mlb3-mod4.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb4}}{lst:env-mlb3-mod4} - \end{cmhtcbraster} - - The details of the discussion in this section have concerned \emph{global} - poly-switches in the \texttt{environments} field; each switch can also be - specified on a \emph{per-name} basis, which would take priority over the - global values; with reference to \vref{lst:environments-mlb}, an example is shown for - the \texttt{equation*} environment. - -\subsubsection{Removing line breaks (poly-switches set to $-1$)} - Setting poly-switches to $-1$ tells \texttt{latexindent.pl} - to remove line breaks of the \emph{<part of the thing>}, if necessary. We will consider - the example code given in \cref{lst:mlb4}, noting in particular the - positions of the line break highlighters, $\BeginStartsOnOwnLine$, - $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$ and $\EndFinishesWithLineBreak$, - together with the associated YAML files in \crefrange{lst:env-mlb13}{lst:env-mlb16}. - \index{poly-switches!removing line breaks: set to -1} - - \begin{minipage}{.45\linewidth} - \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb4.tex}}{lst:mlb4} -before words(*@$\BeginStartsOnOwnLine$@*) -\begin{myenv}(*@$\BodyStartsOnOwnLine$@*) -body of myenv(*@$\EndStartsOnOwnLine$@*) -\end{myenv}(*@$\EndFinishesWithLineBreak$@*) -after words -\end{cmhlistings} - \end{minipage}% - \hfill - \begin{minipage}{.51\textwidth} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb13.yaml}[MLB-TCB]{\texttt{env-mlb13.yaml}}{lst:env-mlb13} - - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb14.yaml}[MLB-TCB]{\texttt{env-mlb14.yaml}}{lst:env-mlb14} - - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb15.yaml}[MLB-TCB]{\texttt{env-mlb15.yaml}}{lst:env-mlb15} - - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb16.yaml}[MLB-TCB]{\texttt{env-mlb16.yaml}}{lst:env-mlb16} - \end{minipage} - - After running the commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml -latexindent.pl -m env-mlb4.tex -l env-mlb14.yaml -latexindent.pl -m env-mlb4.tex -l env-mlb15.yaml -latexindent.pl -m env-mlb4.tex -l env-mlb16.yaml -\end{commandshell} - - we obtain the respective output in \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}. - - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb4-mod13.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb13}}{lst:env-mlb4-mod13} - \end{minipage} - \hfill - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb4-mod14.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb14}}{lst:env-mlb4-mod14} - \end{minipage} - - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb4-mod15.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb15}}{lst:env-mlb4-mod15} - \end{minipage} - \hfill - \begin{minipage}{.45\linewidth} - \cmhlistingsfromfile{demonstrations/env-mlb4-mod16.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb16}}{lst:env-mlb4-mod16} - \end{minipage} - - Notice that in: - \begin{itemize} - \item \cref{lst:env-mlb4-mod13} the line break denoted by $\BeginStartsOnOwnLine$ in - \cref{lst:mlb4} has been removed; - \item \cref{lst:env-mlb4-mod14} the line break denoted by $\BodyStartsOnOwnLine$ in - \cref{lst:mlb4} has been removed; - \item \cref{lst:env-mlb4-mod15} the line break denoted by $\EndStartsOnOwnLine$ in - \cref{lst:mlb4} has been removed; - \item \cref{lst:env-mlb4-mod16} the line break denoted by $\EndFinishesWithLineBreak$ in - \cref{lst:mlb4} has been removed. - \end{itemize} - We examined each of these cases separately for clarity of explanation, but you can - combine all of the YAML settings in \crefrange{lst:env-mlb13}{lst:env-mlb16} into one file; - alternatively, you could tell \texttt{latexindent.pl} to load them all by using the - following command, for example - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml -\end{commandshell} - \end{widepage} - which gives the output in \vref{lst:env-mlb1-tex}. - -\subsubsection{About trailing horizontal space} - Recall that on \cpageref{yaml:removeTrailingWhitespace} we discussed the YAML field - \texttt{removeTrailingWhitespace}, and that it has two (binary) switches to determine if - horizontal space should be removed \texttt{beforeProcessing} and - \texttt{afterProcessing}. The \texttt{beforeProcessing} is particularly relevant - when considering the \texttt{-m} switch; let's consider the file shown - in \cref{lst:mlb5}, which highlights trailing spaces. - - \begin{cmhtcbraster} - \begin{cmhlistings}[style=tcblatex,showspaces=true,escapeinside={(*@}{@*)}]{\texttt{env-mlb5.tex}}{lst:mlb5} -before words (*@$\BeginStartsOnOwnLine$@*) -\begin{myenv} (*@$\BodyStartsOnOwnLine$@*) -body of myenv (*@$\EndStartsOnOwnLine$@*) -\end{myenv} (*@$\EndFinishesWithLineBreak$@*) -after words -\end{cmhlistings} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/removeTWS-before.yaml}[yaml-TCB]{\texttt{removeTWS-before.yaml}}{lst:removeTWS-before} - \end{cmhtcbraster} - - The output from the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml -latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,removeTWS-before.yaml -\end{commandshell} - \end{widepage} - is shown, respectively, in \cref{lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS}; note that the trailing - horizontal white space has been preserved (by default) in \cref{lst:env-mlb5-modAll}, - while in \cref{lst:env-mlb5-modAll-remove-WS}, it has been removed using the switch specified in - \cref{lst:removeTWS-before}. - - \begin{widepage} - \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb5-modAll} - - \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll-remove-WS.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:removeTWS-before}}{lst:env-mlb5-modAll-remove-WS} - \end{widepage} - -\subsubsection{poly-switch line break removal and blank lines} - Now let's consider the file in \cref{lst:mlb6}, which contains blank lines. - \index{poly-switches!blank lines} - - \begin{cmhtcbraster} - \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb6.tex}}{lst:mlb6} -before words(*@$\BeginStartsOnOwnLine$@*) - - -\begin{myenv}(*@$\BodyStartsOnOwnLine$@*) - - -body of myenv(*@$\EndStartsOnOwnLine$@*) - - -\end{myenv}(*@$\EndFinishesWithLineBreak$@*) - -after words -\end{cmhlistings} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/UnpreserveBlankLines.yaml}[MLB-TCB]{\texttt{UnpreserveBlankLines.yaml}}{lst:UnpreserveBlankLines} - \end{cmhtcbraster} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{widepage} - \begin{commandshell} -latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml -latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,UnpreserveBlankLines.yaml -\end{commandshell} - \end{widepage} - we receive the respective outputs in \cref{lst:env-mlb6-modAll,lst:env-mlb6-modAll-un-Preserve-Blank-Lines}. In - \cref{lst:env-mlb6-modAll} we see that the multiple blank lines have each been - condensed into one blank line, but that blank lines have \emph{not} - been removed by the poly-switches -- this is because, by default, - \texttt{preserveBlankLines} is set to \texttt{1}. By contrast, in - \cref{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}, we have allowed the poly-switches to remove blank lines - because, in \cref{lst:UnpreserveBlankLines}, we have set \texttt{preserveBlankLines} to - \texttt{0}. - - \begin{cmhtcbraster}[ raster left skip=-3.5cm, - raster right skip=-2cm, - raster force size=false, - raster column 1/.style={add to width=-.2\textwidth}, - raster column 2/.style={add to width=.2\textwidth}, - raster column skip=.06\linewidth] - \cmhlistingsfromfile{demonstrations/env-mlb6-modAll.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb6-modAll} - \cmhlistingsfromfile{demonstrations/env-mlb6-modAll-un-Preserve-Blank-Lines.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:UnpreserveBlankLines}}{lst:env-mlb6-modAll-un-Preserve-Blank-Lines} - \end{cmhtcbraster} - - We can explore this further using the blank-line poly-switch value of - $3$; let's use the file given in \cref{lst:env-mlb7-tex}. - - \cmhlistingsfromfile{demonstrations/env-mlb7.tex}{\texttt{env-mlb7.tex}}{lst:env-mlb7-tex} - - Upon running the following commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m env-mlb7.tex -l env-mlb12.yaml,env-mlb13.yaml -latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankLines.yaml -\end{commandshell} - we receive the outputs given in \cref{lst:env-mlb7-preserve,lst:env-mlb7-no-preserve}. - - \cmhlistingsfromfile{demonstrations/env-mlb7-preserve.tex}{\texttt{env-mlb7-preserve.tex}}{lst:env-mlb7-preserve} - \cmhlistingsfromfile{demonstrations/env-mlb7-no-preserve.tex}{\texttt{env-mlb7-no-preserve.tex}}{lst:env-mlb7-no-preserve} - - Notice that in: - \begin{itemize} - \item \cref{lst:env-mlb7-preserve} that \lstinline!\end{one}! has added a blank line, - because of the value of \texttt{EndFinishesWithLineBreak} in \vref{lst:env-mlb12}, and - even though the line break ahead of \lstinline!\begin{two}! should have been removed - (because of \texttt{BeginStartsOnOwnLine} in \vref{lst:env-mlb13}), the blank line - has been preserved by default; - \item \cref{lst:env-mlb7-no-preserve}, by contrast, has had the additional line-break removed, - because of the settings in \cref{lst:UnpreserveBlankLines}. - \end{itemize} - -\subsection{Poly-switches for double back slash}\label{subsec:dbs} - With reference to \texttt{lookForAlignDelims} (see \vref{lst:aligndelims:basic})% - \announce{2019-07-13}{poly-switch for double back slash} you can - specify poly-switches to dictate the line-break behaviour of double back slashes in - environments (\vref{lst:tabularafter:basic}), commands (\vref{lst:matrixafter}), or - special code blocks (\vref{lst:specialafter}). Note that for these poly-switches to - take effect, the name of the code block must necessarily be specified within - \texttt{lookForAlignDelims} (\vref{lst:aligndelims:basic}); we will demonstrate this in what follows. - \index{delimiters!poly-switches for double back slash} - \index{modifying linebreaks! surrounding double back slash} - \index{poly-switches!for double back slash (delimiters)} - - Consider the code given in \cref{lst:dbs-demo}. - \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo} -\begin{tabular}{cc} - 1 & 2 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) 3 & 4 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) -\end{tabular} -\end{cmhlistings} - Referencing \cref{lst:dbs-demo}: - \begin{itemize} - \item \texttt{DBS} stands for \emph{double back slash}; - \item line breaks ahead of the double back slash are annotated by $\ElseStartsOnOwnLine$, - and are controlled by \texttt{DBSStartsOnOwnLine}; - \item line breaks after the double back slash are annotated by $\ElseFinishesWithLineBreak$, and - are controlled by \texttt{DBSFinishesWithLineBreak}. - \end{itemize} - - Let's explore each of these in turn. - -\subsubsection{Double back slash starts on own line} - We explore \texttt{DBSStartsOnOwnLine} ($\ElseStartsOnOwnLine$ in \cref{lst:dbs-demo}); starting with the code in - \cref{lst:dbs-demo}, together with the YAML files given in - \cref{lst:DBS1} and \cref{lst:DBS2} and running the following - commands - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m tabular3.tex -l DBS1.yaml -latexindent.pl -m tabular3.tex -l DBS2.yaml -\end{commandshell} - then we receive the respective output given in \cref{lst:tabular3-DBS1} and - \cref{lst:tabular3-DBS2}. - - \begin{cmhtcbraster}[raster column skip=.01\linewidth] - \cmhlistingsfromfile{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1} - \end{cmhtcbraster} - - \begin{cmhtcbraster}[raster column skip=.01\linewidth] - \cmhlistingsfromfile{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2} - \end{cmhtcbraster} - - We note that - \begin{itemize} - \item \cref{lst:DBS1} specifies \texttt{DBSStartsOnOwnLine} for - \emph{every} environment (that is within \texttt{lookForAlignDelims}, - \vref{lst:aligndelims:advanced}); - the double back slashes from \cref{lst:dbs-demo} have been moved to their own - line in \cref{lst:tabular3-DBS1}; - \item \cref{lst:DBS2} specifies \texttt{DBSStartsOnOwnLine} on a - \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims}, \vref{lst:aligndelims:advanced}); - the double back slashes from \cref{lst:dbs-demo} have been moved to their own - line in \cref{lst:tabular3-DBS2}, having added comment symbols before moving them. - \end{itemize} - -\subsubsection{Double back slash finishes with line break} - Let's now explore \texttt{DBSFinishesWithLineBreak} ($\ElseFinishesWithLineBreak$ in \cref{lst:dbs-demo}); starting with the code in - \cref{lst:dbs-demo}, together with the YAML files given in - \cref{lst:DBS3} and \cref{lst:DBS4} and running the following - commands - \index{poly-switches!for double back slash (delimiters)} - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m tabular3.tex -l DBS3.yaml -latexindent.pl -m tabular3.tex -l DBS4.yaml -\end{commandshell} - then we receive the respective output given in \cref{lst:tabular3-DBS3} and - \cref{lst:tabular3-DBS4}. - - \begin{cmhtcbraster}[raster column skip=.01\linewidth] - \cmhlistingsfromfile{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3} - \end{cmhtcbraster} - - \begin{cmhtcbraster}[raster column skip=.01\linewidth] - \cmhlistingsfromfile{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4} - \end{cmhtcbraster} - - We note that - \begin{itemize} - \item \cref{lst:DBS3} specifies \texttt{DBSFinishesWithLineBreak} for - \emph{every} environment (that is within \texttt{lookForAlignDelims}, - \vref{lst:aligndelims:advanced}); - the code following the double back slashes from \cref{lst:dbs-demo} has been - moved to their own line in \cref{lst:tabular3-DBS3}; - \item \cref{lst:DBS4} specifies \texttt{DBSFinishesWithLineBreak} on a - \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims}, \vref{lst:aligndelims:advanced}); - the first double back slashes from \cref{lst:dbs-demo} have moved code following - them to their own line in \cref{lst:tabular3-DBS4}, having added comment symbols - before moving them; the final double back slashes have \emph{not} added - a line break as they are at the end of the body within the code block. - \end{itemize} - -\subsubsection{Double back slash poly-switches for specialBeginEnd} - Let's explore the double back slash poly-switches for code blocks within - \texttt{specialBeginEnd} code blocks (\vref{lst:specialBeginEnd}); we begin with - the code within \cref{lst:special4}. - \index{specialBeginEnd!double backslash poly-switch demonstration} - \index{poly-switches!double backslash} - \index{poly-switches!for double back slash (delimiters)} - \index{specialBeginEnd!lookForAlignDelims} - \index{delimiters} - \index{linebreaks!summary of poly-switches} - - \cmhlistingsfromfile{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4} - - Upon using the YAML settings in \cref{lst:DBS5}, and running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m special4.tex -l DBS5.yaml -\end{commandshell} - then we receive the output given in \cref{lst:special4-DBS5}. - \index{delimiters!with specialBeginEnd and the -m switch} - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-.1\textwidth}, - raster column skip=.06\linewidth] - \cmhlistingsfromfile{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5} - \end{cmhtcbraster} - - There are a few things to note: - \begin{itemize} - \item in \cref{lst:DBS5} we have specified \texttt{cmhMath} within - \texttt{lookForAlignDelims}; without this, the double back slash poly-switches would be - ignored for this code block; - \item the \texttt{DBSFinishesWithLineBreak} poly-switch has controlled the line breaks following the - double back slashes; - \item the \texttt{SpecialEndStartsOnOwnLine} poly-switch has controlled the addition of a comment - symbol, followed by a line break, as it is set to a value of 2. - \end{itemize} - -\subsubsection{Double back slash poly-switches for optional and mandatory arguments} - For clarity, we provide a demonstration of controlling the double back slash - poly-switches for optional and mandatory arguments. We begin with the code in - \cref{lst:mycommand2}. - \index{poly-switches!for double back slash (delimiters)} - - \cmhlistingsfromfile{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2} - - Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m mycommand2.tex -l DBS6.yaml -latexindent.pl -m mycommand2.tex -l DBS7.yaml -\end{commandshell} - then we receive the output given in \cref{lst:mycommand2-DBS6,lst:mycommand2-DBS7}. - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-.1\textwidth}, - raster column skip=.03\linewidth] - \cmhlistingsfromfile{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6} - \end{cmhtcbraster} - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-.1\textwidth}, - raster column skip=.03\linewidth] - \cmhlistingsfromfile{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7} + \cmhlistingsfromfile{demonstrations/mlb1.tex}{\texttt{mlb1.tex}}{lst:mlb-bl} + \cmhlistingsfromfile{demonstrations/mlb1-out.tex}{\texttt{mlb1-mod1.tex}}{lst:mlb-bl-out} \end{cmhtcbraster} - -\subsubsection{Double back slash optional square brackets} - The pattern matching for the double back slash will also, optionally, allow trailing - square brackets that contain a measurement of vertical spacing, for example - \lstinline!\\[3pt]!. - \index{poly-switches!for double back slash (delimiters)} - - For example, beginning with the code in \cref{lst:pmatrix3} - - \cmhlistingsfromfile{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3} - - and running the following command, using \cref{lst:DBS3}, - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m pmatrix3.tex -l DBS3.yaml -\end{commandshell} - then we receive the output given in \cref{lst:pmatrix3-DBS3}. - - \cmhlistingsfromfile{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3} - - You can customise the pattern for the double back slash by exploring the - \emph{fine tuning} field detailed in \vref{lst:fineTuning}. - -\subsection{Poly-switches for other code blocks} - Rather than repeat the examples shown for the environment code blocks (in - \vref{sec:modifylinebreaks-environments}), we choose to detail the poly-switches for all other code - blocks in \cref{tab:poly-switch-mapping}; note that each and every one of these - poly-switches is \emph{off by default}, i.e, set to \texttt{0}. - - Note also that, by design, line breaks involving, \texttt{filecontents} and - `comment-marked' code blocks (\vref{lst:alignmentmarkup}) can - \emph{not} be modified using - \texttt{latexindent.pl}.% - \announce{2019-05-05}*{verbatim poly-switch} However, there are two poly-switches available for - \texttt{verbatim} code blocks: environments (\vref{lst:verbatimEnvironments}), - commands (\vref{lst:verbatimCommands}) and \texttt{specialBeginEnd} (\vref{lst:special-verb1-yaml}). - \index{specialBeginEnd!poly-switch summary} - \index{verbatim!poly-switch summary} - \index{poly-switches!summary of all poly-switches} - - \clearpage - \begin{longtable}{llll} - \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\ - \toprule - Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\ - \midrule - environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\ - & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\ - & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\ - & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\ - & \verb!after words! & & \\ - \cmidrule{2-4} - ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\ - & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\ - & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine % - \announce{2018-04-27}{new ifElseFi code block poly-switches} \\ - & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\ - & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\ - & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\ - & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\ - & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\ - & \verb!after words! & & \\ - \cmidrule{2-4} - optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\ - & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\ - \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\ - & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\ - & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\ - & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\ - & \verb!...! & & \\ - \cmidrule{2-4} - mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\ - & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\ - \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\ - & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\ - & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\ - & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\ - & \verb!...! & & \\ - \cmidrule{2-4} - commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\ - & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\ - & $\langle$\itshape{arguments}$\rangle$ & & \\ - \cmidrule{2-4} - namedGroupingBraces Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\ - & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\ - & $\langle$\itshape{braces/brackets}$\rangle$ & & \\ - \cmidrule{2-4} - keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\ - & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\ - & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\ - \cmidrule{2-4} - items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\ - & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\ - & \verb!...! & & \\ - \cmidrule{2-4} - specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\ - & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\ - & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine % - \announce{2018-04-27}{new special code block poly-switches} \\ - & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\ - & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\ - & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\ - & after words & & \\ - \cmidrule{2-4} - verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\ - \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\ - & after words & & \\ - \bottomrule - \end{longtable} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-combine-text-wrap-para-line-breaks.tex b/Master/texmf-dist/doc/support/latexindent/subsec-combine-text-wrap-para-line-breaks.tex new file mode 100644 index 00000000000..2c05d60dda6 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-combine-text-wrap-para-line-breaks.tex @@ -0,0 +1,112 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap} + + The% + \announce{2018-08-13}{combine text wrap and remove paragraph line breaks} text wrapping routine (\vref{subsec:textwrapping}) and remove + paragraph line breaks routine (\vref{subsec:removeparagraphlinebreaks}) can be combined. + + We motivate this feature with the code given in \cref{lst:textwrap7}. + + \cmhlistingsfromfile{demonstrations/textwrap7.tex}{\texttt{textwrap7.tex}}{lst:textwrap7} + + Applying the text wrap routine from \vref{subsec:textwrapping} with, for example, + \vref{lst:textwrap3-yaml} gives the output in \cref{lst:textwrap7-mod3}. + + \cmhlistingsfromfile{demonstrations/textwrap7-mod3.tex}{\texttt{textwrap7.tex} using \cref{lst:textwrap3-yaml}}{lst:textwrap7-mod3} + + The text wrapping routine has behaved as expected, but it may be desired to remove + paragraph line breaks \emph{before} performing the text wrapping routine. The desired + behaviour can be achieved by employing the \texttt{beforeTextWrap} switch. + + Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12 +\end{commandshell} + we obtain the output in \cref{lst:textwrap7-mod12}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12} + \cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml} + \end{cmhtcbraster} + + In \cref{lst:textwrap7-mod12} the paragraph line breaks have first been removed from + \cref{lst:textwrap7}, and then the text wrapping routine has been applied. It is + envisaged that variants of \cref{lst:textwrap12-yaml} will be among the most useful + settings for these two features. + +\subsubsection{text wrapping beforeFindingChildCodeBlocks}\label{subsubsec:text-wrap-remove-para-bfccb} + + \index{text wrap!recommended starting point} + + I% + \announce*{2021-07-31}{textWrapOptions new feature: beforeFindingChildCodeBlocks} think it likely that most users will wish to employ the + \texttt{beforeFindingChildCodeBlocks} option for the text wrap routine. + + To motivate its use, we begin with the file in \cref{lst:textwrap-bfccb}. + + \cmhlistingsfromfile*{demonstrations/textwrap-bfccb.tex}{\texttt{textwrap-bfccb.tex}}{lst:textwrap-bfccb} + + Using the settings in \cref{lst:textwrap12-yaml} and running + \begin{commandshell} +latexindent.pl -m textwrap-bfccb.tex -l=textwrap12.yaml -o=+-mod12 +\end{commandshell} + gives the output in \cref{lst:textwrap-bfccb-mod12} + + \cmhlistingsfromfile*{demonstrations/textwrap-bfccb-mod12.tex}{\texttt{textwrap-bfccb-mod12.tex}}{lst:textwrap-bfccb-mod12} + + Note that we have added a `ruler' to \cref{lst:textwrap-bfccb-mod12} to assist with + measuring. + + The output in \cref{lst:textwrap-bfccb-mod12} is not ideal, but it is \emph{expected}. + The reasoning is as follows: + \begin{itemize} + \item \texttt{latexindent.pl} first of all searches for code blocks (see + \vref{tab:code-blocks}); + \item it replaces each code block with a unique identifying string; + \item with the settings of \cref{lst:textwrap12-yaml} in place, it performs the paragraph line + break removal, and then the text wrapping routine first of all on the \texttt{text} + command, and then on the surrounding text; + \item the surrounding text does not know that \texttt{text} is a command. + \end{itemize} + + We can instruct \texttt{latexindent.pl} to perform text wrapping \emph{before searching + for child code blocks} by using the \texttt{beforeFindingChildCodeBlocks} field. + + We save the \emph{quick-start} settings from \cref{lst:textwrap-qs-yaml} into + \cref{lst:textwrap13-yaml} and change the value of \texttt{columns} for demonstration. + Upon running the command + \begin{commandshell} +latexindent.pl -m textwrap-bfccb.tex -l=textwrap13.yaml -o=+-mod13 +\end{commandshell} + we receive the output in \cref{lst:textwrap-bfccb-mod13}. + + \cmhlistingsfromfile*{demonstrations/textwrap13.yaml}[MLB-TCB,width=\linewidth]{\texttt{textwrap13.yaml} (tweaked quick start)}{lst:textwrap13-yaml} + + \cmhlistingsfromfile*{demonstrations/textwrap-bfccb-mod13.tex}{\texttt{textwrap-bfccb-mod13.tex}}{lst:textwrap-bfccb-mod13} + + This output is different from \cref{lst:textwrap-bfccb-mod12}, but is still not ideal, as + the \texttt{test} command has indented its mandatory argument. We can employ + \texttt{noAdditionalIndent} from \vref{sec:noadd-indent-rules} in + \cref{lst:textwrap14-yaml} and run the command + \begin{commandshell} +latexindent.pl -m textwrap-bfccb.tex -l=textwrap14.yaml -o=+-mod14 +\end{commandshell} + to receive the output in \cref{lst:textwrap-bfccb-mod14}. + + \begin{widepage} + \begin{cmhtcbraster} + \cmhlistingsfromfile*{demonstrations/textwrap-bfccb-mod14.tex}{\texttt{textwrap-bfccb-mod14.tex}}{lst:textwrap-bfccb-mod14} + \cmhlistingsfromfile*{demonstrations/textwrap14.yaml}[MLB-TCB]{\texttt{textwrap14.yaml}}{lst:textwrap14-yaml} + \end{cmhtcbraster} + \end{widepage} + + For reference, let's say that we had started from \cref{lst:textwrap12-yaml}, which + instructs \texttt{latexindent.pl} to apply the text-wrapping and + paragraph-line-break-removal routines to \emph{all} code blocks. In order to achieve the + output in \cref{lst:textwrap-bfccb-mod14}, then we would need to employ an exception, + which we demonstrate in \cref{lst:textwrap15-yaml}. + + \cmhlistingsfromfile*{demonstrations/textwrap15.yaml}[MLB-TCB]{\texttt{textwrap15.yaml}}{lst:textwrap15-yaml} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex b/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex index d38d4e3f549..79e0a288f0a 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex @@ -1,23 +1,22 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} -\subsection{Commands and the strings between their arguments}\label{subsec:commands-string-between} - The \texttt{command} code blocks will always look for optional (square bracketed) - and mandatory (curly braced) arguments which can contain comments, line breaks and - `beamer' commands \lstinline!<.*?>! between them. There are switches that can allow - them to contain other strings, which we discuss next. +\subsection{Commands and the strings between their arguments}\label{subsec:commands-string-between} The \texttt{command} code blocks will + always look for optional (square bracketed) and mandatory (curly braced) arguments which + can contain comments, line breaks and `beamer' commands \lstinline!<.*?>! between them. + There are switches that can allow them to contain other strings, which we discuss next. \yamltitle{commandCodeBlocks}*{fields} The \texttt{commandCodeBlocks} field% - \announce{2018-04-27}*{commandCodeBlocks} - contains a few switches detailed in \cref{lst:commandCodeBlocks}. + \announce{2018-04-27}*{commandCodeBlocks} contains a few switches detailed in + \cref{lst:commandCodeBlocks}. \cmhlistingsfromfile[style=commandCodeBlocks]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{commandCodeBlocks}}{lst:commandCodeBlocks} \yamltitle{roundParenthesesAllowed}{0|1} The need for this field was mostly motivated by commands found in code used to generate - images in \texttt{PSTricks} and \texttt{tikz}; for example, let's consider - the code given in \cref{lst:pstricks1}. + images in \texttt{PSTricks} and \texttt{tikz}; for example, let's consider the code given + in \cref{lst:pstricks1}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/pstricks1.tex}{\texttt{pstricks1.tex}}{lst:pstricks1} @@ -31,33 +30,35 @@ mandatory argument, followed by a round-parenthesis argument, $(u,v)$. By default, because \texttt{roundParenthesesAllowed} is set to $1$ in - \cref{lst:commandCodeBlocks}, then \texttt{latexindent.pl} will allow round parenthesis between - optional and mandatory arguments. In the case of the code in \cref{lst:pstricks1}, - \texttt{latexindent.pl} finds \emph{all} the arguments of + \cref{lst:commandCodeBlocks}, then \texttt{latexindent.pl} will allow round parenthesis + between optional and mandatory arguments. In the case of the code in + \cref{lst:pstricks1}, \texttt{latexindent.pl} finds \emph{all} the arguments of \lstinline!defFunction!, both before and after \lstinline!(u,v)!. The default output from running \texttt{latexindent.pl} on \cref{lst:pstricks1} actually - leaves it unchanged (see \cref{lst:pstricks1-default}); note in particular, this is because of - \texttt{noAdditionalIndentGlobal} as discussed on \cpageref{page:command:noAddGlobal}. + leaves it unchanged (see \cref{lst:pstricks1-default}); note in particular, this is + because of \texttt{noAdditionalIndentGlobal} as discussed on + \cpageref{page:command:noAddGlobal}. Upon using the YAML settings in \cref{lst:noRoundParentheses}, and running the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl pstricks1.tex -l noRoundParentheses.yaml \end{commandshell} - we obtain the output given in \cref{lst:pstricks1-nrp}. + we obtain the output given in \cref{lst:pstricks1-nrp}. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/pstricks1-nrp.tex}{\texttt{pstricks1.tex} using \cref{lst:noRoundParentheses}}{lst:pstricks1-nrp} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/noRoundParentheses.yaml}[yaml-TCB]{\texttt{noRoundParentheses.yaml}}{lst:noRoundParentheses} \end{cmhtcbraster} - Notice the difference between \cref{lst:pstricks1-default} and \cref{lst:pstricks1-nrp}; in - particular, in \cref{lst:pstricks1-nrp}, because round parentheses are - \emph{not} allowed, \texttt{latexindent.pl} finds that the - \lstinline!\defFunction! command finishes at the first opening round parenthesis. As such, - the remaining braced, mandatory, arguments are found to be \texttt{UnNamedGroupingBracesBrackets} (see \vref{tab:code-blocks}) which, - by default, assume indentation for their body, and hence the tabbed indentation in + Notice the difference between \cref{lst:pstricks1-default} and \cref{lst:pstricks1-nrp}; + in particular, in \cref{lst:pstricks1-nrp}, because round parentheses are \emph{not} + allowed, \texttt{latexindent.pl} finds that the + \lstinline!\defFunction! command finishes at the first opening round parenthesis. As + such, the remaining braced, mandatory, arguments are found to be + \texttt{UnNamedGroupingBracesBrackets} (see \vref{tab:code-blocks}) which, by default, + assume indentation for their body, and hence the tabbed indentation in \cref{lst:pstricks1-nrp}. Let's explore this using the YAML given in \cref{lst:defFunction} and run the command @@ -104,14 +105,13 @@ latexindent.pl pstricks1.tex -l defFunction.yaml \item the string \lstinline!to! (specified in \texttt{stringsAllowedBetweenArguments}) \item the optional argument \lstinline![in=110,out=-90]! \item the string \lstinline!++! (specified in \texttt{stringsAllowedBetweenArguments}) - \item the round-bracketed argument \lstinline!(0,-0.5cm)! because \texttt{roundParenthesesAllowed} is - $1$ by default + \item the round-bracketed argument \lstinline!(0,-0.5cm)! because + \texttt{roundParenthesesAllowed} is $1$ by default \item the string \lstinline!node! (specified in \texttt{stringsAllowedBetweenArguments}) \item the optional argument \lstinline![below,align=left,scale=0.5]! \end{itemize} - We can explore this further, for example using \cref{lst:draw} and running the - command + We can explore this further, for example using \cref{lst:draw} and running the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tikz-node1.tex -l draw.yaml @@ -127,8 +127,8 @@ latexindent.pl tikz-node1.tex -l draw.yaml \cref{lst:tikz-node1-draw} has been given the appropriate two-spaces worth of indentation specified in \cref{lst:draw}. - Let's compare this with the output from using the YAML settings in - \cref{lst:no-strings}, and running the command + Let's compare this with the output from using the YAML settings in \cref{lst:no-strings}, + and running the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl tikz-node1.tex -l no-strings.yaml @@ -145,18 +145,19 @@ latexindent.pl tikz-node1.tex -l no-strings.yaml \item the \lstinline!\draw! command finishes after the \lstinline!(c)!, as \texttt{stringsAllowedBetweenArguments} has been set to $0$ so there are no strings allowed between arguments; - \item it finds a \texttt{namedGroupingBracesBrackets} called \texttt{to} (see \vref{tab:code-blocks}) \emph{with} - argument \lstinline![in=110,out=-90]! - \item it finds another \texttt{namedGroupingBracesBrackets} but this time called \texttt{node} with - argument \lstinline![below,align=left,scale=0.5]! + \item it finds a \texttt{namedGroupingBracesBrackets} called \texttt{to} (see + \vref{tab:code-blocks}) \emph{with} argument \lstinline![in=110,out=-90]! + \item it finds another \texttt{namedGroupingBracesBrackets} but this time called \texttt{node} + with argument \lstinline![below,align=left,scale=0.5]! \end{itemize} Referencing \vref{lst:commandCodeBlocks},% - \announce{2018-04-27}*{amalgamate feature in commandCodeBlocks}, we see that the first field in the \texttt{stringsAllowedBetweenArguments} is - \texttt{amalgamate} and is set to \texttt{1} by default. This is for - users who wish to specify their settings in multiple YAML files. For example, by using - the settings in either \cref{lst:amalgamate-demo} or\cref{lst:amalgamate-demo1} is equivalent to - using the settings in \cref{lst:amalgamate-demo2}. + \announce{2018-04-27}*{amalgamate feature in commandCodeBlocks}, we see that the first + field in the \texttt{stringsAllowedBetweenArguments} is \texttt{amalgamate} and is set to + \texttt{1} by default. This is for users who wish to specify their settings in multiple + YAML files. For example, by using the settings in either \cref{lst:amalgamate-demo} + or\cref{lst:amalgamate-demo1} is equivalent to using the settings in + \cref{lst:amalgamate-demo2}. \begin{cmhtcbraster}[raster columns=3, raster left skip=-3.5cm, @@ -167,26 +168,27 @@ latexindent.pl tikz-node1.tex -l no-strings.yaml \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo2.yaml}[yaml-TCB]{\texttt{amalgamate-demo2.yaml}}{lst:amalgamate-demo2} \end{cmhtcbraster} - We specify \texttt{amalgamate} to be set to \texttt{0} and in which case - any settings loaded prior to those specified, including the default, will be overwritten. - For example, using the settings in \cref{lst:amalgamate-demo3} means that only the strings - specified in that field will be used. + We specify \texttt{amalgamate} to be set to \texttt{0} and in which case any settings + loaded prior to those specified, including the default, will be overwritten. For example, + using the settings in \cref{lst:amalgamate-demo3} means that only the strings specified + in that field will be used. \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo3.yaml}[yaml-TCB]{\texttt{amalgamate-demo3.yaml}}{lst:amalgamate-demo3} - It is important to note that the \texttt{amalgamate} field, if used, must be in the - first field, and specified using the syntax given in \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}. + It is important to note that the \texttt{amalgamate} field, if used, must be in the first + field, and specified using the syntax given in + \cref{lst:amalgamate-demo1,lst:amalgamate-demo2,lst:amalgamate-demo3}. - We may explore this feature further with the code in \cref{lst:for-each}, whose - default output is given in \cref{lst:for-each-default}. + We may explore this feature further with the code in \cref{lst:for-each}, whose default + output is given in \cref{lst:for-each-default}. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/for-each.tex}{\texttt{for-each.tex}}{lst:for-each} \cmhlistingsfromfile{demonstrations/for-each-default.tex}{\texttt{for-each} default output}{lst:for-each-default} \end{cmhtcbraster} - Let's compare this with the output from using the YAML settings in - \cref{lst:foreach}, and running the command + Let's compare this with the output from using the YAML settings in \cref{lst:foreach}, + and running the command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl for-each.tex -l foreach.yaml @@ -200,41 +202,42 @@ latexindent.pl for-each.tex -l foreach.yaml You might like to compare the output given in \cref{lst:for-each-default} and \cref{lst:for-each-mod1}. Note,in particular, in \cref{lst:for-each-default} that the - \texttt{foreach} command has not included any of the subsequent strings, and that - the braces have been treated as a \texttt{namedGroupingBracesBrackets}. In \cref{lst:for-each-mod1} the - \texttt{foreach} command has been allowed to have \lstinline!\x/\y! and - \texttt{in} between arguments because of the settings given in - \cref{lst:foreach}. + \texttt{foreach} command has not included any of the subsequent strings, and that the + braces have been treated as a \texttt{namedGroupingBracesBrackets}. In + \cref{lst:for-each-mod1} the \texttt{foreach} command has been allowed to have + \lstinline!\x/\y! and \texttt{in} between arguments because of the settings given + in \cref{lst:foreach}. \yamltitle{commandNameSpecial}*{fields} There are some special command names% \announce{2018-04-27}*{commandNameSpecial} that do not fit within the names recognised by \texttt{latexindent.pl}, the first one of which is \lstinline!\@ifnextchar[!. From the - perspective of \texttt{latexindent.pl}, the whole of the text \lstinline!\@ifnextchar[! is - a command, because it is immediately followed by sets of mandatory arguments. However, - without the \texttt{commandNameSpecial} field, \texttt{latexindent.pl} would not be able to - label it as such, because the \lstinline![! is, necessarily, not matched by a - closing \lstinline!]!. + perspective of \texttt{latexindent.pl}, the whole of the text \lstinline!\@ifnextchar[! + is a command, because it is immediately followed by sets of mandatory arguments. However, + without the \texttt{commandNameSpecial} field, \texttt{latexindent.pl} would not be able + to label it as such, because the \lstinline![! is, necessarily, not matched by a closing + \lstinline!]!. - For example, consider the sample file in \cref{lst:ifnextchar}, which has default - output in \cref{lst:ifnextchar-default}. + For example, consider the sample file in \cref{lst:ifnextchar}, which has default output + in \cref{lst:ifnextchar-default}. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/ifnextchar.tex}{\texttt{ifnextchar.tex}}{lst:ifnextchar} \cmhlistingsfromfile{demonstrations/ifnextchar-default.tex}{\texttt{ifnextchar.tex} default output}{lst:ifnextchar-default} \end{cmhtcbraster} - Notice that in \cref{lst:ifnextchar-default} the \texttt{parbox} command has been able - to indent its body, because \texttt{latexindent.pl} has successfully found the command + Notice that in \cref{lst:ifnextchar-default} the \texttt{parbox} command has been able to + indent its body, because \texttt{latexindent.pl} has successfully found the command \lstinline!\@ifnextchar! first; the pattern-matching of \texttt{latexindent.pl} starts - from \emph{the inner most <thing> and works outwards}, discussed in more detail on \cpageref{page:phases}. + from \emph{the inner most <thing> and works outwards}, discussed in more detail on + \cpageref{page:phases}. - For demonstration, we can compare this output with that given in \cref{lst:ifnextchar-off} - in which the settings from \cref{lst:no-ifnextchar} have dictated that no special command - names, including the \lstinline!\@ifnextchar[! command, should not be searched for - specially; as such, the \texttt{parbox} command has been \emph{unable} - to indent its body successfully, because the \lstinline!\@ifnextchar[! command has not been - found. + For demonstration, we can compare this output with that given in + \cref{lst:ifnextchar-off} in which the settings from \cref{lst:no-ifnextchar} have + dictated that no special command names, including the \lstinline!\@ifnextchar[! command, + should not be searched for specially; as such, the \texttt{parbox} command has been + \emph{unable} to indent its body successfully, because the \lstinline!\@ifnextchar[! + command has not been found. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/ifnextchar-off.tex}{\texttt{ifnextchar.tex} using \cref{lst:no-ifnextchar}}{lst:ifnextchar-off} @@ -242,8 +245,8 @@ latexindent.pl for-each.tex -l foreach.yaml \end{cmhtcbraster} The \texttt{amalgamate} field can be used for \texttt{commandNameSpecial}, just as for - \texttt{stringsAllowedBetweenArguments}. The same condition holds as stated previously, which we state - again here: + \texttt{stringsAllowedBetweenArguments}. The same condition holds as stated previously, + which we state again here: \index{warning!amalgamate field} \begin{warning} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex b/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex deleted file mode 100644 index a4b98981d2c..00000000000 --- a/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex +++ /dev/null @@ -1,170 +0,0 @@ -% arara: pdflatex: {shell: yes, files: [latexindent]} -\subsection{Conflicting poly-switches: sequential code blocks} - It is very easy to have conflicting poly-switches; if we use the example from - \vref{lst:mycommand1}, and consider the YAML settings given in \cref{lst:mycom-mlb4}. - The output from running - \index{poly-switches!conflicting switches} - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m -l=mycom-mlb4.yaml mycommand1.tex -\end{commandshell} - is given in \cref{lst:mycom-mlb4}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/mycommand1-mlb4.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb4}}{lst:mycommand1-mlb4} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb4.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb4.yaml}}{lst:mycom-mlb4} - \end{cmhtcbraster} - - Studying \cref{lst:mycom-mlb4}, we see that the two poly-switches are at opposition with - one another: - \begin{itemize} - \item on the one hand, \texttt{LCuBStartsOnOwnLine} should \emph{not} start on its own line - (as poly-switch is set to $-1$); - \item on the other hand, \texttt{RCuBFinishesWithLineBreak} \emph{should} finish with a line break. - \end{itemize} - So, which should win the conflict? As demonstrated in \cref{lst:mycommand1-mlb4}, it is clear - that \texttt{LCuBStartsOnOwnLine} won this conflict, and the reason is that - \emph{the second argument was processed after the first} -- in general, the most recently-processed code block and - associated poly-switch takes priority. - - We can explore this further by considering the YAML settings in \cref{lst:mycom-mlb5}; - upon running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m -l=mycom-mlb5.yaml mycommand1.tex -\end{commandshell} - we obtain the output given in \cref{lst:mycommand1-mlb5}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/mycommand1-mlb5.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb5}}{lst:mycommand1-mlb5} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb5.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb5.yaml}}{lst:mycom-mlb5} - \end{cmhtcbraster} - - As previously, the most-recently-processed code block takes priority -- as before, the - second (i.e, \emph{last}) argument. Exploring this further, we consider the - YAML settings in \cref{lst:mycom-mlb6}, which give associated output in - \cref{lst:mycommand1-mlb6}. - - \begin{cmhtcbraster}[raster column skip=.1\linewidth] - \cmhlistingsfromfile{demonstrations/mycommand1-mlb6.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb6}}{lst:mycommand1-mlb6} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb6.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb6.yaml}}{lst:mycom-mlb6} - \end{cmhtcbraster} - - Note that a \lstinline!%! \emph{has} been added to the trailing - first \lstinline!}!; this is because: - \begin{itemize} - \item while processing the \emph{first} argument, the trailing line break has been - removed (\texttt{RCuBFinishesWithLineBreak} set to $-1$); - \item while processing the \emph{second} argument, \texttt{latexindent.pl} finds that - it does \emph{not} begin on its own line, and so because - \texttt{LCuBStartsOnOwnLine} is set to $2$, it adds a comment, followed by a - line break. - \end{itemize} - -\subsection{Conflicting poly-switches: nested code blocks} - Now let's consider an example when nested code blocks have conflicting poly-switches; - we'll use the code in \cref{lst:nested-env}, noting that it contains nested - environments. - \index{poly-switches!conflicting switches} - - \cmhlistingsfromfile{demonstrations/nested-env.tex}{\texttt{nested-env.tex}}{lst:nested-env} - - Let's use the YAML settings given in \cref{lst:nested-env-mlb1-yaml}, which upon running the - command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m -l=nested-env-mlb1.yaml nested-env.tex -\end{commandshell} - gives the output in \cref{lst:nested-env-mlb1}. - - \begin{cmhtcbraster}[raster column skip=.05\linewidth] - \cmhlistingsfromfile{demonstrations/nested-env-mlb1.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb1-yaml}}{lst:nested-env-mlb1} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb1.yaml}}{lst:nested-env-mlb1-yaml} - \end{cmhtcbraster} - - In \cref{lst:nested-env-mlb1}, let's first of all note that both environments have received - the appropriate (default) indentation; secondly, note that the poly-switch - \texttt{EndStartsOnOwnLine} appears to have won the conflict, as \lstinline!\end{one}! has - had its leading line break removed. - - To understand it, let's talk about the three basic phases \label{page:phases}of - \texttt{latexindent.pl}: - \begin{enumerate} - \item Phase 1: packing, in which code blocks are replaced with unique ids, working from - \emph{the inside to the outside}, and then sequentially -- for example, in \cref{lst:nested-env}, - the \texttt{two} environment is found \emph{before} the - \texttt{one} environment; if the -m switch is active, then during this phase: - \begin{itemize} - \item line breaks at the beginning of the \texttt{body} can be added (if - \texttt{BodyStartsOnOwnLine} is $1$ or $2$) or removed (if - \texttt{BodyStartsOnOwnLine} is $-1$); - \item line breaks at the end of the body can be added (if \texttt{EndStartsOnOwnLine} is - $1$ or $2$) or removed (if \texttt{EndStartsOnOwnLine} is - $-1$); - \item line breaks after the end statement can be added (if \texttt{EndFinishesWithLineBreak} is - $1$ or $2$). - \end{itemize} - \item Phase 2: indentation, in which white space is added to the begin, body, and end - statements; - \item Phase 3: unpacking, in which unique ids are replaced by their \emph{indented} code - blocks; if the -m switch is active, then during this phase, - \begin{itemize} - \item line breaks before \texttt{begin} statements can be added or removed (depending - upon \texttt{BeginStartsOnOwnLine}); - \item line breaks after \emph{end} statements can be removed but - \emph{NOT} added (see \texttt{EndFinishesWithLineBreak}). - \end{itemize} - \end{enumerate} - - With reference to \cref{lst:nested-env-mlb1}, this means that during Phase 1: - \begin{itemize} - \item the \texttt{two} environment is found first, and the line break ahead of the - \lstinline!\end{two}! statement is removed because \texttt{EndStartsOnOwnLine} is set to - $-1$. Importantly, because, \emph{at this stage}, - \lstinline!\end{two}! \emph{does} finish with a line break, - \texttt{EndFinishesWithLineBreak} causes no action. - \item next, the \texttt{one} environment is found; the line break ahead of - \lstinline!\end{one}! is removed because \texttt{EndStartsOnOwnLine} is set to - $-1$. - \end{itemize} - The indentation is done in Phase 2; in Phase 3 \emph{there is no option to add a line break after the \lstinline!end! statements}. We can justify - this by remembering that during Phase 3, the \texttt{one} environment will be - found and processed first, followed by the \texttt{two} environment. If the - \texttt{two} environment were to add a line break after the - \lstinline!\end{two}! statement, then \texttt{latexindent.pl} would have no way of - knowing how much indentation to add to the subsequent text (in this case, - \lstinline!\end{one}!). - - We can explore this further using the poly-switches in \cref{lst:nested-env-mlb2}; upon - running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m -l=nested-env-mlb2.yaml nested-env.tex -\end{commandshell} - we obtain the output given in \cref{lst:nested-env-mlb2-output}. - - \begin{cmhtcbraster} - \cmhlistingsfromfile{demonstrations/nested-env-mlb2.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb2}}{lst:nested-env-mlb2-output} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb2.yaml}}{lst:nested-env-mlb2} - \end{cmhtcbraster} - - During Phase 1: - \begin{itemize} - \item the \texttt{two} environment is found first, and the line break ahead of the - \lstinline!\end{two}! statement is not changed because \texttt{EndStartsOnOwnLine} is set to - $1$. Importantly, because, \emph{at this stage}, - \lstinline!\end{two}! \emph{does} finish with a line break, - \texttt{EndFinishesWithLineBreak} causes no action. - \item next, the \texttt{one} environment is found; the line break ahead of - \lstinline!\end{one}! is already present, and no action is needed. - \end{itemize} - The indentation is done in Phase 2, and then in Phase 3, the \texttt{one} - environment is found and processed first, followed by the \texttt{two} - environment. \emph{At this stage}, the \texttt{two} environment finds - \texttt{EndFinishesWithLineBreak} is $-1$, so it removes the trailing line break; - remember, at this point, \texttt{latexindent.pl} has completely finished with the - \texttt{one} environment. diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex b/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex index 4bb5d127e50..56e5bed091e 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex @@ -8,12 +8,15 @@ \subsection{noAdditionalIndent and indentRules}\label{sec:noadd-indent-rules} \texttt{latexindent.pl} operates on files by looking for code blocks, as detailed in \vref{subsubsec:code-blocks}; - for each type of code block in \vref{tab:code-blocks} (which we will call a \emph{$\langle$thing$\rangle$} in what follows) it searches YAML fields for - information in the following order: + for each type of code block in \vref{tab:code-blocks} (which we will call a + \emph{$\langle$thing$\rangle$} in what follows) it searches YAML fields for information + in the following order: \begin{enumerate} - \item \texttt{noAdditionalIndent} for the \emph{name} of the current \emph{$\langle$thing$\rangle$}; + \item \texttt{noAdditionalIndent} for the \emph{name} of the current + \emph{$\langle$thing$\rangle$}; \item \texttt{indentRules} for the \emph{name} of the current \emph{$\langle$thing$\rangle$}; - \item \texttt{noAdditionalIndentGlobal} for the \emph{type} of the current \emph{$\langle$thing$\rangle$}; + \item \texttt{noAdditionalIndentGlobal} for the \emph{type} of the current + \emph{$\langle$thing$\rangle$}; \item \texttt{indentRulesGlobal} for the \emph{type} of the current \emph{$\langle$thing$\rangle$}. \end{enumerate} @@ -21,8 +24,9 @@ Using the above list, the first piece of information to be found will be used; failing that, the value of \texttt{defaultIndent} is used. If information is found in multiple fields, the first one according to the list above will be used; for example, if - information is present in both \texttt{indentRules} and in \texttt{noAdditionalIndentGlobal}, then - the information from \texttt{indentRules} takes priority. + information is present in both \texttt{indentRules} and in + \texttt{noAdditionalIndentGlobal}, then the information from \texttt{indentRules} takes + priority. We now present details for the different type of code blocks known to \texttt{latexindent.pl}, as detailed in \vref{tab:code-blocks}; for reference, there diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-one-sentence-per-line.tex b/Master/texmf-dist/doc/support/latexindent/subsec-one-sentence-per-line.tex new file mode 100644 index 00000000000..9fbaaade5d1 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-one-sentence-per-line.tex @@ -0,0 +1,404 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline} + + You can instruct \texttt{latexindent.pl} to format% + \announce{2018-01-13}{one sentence per line} your file so that it puts one sentence per + line. Thank you to \cite{mlep} for helping to shape and test this feature. The behaviour + of this part of the script is controlled by the switches detailed in + \cref{lst:oneSentencePerLine}, all of which we discuss next. + \index{modifying linebreaks! by using one sentence per line} + \index{sentences!oneSentencePerLine} + \index{sentences!one sentence per line} + \index{regular expressions!lowercase alph a-z} + \index{regular expressions!uppercase alph A-Z} + + \cmhlistingsfromfile[style=oneSentencePerLine]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{oneSentencePerLine}}{lst:oneSentencePerLine} + +\yamltitle{manipulateSentences}{0|1} + This is a binary switch that details if \texttt{latexindent.pl} should perform the + sentence manipulation routine; it is \emph{off} (set to \texttt{0}) by default, and you + will need to turn it on (by setting it to \texttt{1}) if you want the script to modify + line breaks surrounding and within sentences. + +\yamltitle{removeSentenceLineBreaks}{0|1} + When operating upon sentences \texttt{latexindent.pl} will, by default, remove internal + line breaks as \texttt{removeSentenceLineBreaks} is set to \texttt{1}. Setting this + switch to \texttt{0} instructs \texttt{latexindent.pl} not to do so. + \index{sentences!removing sentence line breaks} + + For example, consider \texttt{multiple-sentences.tex} shown in + \cref{lst:multiple-sentences}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences.tex}{\texttt{multiple-sentences.tex}}{lst:multiple-sentences} + + If we use the YAML files in + \cref{lst:manipulate-sentences-yaml,lst:keep-sen-line-breaks-yaml}, and run the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl multiple-sentences -m -l=manipulate-sentences.yaml +latexindent.pl multiple-sentences -m -l=keep-sen-line-breaks.yaml +\end{commandshell} + \end{widepage} + then we obtain the respective output given in + \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml} + \end{cmhtcbraster} + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/keep-sen-line-breaks.yaml}[MLB-TCB]{\texttt{keep-sen-line-breaks.yaml}}{lst:keep-sen-line-breaks-yaml} + \end{cmhtcbraster} + + Notice, in particular, that the `internal' sentence line breaks in + \cref{lst:multiple-sentences} have been removed in \cref{lst:multiple-sentences-mod1}, + but have not been removed in \cref{lst:multiple-sentences-mod2}. + + The remainder of the settings displayed in \vref{lst:oneSentencePerLine} instruct + \texttt{latexindent.pl} on how to define a sentence. From the perspective of + \texttt{latexindent.pl} a sentence must: + \index{sentences!follow} + \index{sentences!begin with} + \index{sentences!end with} + \begin{itemize} + \item \emph{follow} a certain character or set of characters (see + \cref{lst:sentencesFollow}); by default, this is either \lstinline!\par!, a + blank line, a full stop/period (.), exclamation mark (!), question mark (?) right brace + (\}) or a comment on the previous line; + \item \emph{begin} with a character type (see \cref{lst:sentencesBeginWith}); by + default, this is only capital letters; + \item \emph{end} with a character (see \cref{lst:sentencesEndWith}); by + default, these are full stop/period (.), exclamation mark (!) and question mark (?). + \end{itemize} + In each case, you can specify the \texttt{other} field to include any pattern that you + would like; you can specify anything in this field using the language of regular + expressions. + \index{regular expressions!lowercase alph a-z} + \index{regular expressions!uppercase alph A-Z} + + \begin{cmhtcbraster}[raster columns=3, + raster left skip=-3.5cm, + raster right skip=-2cm, + raster column skip=.06\linewidth] + \cmhlistingsfromfile[style=sentencesFollow]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow} + \cmhlistingsfromfile[style=sentencesBeginWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith} + \cmhlistingsfromfile[style=sentencesEndWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith} + \end{cmhtcbraster} + +\subsubsection{sentencesFollow} + Let's explore a few of the switches in \texttt{sentencesFollow}; let's start with + \vref{lst:multiple-sentences}, and use the YAML settings given in + \cref{lst:sentences-follow1-yaml}. Using the command + \index{sentences!follow} + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences -m -l=sentences-follow1.yaml +\end{commandshell} + we obtain the output given in \cref{lst:multiple-sentences-mod3}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml} + \end{cmhtcbraster} + + Notice that, because \texttt{blankLine} is set to \texttt{0}, \texttt{latexindent.pl} + will not seek sentences following a blank line, and so the fourth sentence has not been + accounted for. + + We can explore the \texttt{other} field in \cref{lst:sentencesFollow} with the + \texttt{.tex} file detailed in \cref{lst:multiple-sentences1}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences1.tex}{\texttt{multiple-sentences1.tex}}{lst:multiple-sentences1} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml +latexindent.pl multiple-sentences1 -m -l=manipulate-sentences.yaml,sentences-follow2.yaml +\end{commandshell} + \end{widepage} + then we obtain the respective output given in + \cref{lst:multiple-sentences1-mod1,lst:multiple-sentences1-mod2}. + \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod1.tex}{\texttt{multiple-sentences1.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences1-mod1} + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=1cm}, + ] + \cmhlistingsfromfile{demonstrations/multiple-sentences1-mod2.tex}{\texttt{multiple-sentences1.tex} using \cref{lst:sentences-follow2-yaml}}{lst:multiple-sentences1-mod2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow2.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml} + \end{cmhtcbraster} + + Notice that in \cref{lst:multiple-sentences1-mod1} the first sentence after the + \texttt{)} has not been accounted for, but that following the inclusion of + \cref{lst:sentences-follow2-yaml}, the output given in + \cref{lst:multiple-sentences1-mod2} demonstrates that the sentence \emph{has} been + accounted for correctly. + +\subsubsection{sentencesBeginWith} + By default, \texttt{latexindent.pl} will only assume that sentences begin with the upper + case letters \texttt{A-Z}; you can instruct the script to define sentences to begin with + lower case letters (see \cref{lst:sentencesBeginWith}), and we can use the \texttt{other} + field to define sentences to begin with other characters. + \index{sentences!begin with} + + \cmhlistingsfromfile{demonstrations/multiple-sentences2.tex}{\texttt{multiple-sentences2.tex}}{lst:multiple-sentences2} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml +latexindent.pl multiple-sentences2 -m -l=manipulate-sentences.yaml,sentences-begin1.yaml +\end{commandshell} + \end{widepage} + then we obtain the respective output given in + \cref{lst:multiple-sentences2-mod1,lst:multiple-sentences2-mod2}. + \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod1.tex}{\texttt{multiple-sentences2.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences2-mod1} + \index{regular expressions!numeric 0-9} + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=1cm}, + ] + \cmhlistingsfromfile{demonstrations/multiple-sentences2-mod2.tex}{\texttt{multiple-sentences2.tex} using \cref{lst:sentences-begin1-yaml}}{lst:multiple-sentences2-mod2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-begin1.yaml}[MLB-TCB,width=.45\textwidth]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml} + \end{cmhtcbraster} + Notice that in \cref{lst:multiple-sentences2-mod1}, the first sentence has been accounted + for but that the subsequent sentences have not. In \cref{lst:multiple-sentences2-mod2}, + all of the sentences have been accounted for, because the \texttt{other} field in + \cref{lst:sentences-begin1-yaml} has defined sentences to begin with either + \lstinline!$! or any numeric digit, \texttt{0} to + \texttt{9}. + +\subsubsection{sentencesEndWith} + Let's return to \vref{lst:multiple-sentences}; we have already seen the default way in + which \texttt{latexindent.pl} will operate on the sentences in this file in + \vref{lst:multiple-sentences-mod1}. We can populate the \texttt{other} field with any + character that we wish; for example, using the YAML specified in + \cref{lst:sentences-end1-yaml} and the command + \index{sentences!end with} + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences -m -l=sentences-end1.yaml +latexindent.pl multiple-sentences -m -l=sentences-end2.yaml +\end{commandshell} + then we obtain the output in \cref{lst:multiple-sentences-mod4}. + \index{regular expressions!lowercase alph a-z} + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml} + \end{cmhtcbraster} + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml} + \end{cmhtcbraster} + + There is a subtle difference between the output in + \cref{lst:multiple-sentences-mod4,lst:multiple-sentences-mod5}; in particular, in + \cref{lst:multiple-sentences-mod4} the word \texttt{sentence} has not been defined as a + sentence, because we have not instructed \texttt{latexindent.pl} to begin sentences with + lower case letters. We have changed this by using the settings in + \cref{lst:sentences-end2-yaml}, and the associated output in + \cref{lst:multiple-sentences-mod5} reflects this. + + Referencing \vref{lst:sentencesEndWith}, you'll notice that there is a field called + \texttt{basicFullStop}, which is set to \texttt{0}, and that the \texttt{betterFullStop} + is set to \texttt{1} by default. + + Let's consider the file shown in \cref{lst:url}. + + \cmhlistingsfromfile{demonstrations/url.tex}{\texttt{url.tex}}{lst:url} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl url -m -l=manipulate-sentences.yaml +\end{commandshell} + we obtain the output given in \cref{lst:url-mod1}. + + \cmhlistingsfromfile{demonstrations/url-mod1.tex}{\texttt{url.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:url-mod1} + + Notice that the full stop within the url has been interpreted correctly. This is because, + within the \texttt{betterFullStop}, full stops at the end of sentences have the following + properties: + \begin{itemize} + \item they are ignored within \texttt{e.g.} and \texttt{i.e.}; + \item they can not be immediately followed by a lower case or upper case letter; + \item they can not be immediately followed by a hyphen, comma, or number. + \end{itemize} + If you find that the \texttt{betterFullStop} does not work for your purposes, then you + can switch it off by setting it to \texttt{0}, and you can experiment with the + \texttt{other} field.% + \announce{2019-07-13}{fine tuning the betterFullStop} You can also seek to customise the \texttt{betterFullStop} + routine by using the \emph{fine tuning}, detailed in \vref{lst:fineTuning}. + + The \texttt{basicFullStop} routine should probably be avoided in most situations, as it + does not accommodate the specifications above. For example, using the following command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl url -m -l=alt-full-stop1.yaml +\end{commandshell} + and the YAML in \cref{lst:alt-full-stop1-yaml} gives the output in \cref{lst:url-mod2}. + + \begin{cmhtcbraster}[ raster left skip=-3.5cm, + raster right skip=-2cm, + raster force size=false, + raster column 1/.style={add to width=.1\textwidth}, + raster column skip=.06\linewidth] + \cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/alt-full-stop1.yaml}[MLB-TCB,width=.5\textwidth]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml} + \end{cmhtcbraster} + + Notice that the full stop within the URL has not been accommodated correctly because of + the non-default settings in \cref{lst:alt-full-stop1-yaml}. + +\subsubsection{Features of the oneSentencePerLine routine} + The sentence manipulation routine takes place \emph{after} verbatim + \index{verbatim!in relation to oneSentencePerLine} environments, preamble and trailing comments have been + accounted for; this means that any characters within these types of code blocks will not + be part of the sentence manipulation routine. + + For example, if we begin with the \texttt{.tex} file in \cref{lst:multiple-sentences3}, + and run the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml +\end{commandshell} + then we obtain the output in \cref{lst:multiple-sentences3-mod1}. + \cmhlistingsfromfile{demonstrations/multiple-sentences3.tex}{\texttt{multiple-sentences3.tex}}{lst:multiple-sentences3} + \cmhlistingsfromfile{demonstrations/multiple-sentences3-mod1.tex}{\texttt{multiple-sentences3.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences3-mod1} + + Furthermore, if sentences run across environments then, by default, the line breaks + internal to the sentence will be removed. For example, if we use the \texttt{.tex} file + in \cref{lst:multiple-sentences4} and run the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences4 -m -l=manipulate-sentences.yaml +latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml +\end{commandshell} + then we obtain the output in + \cref{lst:multiple-sentences4-mod1,lst:multiple-sentences4-mod2}. + \cmhlistingsfromfile{demonstrations/multiple-sentences4.tex}{\texttt{multiple-sentences4.tex}}{lst:multiple-sentences4} + \begin{widepage} + \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod1.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences4-mod1} + \end{widepage} + \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod2.tex}{\texttt{multiple-sentences4.tex} using \vref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences4-mod2} + + Once you've read \cref{sec:poly-switches}, you will know that you can accommodate the + removal of internal sentence line breaks by using the YAML in \cref{lst:item-rules2-yaml} + and the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml +\end{commandshell} + the output of which is shown in \cref{lst:multiple-sentences4-mod3}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml} + \end{cmhtcbraster} + +\subsubsection{Text wrapping and indenting sentences} + The \texttt{oneSentencePerLine}% + \announce{2018-08-13}{oneSentencePerline text wrap and indent} can be instructed to + perform text wrapping and indentation upon sentences. + \index{sentences!text wrapping} + \index{sentences!indenting} + + Let's use the code in \cref{lst:multiple-sentences5}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences5.tex}{\texttt{multiple-sentences5.tex}}{lst:multiple-sentences5} + + Referencing \cref{lst:sentence-wrap1-yaml}, and running the following command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences5 -m -l=sentence-wrap1.yaml +\end{commandshell} + we receive the output given in \cref{lst:multiple-sentences5-mod1}. + + \begin{cmhtcbraster}[ raster left skip=-3.5cm, + raster right skip=-2cm, + raster force size=false, + raster column 1/.style={add to width=.1\textwidth}, + raster column skip=.06\linewidth] + \cmhlistingsfromfile{demonstrations/multiple-sentences5-mod1.tex}{\texttt{multiple-sentences5.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences5-mod1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentence-wrap1.yaml}[MLB-TCB,width=0.5\textwidth]{\texttt{sentence-wrap1.yaml}}{lst:sentence-wrap1-yaml} + \end{cmhtcbraster} + + If you wish to specify the \texttt{columns} field on a per-code-block basis for + sentences, then you would use \texttt{sentence}; explicitly, starting with + \vref{lst:textwrap9-yaml}, for example, you would replace/append \texttt{environments} + with, for example, \texttt{sentence: 50}. + + If you specify \texttt{textWrapSentences} as 1, but do \emph{not} specify a value for + \texttt{columns} then the text wrapping will \emph{not} operate on sentences, and you + will see a warning in \texttt{indent.log}. + + The indentation of sentences requires that sentences are stored as code blocks. This + means that you may need to tweak \vref{lst:sentencesEndWith}. Let's explore this in + relation to \cref{lst:multiple-sentences6}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences6.tex}{\texttt{multiple-sentences6.tex}}{lst:multiple-sentences6} + + By default, \texttt{latexindent.pl} will find the full-stop within the first + \texttt{item}, which means that, upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-y demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml +latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml -y="modifyLineBreaks:oneSentencePerLine:sentenceIndent:''" +\end{commandshell} + we receive the respective output in \cref{lst:multiple-sentences6-mod1} and + \cref{lst:multiple-sentences6-mod2}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod1.tex}{\texttt{multiple-sentences6-mod1.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences6-mod1} + + \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod2.tex}{\texttt{multiple-sentences6-mod2.tex} using \cref{lst:sentence-wrap1-yaml} and no sentence indentation}{lst:multiple-sentences6-mod2} + + We note that \cref{lst:multiple-sentences6-mod1} the \texttt{itemize} code block has + \emph{not} been indented appropriately. This is because the oneSentencePerLine has been + instructed to store sentences (because \cref{lst:sentence-wrap1-yaml}); each sentence is + then searched for code blocks. + + We can tweak the settings in \vref{lst:sentencesEndWith} to ensure that full stops are + not followed by \texttt{item} commands, and that the end of sentences contains + \lstinline!\end{itemize}! as in \cref{lst:itemize-yaml} (if you intend to use this, + ensure that you remove the line breaks from the \texttt{other} field). + \index{regular expressions!lowercase alph a-z} + \index{regular expressions!uppercase alph A-Z} + \index{regular expressions!numeric 0-9} + \index{regular expressions!horizontal space \textbackslash{h}} + + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/itemized.yaml}[MLB-TCB]{\texttt{itemize.yaml}}{lst:itemize-yaml} + + Upon running + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl multiple-sentences6 -m -l=sentence-wrap1.yaml,itemize.yaml +\end{commandshell} + we receive the output in \cref{lst:multiple-sentences6-mod3}. + + \cmhlistingsfromfile{demonstrations/multiple-sentences6-mod3.tex}{\texttt{multiple-sentences6-mod3.tex} using \cref{lst:sentence-wrap1-yaml} and \cref{lst:itemize-yaml}}{lst:multiple-sentences6-mod3} + + Notice that the sentence has received indentation, and that the \texttt{itemize} code + block has been found and indented correctly. diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex b/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex deleted file mode 100644 index 4c0b7a8f051..00000000000 --- a/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex +++ /dev/null @@ -1,54 +0,0 @@ -% arara: pdflatex: {shell: yes, files: [latexindent]} -\subsection{Partnering BodyStartsOnOwnLine with argument-based poly-switches} - Some poly-switches need to be partnered together; in particular, when line breaks - involving the \emph{first} argument of a code block need to be accounted for - using both \texttt{BodyStartsOnOwnLine} (or its equivalent, see \vref{tab:poly-switch-mapping}) and \texttt{LCuBStartsOnOwnLine} for mandatory arguments, and - \texttt{LSqBStartsOnOwnLine} for optional arguments. - \index{poly-switches!conflicting partnering} - - Let's begin with the code in \cref{lst:mycommand1} and the YAML settings in - \cref{lst:mycom-mlb1}; with reference to \vref{tab:poly-switch-mapping}, the key - \texttt{CommandNameFinishesWithLineBreak} is an alias for \texttt{BodyStartsOnOwnLine}. - - \cmhlistingsfromfile{demonstrations/mycommand1.tex}{\texttt{mycommand1.tex}}{lst:mycommand1} - - Upon running the command - \index{switches!-l demonstration} - \index{switches!-m demonstration} - \begin{commandshell} -latexindent.pl -m -l=mycom-mlb1.yaml mycommand1.tex -\end{commandshell} - we obtain \cref{lst:mycommand1-mlb1}; note that the \emph{second} mandatory argument - beginning brace \lstinline!{! has had its leading line break removed, but that - the \emph{first} brace has not. - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-1cm}, - ] - \cmhlistingsfromfile{demonstrations/mycommand1-mlb1.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb1}}{lst:mycommand1-mlb1} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb1.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb1.yaml}}{lst:mycom-mlb1} - \end{cmhtcbraster} - - Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb2}; upon running - the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb2}; both - beginning braces \lstinline!{! have had their leading line breaks removed. - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-1cm}, - ] - \cmhlistingsfromfile{demonstrations/mycommand1-mlb2.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb2}}{lst:mycommand1-mlb2} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb2.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb2.yaml}}{lst:mycom-mlb2} - \end{cmhtcbraster} - - Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb3}; upon running - the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb3}. - - \begin{cmhtcbraster}[ - raster force size=false, - raster column 1/.style={add to width=-1cm}, - ] - \cmhlistingsfromfile{demonstrations/mycommand1-mlb3.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb3}}{lst:mycommand1-mlb3} - \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3} - \end{cmhtcbraster} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-poly-switches.tex b/Master/texmf-dist/doc/support/latexindent/subsec-poly-switches.tex new file mode 100644 index 00000000000..609e5ca748a --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-poly-switches.tex @@ -0,0 +1,1101 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{Poly-switches}\label{sec:poly-switches} + Every other field in the \texttt{modifyLineBreaks} field uses poly-switches, and can take + one of the following% + \announce{2017-08-21}*{blank line poly-switch} integer values: + \index{modifying linebreaks! using poly-switches} + \index{poly-switches!definition} + \index{poly-switches!values} + \index{poly-switches!off by default: set to 0} + \begin{description} + \item[$-1$] \emph{remove mode}: line breaks before or after the + \emph{<part of thing>} can be removed (assuming that \texttt{preserveBlankLines} is + set to \texttt{0}); + \item[0] \emph{off mode}: line breaks will not be modified for the + \emph{<part of thing>} under consideration; + \item[1] \emph{add mode}: a line break will be added before or after the + \emph{<part of thing>} under consideration, assuming that + there is not already a line break before or after the \emph{<part of thing>}; + \item[2] \emph{comment then add mode}: a comment symbol will be added, followed by a line break + before or after the \emph{<part of thing>} under consideration, assuming that there is + not already a comment and line break before or after the \emph{<part of thing>}; + \item[3] \emph{add then blank line mode}% + \announce{2017-08-21}{blank line poly-switch}: a line break will be added before or after + the \emph{<part of thing>} under consideration, assuming that there is not already a line + break before or after the \emph{<part of thing>}, followed by a blank line; + \item[4] \emph{add blank line mode}% + \announce{2019-07-13}{blank line poly-switch}; a blank line will + be added before or after the \emph{<part of thing>} under consideration, even if the + \emph{<part of thing>} is already on its own line. + \end{description} + In the above, \emph{<part of thing>} refers to either the \emph{begin statement}, + \emph{body} or \emph{end statement} of the code blocks detailed in + \vref{tab:code-blocks}. All poly-switches are \emph{off} by default; + \texttt{latexindent.pl} searches first of all for per-name settings, and then followed by + global per-thing settings. + +\subsubsection{Poly-switches for environments}\label{sec:modifylinebreaks-environments} + We start by viewing a snippet of \texttt{defaultSettings.yaml} in + \cref{lst:environments-mlb}; note that it contains \emph{global} settings (immediately + after the \texttt{environments} field) and that \emph{per-name} settings are also allowed + -- in the case of \cref{lst:environments-mlb}, settings for \texttt{equation*} have been + specified for demonstration. Note that all poly-switches are \emph{off} (set to 0) by + default. + \index{poly-switches!default values} + \index{poly-switches!environment global example} + \index{poly-switches!environment per-code block example} + + \cmhlistingsfromfile[style=modifylinebreaksEnv]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb} + + Let's begin with the simple example given in \cref{lst:env-mlb1-tex}; note that we have + annotated key parts of the file using $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, + $\EndStartsOnOwnLine$ and $\EndFinishesWithLineBreak$, these will be related to fields + specified in \cref{lst:environments-mlb}. + \index{poly-switches!visualisation: $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$, $\EndFinishesWithLineBreak$} + + \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb1.tex}}{lst:env-mlb1-tex} +before words(*@$\BeginStartsOnOwnLine$@*) \begin{myenv}(*@$\BodyStartsOnOwnLine$@*)body of myenv(*@$\EndStartsOnOwnLine$@*)\end{myenv}(*@$\EndFinishesWithLineBreak$@*) after words +\end{cmhlistings} + + \paragraph{Adding line breaks: BeginStartsOnOwnLine and BodyStartsOnOwnLine} + Let's explore \texttt{BeginStartsOnOwnLine} and \texttt{BodyStartsOnOwnLine} in + \cref{lst:env-mlb1,lst:env-mlb2}, and in particular, let's allow each of them in turn to + take a value of $1$. + \index{modifying linebreaks! at the \emph{beginning} of a code block} + \index{poly-switches!adding line breaks: set to 1} + + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb1.yaml}[MLB-TCB]{\texttt{env-mlb1.yaml}}{lst:env-mlb1} + \end{minipage} + \hfill + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb2.yaml}[MLB-TCB]{\texttt{env-mlb2.yaml}}{lst:env-mlb2} + \end{minipage} + + After running the following commands, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb.tex -l env-mlb1.yaml +latexindent.pl -m env-mlb.tex -l env-mlb2.yaml +\end{commandshell} + the output is as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2} respectively. + + \begin{widepage} + \begin{minipage}{.56\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod1.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb1}}{lst:env-mlb-mod1} + \end{minipage} + \hfill + \begin{minipage}{.43\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod2.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb2}}{lst:env-mlb-mod2} + \end{minipage} + \end{widepage} + + There are a couple of points to note: + \begin{itemize} + \item in \cref{lst:env-mlb-mod1} a line break has been added at the point denoted by + $\BeginStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; no other line breaks have been + changed; + \item in \cref{lst:env-mlb-mod2} a line break has been added at the point denoted by + $\BodyStartsOnOwnLine$ in \cref{lst:env-mlb1-tex}; furthermore, note that the \emph{body} + of \texttt{myenv} has received the appropriate (default) indentation. + \end{itemize} + + Let's now change each of the \texttt{1} values in \cref{lst:env-mlb1,lst:env-mlb2} so + that they are $2$ and save them into \texttt{env-mlb3.yaml} and \texttt{env-mlb4.yaml} + respectively (see \cref{lst:env-mlb3,lst:env-mlb4}). + \index{poly-switches!adding comments and then line breaks: set to 2} + + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb3.yaml}[MLB-TCB]{\texttt{env-mlb3.yaml}}{lst:env-mlb3} + \end{minipage} + \hfill + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb4.yaml}[MLB-TCB]{\texttt{env-mlb4.yaml}}{lst:env-mlb4} + \end{minipage} + + Upon running commands analogous to the above, we obtain + \cref{lst:env-mlb-mod3,lst:env-mlb-mod4}. + + \begin{widepage} + \begin{minipage}{.56\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod3.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb3}}{lst:env-mlb-mod3} + \end{minipage} + \hfill + \begin{minipage}{.43\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod4.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb4}}{lst:env-mlb-mod4} + \end{minipage} + \end{widepage} + + Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but + this time a comment symbol has been added before adding the line break; in both cases, + trailing horizontal space has been stripped before doing so. + + Let's% + \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each of the \texttt{1} values in + \cref{lst:env-mlb1,lst:env-mlb2} so that they are $3$ and save them into + \texttt{env-mlb5.yaml} and \texttt{env-mlb6.yaml} respectively (see + \cref{lst:env-mlb5,lst:env-mlb6}). + \index{poly-switches!adding blank lines: set to 3} + + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb5.yaml}[MLB-TCB]{\texttt{env-mlb5.yaml}}{lst:env-mlb5} + \end{minipage} + \hfill + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb6.yaml}[MLB-TCB]{\texttt{env-mlb6.yaml}}{lst:env-mlb6} + \end{minipage} + + Upon running commands analogous to the above, we obtain + \cref{lst:env-mlb-mod5,lst:env-mlb-mod6}. + + \begin{widepage} + \begin{minipage}{.56\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod5.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb5}}{lst:env-mlb-mod5} + \end{minipage} + \hfill + \begin{minipage}{.43\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod6.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb6}}{lst:env-mlb-mod6} + \end{minipage} + \end{widepage} + + Note that line breaks have been added as in \cref{lst:env-mlb-mod1,lst:env-mlb-mod2}, but + this time a \emph{blank line} has been added after adding the line break. + + Let's now change% + \announce{2019-07-13}{demonstration of new blank line poly-switch} each of the \texttt{1} values in + \cref{lst:env-mlb5,lst:env-mlb6} so that they are $4$ and save them into + \texttt{env-beg4.yaml} and \texttt{env-body4.yaml} respectively (see + \cref{lst:env-beg4,lst:env-body4}). + \index{poly-switches!adding blank lines (again"!): set to 4} + + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-beg4.yaml}[MLB-TCB]{\texttt{env-beg4.yaml}}{lst:env-beg4} + \end{minipage} + \hfill + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-body4.yaml}[MLB-TCB]{\texttt{env-body4.yaml}}{lst:env-body4} + \end{minipage} + + We will demonstrate this poly-switch value using the code in \cref{lst:env-mlb1-text}. + + \cmhlistingsfromfile{demonstrations/env-mlb1.tex}{\texttt{env-mlb1.tex}}{lst:env-mlb1-text} + + Upon running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb1.tex -l env-beg4.yaml +latexindent.pl -m env-mlb.1tex -l env-body4.yaml +\end{commandshell} + + then we receive the respective outputs in \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/env-mlb1-beg4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-beg4}}{lst:env-mlb1-beg4} + \cmhlistingsfromfile{demonstrations/env-mlb1-body4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-body4}}{lst:env-mlb1-body4} + \end{cmhtcbraster} + + We note in particular that, by design, for this value of the poly-switches: + \begin{enumerate} + \item in \cref{lst:env-mlb1-beg4} a blank line has been inserted before the + \lstinline!\begin! statement, even though the \lstinline!\begin! + statement was already on its own line; + \item in \cref{lst:env-mlb1-body4} a blank line has been inserted before the beginning of the + \emph{body}, even though it already began on its own line. + \end{enumerate} + + \paragraph{Adding line breaks using EndStartsOnOwnLine and EndFinishesWithLineBreak} + Let's explore \texttt{EndStartsOnOwnLine} and \texttt{EndFinishesWithLineBreak} in + \cref{lst:env-mlb7,lst:env-mlb8}, and in particular, let's allow each of them in turn to + take a value of $1$. + \index{modifying linebreaks! at the \emph{end} of a code block} + \index{poly-switches!adding line breaks: set to 1} + + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb7.yaml}[MLB-TCB]{\texttt{env-mlb7.yaml}}{lst:env-mlb7} + \end{minipage} + \hfill + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb8.yaml}[MLB-TCB]{\texttt{env-mlb8.yaml}}{lst:env-mlb8} + \end{minipage} + + After running the following commands, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb.tex -l env-mlb7.yaml +latexindent.pl -m env-mlb.tex -l env-mlb8.yaml +\end{commandshell} + the output is as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}. + + \begin{widepage} + \begin{minipage}{.42\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod7.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb7}}{lst:env-mlb-mod7} + \end{minipage} + \hfill + \begin{minipage}{.57\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod8.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb8}}{lst:env-mlb-mod8} + \end{minipage} + \end{widepage} + + There are a couple of points to note: + \begin{itemize} + \item in \cref{lst:env-mlb-mod7} a line break has been added at the point denoted by + $\EndStartsOnOwnLine$ in \vref{lst:env-mlb1-tex}; no other line breaks have been changed + and the \lstinline!\end{myenv}! statement has \emph{not} received indentation (as + intended); + \item in \cref{lst:env-mlb-mod8} a line break has been added at the point denoted by + $\EndFinishesWithLineBreak$ in \vref{lst:env-mlb1-tex}. + \end{itemize} + + Let's now change each of the \texttt{1} values in \cref{lst:env-mlb7,lst:env-mlb8} so + that they are $2$ and save them into \texttt{env-mlb9.yaml} and \texttt{env-mlb10.yaml} + respectively (see \cref{lst:env-mlb9,lst:env-mlb10}). + \index{poly-switches!adding comments and then line breaks: set to 2} + + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb9.yaml}[MLB-TCB]{\texttt{env-mlb9.yaml}}{lst:env-mlb9} + \end{minipage} + \hfill + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb10.yaml}[MLB-TCB]{\texttt{env-mlb10.yaml}}{lst:env-mlb10} + \end{minipage} + + Upon running commands analogous to the above, we obtain + \cref{lst:env-mlb-mod9,lst:env-mlb-mod10}. + + \begin{widepage} + \begin{minipage}{.43\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod9.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb9}}{lst:env-mlb-mod9} + \end{minipage} + \hfill + \begin{minipage}{.56\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod10.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb10}}{lst:env-mlb-mod10} + \end{minipage} + \end{widepage} + + Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, but + this time a comment symbol has been added before adding the line break; in both cases, + trailing horizontal space has been stripped before doing so. + + Let's% + \announce{2017-08-21}{demonstration of blank line poly-switch (3)} now change each of the \texttt{1} values in + \cref{lst:env-mlb7,lst:env-mlb8} so that they are $3$ and save them into + \texttt{env-mlb11.yaml} and \texttt{env-mlb12.yaml} respectively (see + \cref{lst:env-mlb11,lst:env-mlb12}). + \index{poly-switches!adding blank lines: set to 3} + + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb11.yaml}[MLB-TCB]{\texttt{env-mlb11.yaml}}{lst:env-mlb11} + \end{minipage} + \hfill + \begin{minipage}{.49\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb12.yaml}[MLB-TCB]{\texttt{env-mlb12.yaml}}{lst:env-mlb12} + \end{minipage} + + Upon running commands analogous to the above, we obtain + \cref{lst:env-mlb-mod11,lst:env-mlb-mod12}. + + \begin{widepage} + \begin{minipage}{.42\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod11.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb11}}{lst:env-mlb-mod11} + \end{minipage} + \hfill + \begin{minipage}{.57\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb-mod12.tex}{\texttt{env-mlb.tex} using \cref{lst:env-mlb12}}{lst:env-mlb-mod12} + \end{minipage} + \end{widepage} + + Note that line breaks have been added as in \cref{lst:env-mlb-mod7,lst:env-mlb-mod8}, and + that a \emph{blank line} has been added after the line break. + + Let's now change% + \announce{2019-07-13}{demonstration of new blank line poly-switch} each of the \texttt{1} values in + \cref{lst:env-mlb11,lst:env-mlb12} so that they are $4$ and save them into + \texttt{env-end4.yaml} and \texttt{env-end-f4.yaml} respectively (see + \cref{lst:env-end4,lst:env-end-f4}). + \index{poly-switches!adding blank lines (again"!): set to 4} + + \begin{minipage}{.45\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end4.yaml}[MLB-TCB]{\texttt{env-end4.yaml}}{lst:env-end4} + \end{minipage} + \hfill + \begin{minipage}{.5\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-end-f4.yaml}[MLB-TCB]{\texttt{env-end-f4.yaml}}{lst:env-end-f4} + \end{minipage} + + We will demonstrate this poly-switch value using the code from \vref{lst:env-mlb1-text}. + + Upon running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb1.tex -l env-end4.yaml +latexindent.pl -m env-mlb.1tex -l env-end-f4.yaml +\end{commandshell} + + then we receive the respective outputs in \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/env-mlb1-end4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end4}}{lst:env-mlb1-end4} + \cmhlistingsfromfile{demonstrations/env-mlb1-end-f4.tex}{\texttt{env-mlb1.tex} using \cref{lst:env-end-f4}}{lst:env-mlb1-end-f4} + \end{cmhtcbraster} + + We note in particular that, by design, for this value of the poly-switches: + \begin{enumerate} + \item in \cref{lst:env-mlb1-end4} a blank line has been inserted before the + \lstinline!\end! statement, even though the \lstinline!\end! + statement was already on its own line; + \item in \cref{lst:env-mlb1-end-f4} a blank line has been inserted after the + \lstinline!\end! statement, even though it already began on its own line. + \end{enumerate} + + \paragraph{poly-switches 1, 2, and 3 only add line breaks when necessary} + If you ask \texttt{latexindent.pl} to add a line break (possibly with a comment) using a + poly-switch value of $1$ (or $2$ or $3$), it will only do so if necessary. For example, + if you process the file in \vref{lst:mlb2} using poly-switch values of 1, 2, or 3, it + will be left unchanged. + + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb2.tex}{\texttt{env-mlb2.tex}}{lst:mlb2} + \end{minipage} + \hfill + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb3.tex}{\texttt{env-mlb3.tex}}{lst:mlb3} + \end{minipage} + + Setting the poly-switches to a value of $4$ instructs \texttt{latexindent.pl} to add a + line break even if the \emph{<part of thing>} is already on its own line; see + \cref{lst:env-mlb1-beg4,lst:env-mlb1-body4} and + \cref{lst:env-mlb1-end4,lst:env-mlb1-end-f4}. + + In contrast, the output from processing the file in \cref{lst:mlb3} will vary depending + on the poly-switches used; in \cref{lst:env-mlb3-mod2} you'll see that the comment symbol + after the \lstinline!\begin{myenv}! has been moved to the next line, as + \texttt{BodyStartsOnOwnLine} is set to \texttt{1}. In \cref{lst:env-mlb3-mod4} you'll see + that the comment has been accounted for correctly because \texttt{BodyStartsOnOwnLine} + has been set to \texttt{2}, and the comment symbol has \emph{not} been moved to its own + line. You're encouraged to experiment with \cref{lst:mlb3} and by setting the other + poly-switches considered so far to \texttt{2} in turn. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/env-mlb3-mod2.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb2}}{lst:env-mlb3-mod2} + \cmhlistingsfromfile{demonstrations/env-mlb3-mod4.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb4}}{lst:env-mlb3-mod4} + \end{cmhtcbraster} + + The details of the discussion in this section have concerned \emph{global} poly-switches + in the \texttt{environments} field; each switch can also be specified on a + \emph{per-name} basis, which would take priority over the global values; with reference + to \vref{lst:environments-mlb}, an example is shown for the \texttt{equation*} + environment. + + \paragraph{Removing line breaks (poly-switches set to $-1$)} + Setting poly-switches to $-1$ tells \texttt{latexindent.pl} to remove line breaks of the + \emph{<part of the thing>}, if necessary. We will consider the example code given in + \cref{lst:mlb4}, noting in particular the positions of the line break highlighters, + $\BeginStartsOnOwnLine$, $\BodyStartsOnOwnLine$, $\EndStartsOnOwnLine$ and + $\EndFinishesWithLineBreak$, together with the associated YAML files in + \crefrange{lst:env-mlb13}{lst:env-mlb16}. + \index{poly-switches!removing line breaks: set to -1} + + \begin{minipage}{.45\linewidth} + \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb4.tex}}{lst:mlb4} +before words(*@$\BeginStartsOnOwnLine$@*) +\begin{myenv}(*@$\BodyStartsOnOwnLine$@*) +body of myenv(*@$\EndStartsOnOwnLine$@*) +\end{myenv}(*@$\EndFinishesWithLineBreak$@*) +after words +\end{cmhlistings} + \end{minipage}% + \hfill + \begin{minipage}{.51\textwidth} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb13.yaml}[MLB-TCB]{\texttt{env-mlb13.yaml}}{lst:env-mlb13} + + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb14.yaml}[MLB-TCB]{\texttt{env-mlb14.yaml}}{lst:env-mlb14} + + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb15.yaml}[MLB-TCB]{\texttt{env-mlb15.yaml}}{lst:env-mlb15} + + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/env-mlb16.yaml}[MLB-TCB]{\texttt{env-mlb16.yaml}}{lst:env-mlb16} + \end{minipage} + + After running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml +latexindent.pl -m env-mlb4.tex -l env-mlb14.yaml +latexindent.pl -m env-mlb4.tex -l env-mlb15.yaml +latexindent.pl -m env-mlb4.tex -l env-mlb16.yaml +\end{commandshell} + + we obtain the respective output in \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}. + + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb4-mod13.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb13}}{lst:env-mlb4-mod13} + \end{minipage} + \hfill + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb4-mod14.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb14}}{lst:env-mlb4-mod14} + \end{minipage} + + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb4-mod15.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb15}}{lst:env-mlb4-mod15} + \end{minipage} + \hfill + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/env-mlb4-mod16.tex}{\texttt{env-mlb4.tex} using \cref{lst:env-mlb16}}{lst:env-mlb4-mod16} + \end{minipage} + + Notice that in: + \begin{itemize} + \item \cref{lst:env-mlb4-mod13} the line break denoted by $\BeginStartsOnOwnLine$ in + \cref{lst:mlb4} has been removed; + \item \cref{lst:env-mlb4-mod14} the line break denoted by $\BodyStartsOnOwnLine$ in + \cref{lst:mlb4} has been removed; + \item \cref{lst:env-mlb4-mod15} the line break denoted by $\EndStartsOnOwnLine$ in + \cref{lst:mlb4} has been removed; + \item \cref{lst:env-mlb4-mod16} the line break denoted by $\EndFinishesWithLineBreak$ in + \cref{lst:mlb4} has been removed. + \end{itemize} + We examined each of these cases separately for clarity of explanation, but you can + combine all of the YAML settings in \crefrange{lst:env-mlb13}{lst:env-mlb16} into one + file; alternatively, you could tell \texttt{latexindent.pl} to load them all by using the + following command, for example + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m env-mlb4.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml +\end{commandshell} + \end{widepage} + which gives the output in \vref{lst:env-mlb1-tex}. + + \paragraph{About trailing horizontal space} + Recall that on \cpageref{yaml:removeTrailingWhitespace} we discussed the YAML field + \texttt{removeTrailingWhitespace}, and that it has two (binary) switches to determine if + horizontal space should be removed \texttt{beforeProcessing} and + \texttt{afterProcessing}. The \texttt{beforeProcessing} is particularly relevant when + considering the \texttt{-m} switch; let's consider the file shown in \cref{lst:mlb5}, + which highlights trailing spaces. + + \begin{cmhtcbraster} + \begin{cmhlistings}[style=tcblatex,showspaces=true,escapeinside={(*@}{@*)}]{\texttt{env-mlb5.tex}}{lst:mlb5} +before words (*@$\BeginStartsOnOwnLine$@*) +\begin{myenv} (*@$\BodyStartsOnOwnLine$@*) +body of myenv (*@$\EndStartsOnOwnLine$@*) +\end{myenv} (*@$\EndFinishesWithLineBreak$@*) +after words +\end{cmhlistings} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/removeTWS-before.yaml}[yaml-TCB]{\texttt{removeTWS-before.yaml}}{lst:removeTWS-before} + \end{cmhtcbraster} + + The output from the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml +latexindent.pl -m env-mlb5.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,removeTWS-before.yaml +\end{commandshell} + \end{widepage} + is shown, respectively, in \cref{lst:env-mlb5-modAll,lst:env-mlb5-modAll-remove-WS}; note + that the trailing horizontal white space has been preserved (by default) in + \cref{lst:env-mlb5-modAll}, while in \cref{lst:env-mlb5-modAll-remove-WS}, it has been + removed using the switch specified in \cref{lst:removeTWS-before}. + + \begin{widepage} + \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb5-modAll} + + \cmhlistingsfromfile[showspaces=true]{demonstrations/env-mlb5-modAll-remove-WS.tex}{\texttt{env-mlb5.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:removeTWS-before}}{lst:env-mlb5-modAll-remove-WS} + \end{widepage} + + \paragraph{poly-switch line break removal and blank lines} + Now let's consider the file in \cref{lst:mlb6}, which contains blank lines. + \index{poly-switches!blank lines} + + \begin{cmhtcbraster} + \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb6.tex}}{lst:mlb6} +before words(*@$\BeginStartsOnOwnLine$@*) + + +\begin{myenv}(*@$\BodyStartsOnOwnLine$@*) + + +body of myenv(*@$\EndStartsOnOwnLine$@*) + + +\end{myenv}(*@$\EndFinishesWithLineBreak$@*) + +after words +\end{cmhlistings} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/UnpreserveBlankLines.yaml}[MLB-TCB]{\texttt{UnpreserveBlankLines.yaml}}{lst:UnpreserveBlankLines} + \end{cmhtcbraster} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml +latexindent.pl -m env-mlb6.tex -l env-mlb13.yaml,env-mlb14.yaml,env-mlb15.yaml,env-mlb16.yaml,UnpreserveBlankLines.yaml +\end{commandshell} + \end{widepage} + we receive the respective outputs in + \cref{lst:env-mlb6-modAll,lst:env-mlb6-modAll-un-Preserve-Blank-Lines}. In + \cref{lst:env-mlb6-modAll} we see that the multiple blank lines have each been condensed + into one blank line, but that blank lines have \emph{not} been removed by the + poly-switches -- this is because, by default, \texttt{preserveBlankLines} is set to + \texttt{1}. By contrast, in \cref{lst:env-mlb6-modAll-un-Preserve-Blank-Lines}, we have + allowed the poly-switches to remove blank lines because, in + \cref{lst:UnpreserveBlankLines}, we have set \texttt{preserveBlankLines} to \texttt{0}. + + \begin{cmhtcbraster}[ raster left skip=-3.5cm, + raster right skip=-2cm, + raster force size=false, + raster column 1/.style={add to width=-.2\textwidth}, + raster column 2/.style={add to width=.2\textwidth}, + raster column skip=.06\linewidth] + \cmhlistingsfromfile{demonstrations/env-mlb6-modAll.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16}}{lst:env-mlb6-modAll} + \cmhlistingsfromfile{demonstrations/env-mlb6-modAll-un-Preserve-Blank-Lines.tex}{\texttt{env-mlb6.tex} using \crefrange{lst:env-mlb4-mod13}{lst:env-mlb4-mod16} \emph{and} \cref{lst:UnpreserveBlankLines}}{lst:env-mlb6-modAll-un-Preserve-Blank-Lines} + \end{cmhtcbraster} + + We can explore this further using the blank-line poly-switch value of $3$; let's use the + file given in \cref{lst:env-mlb7-tex}. + + \cmhlistingsfromfile{demonstrations/env-mlb7.tex}{\texttt{env-mlb7.tex}}{lst:env-mlb7-tex} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m env-mlb7.tex -l env-mlb12.yaml,env-mlb13.yaml +latexindent.pl -m env-mlb7.tex -l env-mlb13.yaml,env-mlb14.yaml,UnpreserveBlankLines.yaml +\end{commandshell} + we receive the outputs given in \cref{lst:env-mlb7-preserve,lst:env-mlb7-no-preserve}. + + \cmhlistingsfromfile{demonstrations/env-mlb7-preserve.tex}{\texttt{env-mlb7-preserve.tex}}{lst:env-mlb7-preserve} + \cmhlistingsfromfile{demonstrations/env-mlb7-no-preserve.tex}{\texttt{env-mlb7-no-preserve.tex}}{lst:env-mlb7-no-preserve} + + Notice that in: + \begin{itemize} + \item \cref{lst:env-mlb7-preserve} that \lstinline!\end{one}! has added a blank line, + because of the value of \texttt{EndFinishesWithLineBreak} in \vref{lst:env-mlb12}, and + even though the line break ahead of \lstinline!\begin{two}! should have been removed + (because of \texttt{BeginStartsOnOwnLine} in \vref{lst:env-mlb13}), the blank line has + been preserved by default; + \item \cref{lst:env-mlb7-no-preserve}, by contrast, has had the additional line-break removed, + because of the settings in \cref{lst:UnpreserveBlankLines}. + \end{itemize} + +\subsubsection{Poly-switches for double back slash}\label{subsec:dbs} + With reference to \texttt{lookForAlignDelims} (see + \vref{lst:aligndelims:basic})% + \announce{2019-07-13}{poly-switch for double back slash} you can specify poly-switches to + dictate the line-break behaviour of double back slashes in environments + (\vref{lst:tabularafter:basic}), commands (\vref{lst:matrixafter}), or special code + blocks (\vref{lst:specialafter}). Note that for these poly-switches to take effect, the + name of the code block must necessarily be specified within \texttt{lookForAlignDelims} + (\vref{lst:aligndelims:basic}); we will demonstrate this in what follows. + \index{delimiters!poly-switches for double back slash} + \index{modifying linebreaks! surrounding double back slash} + \index{poly-switches!for double back slash (delimiters)} + + Consider the code given in \cref{lst:dbs-demo}. + \begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{tabular3.tex}}{lst:dbs-demo} +\begin{tabular}{cc} + 1 & 2 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) 3 & 4 (*@$\ElseStartsOnOwnLine$@*)\\(*@$\ElseFinishesWithLineBreak$@*) +\end{tabular} +\end{cmhlistings} + Referencing \cref{lst:dbs-demo}: + \begin{itemize} + \item \texttt{DBS} stands for \emph{double back slash}; + \item line breaks ahead of the double back slash are annotated by $\ElseStartsOnOwnLine$, and + are controlled by \texttt{DBSStartsOnOwnLine}; + \item line breaks after the double back slash are annotated by $\ElseFinishesWithLineBreak$, + and are controlled by \texttt{DBSFinishesWithLineBreak}. + \end{itemize} + + Let's explore each of these in turn. + + \paragraph{Double back slash starts on own line} + We explore \texttt{DBSStartsOnOwnLine} ($\ElseStartsOnOwnLine$ in \cref{lst:dbs-demo}); + starting with the code in \cref{lst:dbs-demo}, together with the YAML files given in + \cref{lst:DBS1} and \cref{lst:DBS2} and running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m tabular3.tex -l DBS1.yaml +latexindent.pl -m tabular3.tex -l DBS2.yaml +\end{commandshell} + then we receive the respective output given in \cref{lst:tabular3-DBS1} and + \cref{lst:tabular3-DBS2}. + + \begin{cmhtcbraster}[raster column skip=.01\linewidth] + \cmhlistingsfromfile{demonstrations/tabular3-mod1.tex}{\texttt{tabular3.tex} using \cref{lst:DBS1}}{lst:tabular3-DBS1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS1.yaml}[MLB-TCB]{\texttt{DBS1.yaml}}{lst:DBS1} + \end{cmhtcbraster} + + \begin{cmhtcbraster}[raster column skip=.01\linewidth] + \cmhlistingsfromfile{demonstrations/tabular3-mod2.tex}{\texttt{tabular3.tex} using \cref{lst:DBS2}}{lst:tabular3-DBS2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS2.yaml}[MLB-TCB]{\texttt{DBS2.yaml}}{lst:DBS2} + \end{cmhtcbraster} + + We note that + \begin{itemize} + \item \cref{lst:DBS1} specifies \texttt{DBSStartsOnOwnLine} for + \emph{every} environment (that is within \texttt{lookForAlignDelims}, + \vref{lst:aligndelims:advanced}); + the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in + \cref{lst:tabular3-DBS1}; + \item \cref{lst:DBS2} specifies \texttt{DBSStartsOnOwnLine} on a + \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims}, + \vref{lst:aligndelims:advanced}); + the double back slashes from \cref{lst:dbs-demo} have been moved to their own line in + \cref{lst:tabular3-DBS2}, having added comment symbols before moving them. + \end{itemize} + + \paragraph{Double back slash finishes with line break} + Let's now explore \texttt{DBSFinishesWithLineBreak} ($\ElseFinishesWithLineBreak$ in + \cref{lst:dbs-demo}); starting with the code in \cref{lst:dbs-demo}, together with the + YAML files given in \cref{lst:DBS3} and \cref{lst:DBS4} and running the following + commands + \index{poly-switches!for double back slash (delimiters)} + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m tabular3.tex -l DBS3.yaml +latexindent.pl -m tabular3.tex -l DBS4.yaml +\end{commandshell} + then we receive the respective output given in \cref{lst:tabular3-DBS3} and + \cref{lst:tabular3-DBS4}. + + \begin{cmhtcbraster}[raster column skip=.01\linewidth] + \cmhlistingsfromfile{demonstrations/tabular3-mod3.tex}{\texttt{tabular3.tex} using \cref{lst:DBS3}}{lst:tabular3-DBS3} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS3.yaml}[MLB-TCB]{\texttt{DBS3.yaml}}{lst:DBS3} + \end{cmhtcbraster} + + \begin{cmhtcbraster}[raster column skip=.01\linewidth] + \cmhlistingsfromfile{demonstrations/tabular3-mod4.tex}{\texttt{tabular3.tex} using \cref{lst:DBS4}}{lst:tabular3-DBS4} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS4.yaml}[MLB-TCB]{\texttt{DBS4.yaml}}{lst:DBS4} + \end{cmhtcbraster} + + We note that + \begin{itemize} + \item \cref{lst:DBS3} specifies \texttt{DBSFinishesWithLineBreak} for + \emph{every} environment (that is within \texttt{lookForAlignDelims}, + \vref{lst:aligndelims:advanced}); + the code following the double back slashes from \cref{lst:dbs-demo} has been moved to + their own line in \cref{lst:tabular3-DBS3}; + \item \cref{lst:DBS4} specifies \texttt{DBSFinishesWithLineBreak} on a + \emph{per-name} basis for \texttt{tabular} (that is within \texttt{lookForAlignDelims}, + \vref{lst:aligndelims:advanced}); + the first double back slashes from \cref{lst:dbs-demo} have moved code following them to + their own line in \cref{lst:tabular3-DBS4}, having added comment symbols before moving + them; the final double back slashes have \emph{not} added a line break as they are at the + end of the body within the code block. + \end{itemize} + + \paragraph{Double back slash poly-switches for specialBeginEnd} + Let's explore the double back slash poly-switches for code blocks within + \texttt{specialBeginEnd} code blocks (\vref{lst:specialBeginEnd}); we begin with the code + within \cref{lst:special4}. + \index{specialBeginEnd!double backslash poly-switch demonstration} + \index{poly-switches!double backslash} + \index{poly-switches!for double back slash (delimiters)} + \index{specialBeginEnd!lookForAlignDelims} + \index{delimiters} + \index{linebreaks!summary of poly-switches} + + \cmhlistingsfromfile{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4} + + Upon using the YAML settings in \cref{lst:DBS5}, and running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m special4.tex -l DBS5.yaml +\end{commandshell} + then we receive the output given in \cref{lst:special4-DBS5}. + \index{delimiters!with specialBeginEnd and the -m switch} + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-.1\textwidth}, + raster column skip=.06\linewidth] + \cmhlistingsfromfile{demonstrations/special4-mod5.tex}{\texttt{special4.tex} using \cref{lst:DBS5}}{lst:special4-DBS5} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS5.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS5.yaml}}{lst:DBS5} + \end{cmhtcbraster} + + There are a few things to note: + \begin{itemize} + \item in \cref{lst:DBS5} we have specified \texttt{cmhMath} within \texttt{lookForAlignDelims}; + without this, the double back slash poly-switches would be ignored for this code block; + \item the \texttt{DBSFinishesWithLineBreak} poly-switch has controlled the line breaks + following the double back slashes; + \item the \texttt{SpecialEndStartsOnOwnLine} poly-switch has controlled the addition of a + comment symbol, followed by a line break, as it is set to a value of 2. + \end{itemize} + + \paragraph{Double back slash poly-switches for optional and mandatory arguments} + For clarity, we provide a demonstration of controlling the double back slash + poly-switches for optional and mandatory arguments. We begin with the code in + \cref{lst:mycommand2}. + \index{poly-switches!for double back slash (delimiters)} + + \cmhlistingsfromfile{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2} + + Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m mycommand2.tex -l DBS6.yaml +latexindent.pl -m mycommand2.tex -l DBS7.yaml +\end{commandshell} + then we receive the output given in \cref{lst:mycommand2-DBS6,lst:mycommand2-DBS7}. + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-.1\textwidth}, + raster column skip=.03\linewidth] + \cmhlistingsfromfile{demonstrations/mycommand2-mod6.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS6}}{lst:mycommand2-DBS6} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS6.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS6.yaml}}{lst:DBS6} + \end{cmhtcbraster} + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-.1\textwidth}, + raster column skip=.03\linewidth] + \cmhlistingsfromfile{demonstrations/mycommand2-mod7.tex}{\texttt{mycommand2.tex} using \cref{lst:DBS7}}{lst:mycommand2-DBS7} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/DBS7.yaml}[MLB-TCB,width=0.6\textwidth]{\texttt{DBS7.yaml}}{lst:DBS7} + \end{cmhtcbraster} + + \paragraph{Double back slash optional square brackets} + The pattern matching for the double back slash will also, optionally, allow trailing + square brackets that contain a measurement of vertical spacing, for example + \lstinline!\\[3pt]!. + \index{poly-switches!for double back slash (delimiters)} + + For example, beginning with the code in \cref{lst:pmatrix3} + + \cmhlistingsfromfile{demonstrations/pmatrix3.tex}{\texttt{pmatrix3.tex}}{lst:pmatrix3} + + and running the following command, using \cref{lst:DBS3}, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m pmatrix3.tex -l DBS3.yaml +\end{commandshell} + then we receive the output given in \cref{lst:pmatrix3-DBS3}. + + \cmhlistingsfromfile{demonstrations/pmatrix3-mod3.tex}{\texttt{pmatrix3.tex} using \cref{lst:DBS3}}{lst:pmatrix3-DBS3} + + You can customise the pattern for the double back slash by exploring the \emph{fine + tuning} field detailed in \vref{lst:fineTuning}. + +\subsubsection{Poly-switches for other code blocks} + Rather than repeat the examples shown for the environment code blocks (in + \vref{sec:modifylinebreaks-environments}), we choose to detail the poly-switches for all + other code blocks in \cref{tab:poly-switch-mapping}; note that each and every one of + these poly-switches is \emph{off by default}, i.e, set to \texttt{0}. + + Note also that, by design, line breaks involving, \texttt{filecontents} and + `comment-marked' code blocks (\vref{lst:alignmentmarkup}) can \emph{not} be modified + using \texttt{latexindent.pl}.% + \announce{2019-05-05}*{verbatim poly-switch} However, there are two poly-switches + available for \texttt{verbatim} code blocks: environments + (\vref{lst:verbatimEnvironments}), commands (\vref{lst:verbatimCommands}) and + \texttt{specialBeginEnd} (\vref{lst:special-verb1-yaml}). + \index{specialBeginEnd!poly-switch summary} + \index{verbatim!poly-switch summary} + \index{poly-switches!summary of all poly-switches} + + \clearpage + \begin{longtable}{llll} + \caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping} \\ + \toprule + Code block & Sample & \multicolumn{2}{c}{Poly-switch mapping} \\ + \midrule + environment & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & BeginStartsOnOwnLine \\ + & \verb!\begin{myenv}!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\ + & \verb!body of myenv!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & EndStartsOnOwnLine \\ + & \verb!\end{myenv}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & EndFinishesWithLineBreak \\ + & \verb!after words! & & \\ + \cmidrule{2-4} + ifelsefi & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & IfStartsOnOwnLine \\ + & \verb!\if...!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & BodyStartsOnOwnLine \\ + & \verb!body of if/or statement!$\OrStartsOnOwnLine$ & $\OrStartsOnOwnLine$ & OrStartsOnOwnLine % + \announce{2018-04-27}{new ifElseFi code block poly-switches} \\ + & \verb!\or!$\OrFinishesWithLineBreak$ & $\OrFinishesWithLineBreak$ & OrFinishesWithLineBreak \\ + & \verb!body of if/or statement!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & ElseStartsOnOwnLine \\ + & \verb!\else!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & ElseFinishesWithLineBreak \\ + & \verb!body of else statement!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & FiStartsOnOwnLine \\ + & \verb!\fi!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & FiFinishesWithLineBreak \\ + & \verb!after words! & & \\ + \cmidrule{2-4} + optionalArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LSqBStartsOnOwnLine\footnote{LSqB stands for Left Square Bracket} \\ + & \verb![!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & OptArgBodyStartsOnOwnLine \\ + \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\ + & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\ + & \verb!end of body of opt arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RSqBStartsOnOwnLine \\ + & \verb!]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RSqBFinishesWithLineBreak \\ + & \verb!...! & & \\ + \cmidrule{2-4} + mandatoryArguments & \verb!...!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & LCuBStartsOnOwnLine\footnote{LCuB stands for Left Curly Brace} \\ + & \verb!{!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & MandArgBodyStartsOnOwnLine \\ + \announce{2019-07-13}{new comma-related poly-switches} & \verb!value before comma!$\ElseStartsOnOwnLine$, & $\ElseStartsOnOwnLine$ & CommaStartsOnOwnLine \\ + & $\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & CommaFinishesWithLineBreak \\ + & \verb!end of body of mand arg!$\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & RCuBStartsOnOwnLine \\ + & \verb!}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & RCuBFinishesWithLineBreak \\ + & \verb!...! & & \\ + \cmidrule{2-4} + commands & \verb!before words!$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & CommandStartsOnOwnLine \\ + & \verb!\mycommand!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & CommandNameFinishesWithLineBreak \\ + & $\langle$\itshape{arguments}$\rangle$ & & \\ + \cmidrule{2-4} + namedGroupingBraces Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & NameStartsOnOwnLine \\ + & myname$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & NameFinishesWithLineBreak \\ + & $\langle$\itshape{braces/brackets}$\rangle$ & & \\ + \cmidrule{2-4} + keyEqualsValuesBraces\newline Brackets & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & KeyStartsOnOwnLine \\ + & key$\EqualsStartsOnOwnLine$=$\BodyStartsOnOwnLine$ & $\EqualsStartsOnOwnLine$ & EqualsStartsOnOwnLine \\ + & $\langle$\itshape{braces/brackets}$\rangle$ & $\BodyStartsOnOwnLine$ & EqualsFinishesWithLineBreak \\ + \cmidrule{2-4} + items & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & ItemStartsOnOwnLine \\ + & \verb!\item!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & ItemFinishesWithLineBreak \\ + & \verb!...! & & \\ + \cmidrule{2-4} + specialBeginEnd & before words$\BeginStartsOnOwnLine$ & $\BeginStartsOnOwnLine$ & SpecialBeginStartsOnOwnLine \\ + & \verb!\[!$\BodyStartsOnOwnLine$ & $\BodyStartsOnOwnLine$ & SpecialBodyStartsOnOwnLine \\ + & \verb!body of special/middle!$\ElseStartsOnOwnLine$ & $\ElseStartsOnOwnLine$ & SpecialMiddleStartsOnOwnLine % + \announce{2018-04-27}{new special code block poly-switches} \\ + & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$ & SpecialMiddleFinishesWithLineBreak \\ + & body of special/middle $\EndStartsOnOwnLine$ & $\EndStartsOnOwnLine$ & SpecialEndStartsOnOwnLine \\ + & \verb!\]!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & SpecialEndFinishesWithLineBreak \\ + & after words & & \\ + \cmidrule{2-4} + verbatim & before words$\BeginStartsOnOwnLine$\verb!\begin{verbatim}! & $\BeginStartsOnOwnLine$ & VerbatimBeginStartsOnOwnLine \\ + \announce{2019-05-05}{verbatim poly-switches} & body of verbatim \verb!\end{verbatim}!$\EndFinishesWithLineBreak$ & $\EndFinishesWithLineBreak$ & VerbatimEndFinishesWithLineBreak \\ + & after words & & \\ + \bottomrule + \end{longtable} +\subsubsection{Partnering BodyStartsOnOwnLine with argument-based poly-switches} + Some poly-switches need to be partnered together; in particular, when line breaks + involving the \emph{first} argument of a code block need to be accounted for using both + \texttt{BodyStartsOnOwnLine} (or its equivalent, see \vref{tab:poly-switch-mapping}) and + \texttt{LCuBStartsOnOwnLine} for mandatory arguments, and \texttt{LSqBStartsOnOwnLine} + for optional arguments. + \index{poly-switches!conflicting partnering} + + Let's begin with the code in \cref{lst:mycommand1} and the YAML settings in + \cref{lst:mycom-mlb1}; with reference to \vref{tab:poly-switch-mapping}, the key + \texttt{CommandNameFinishesWithLineBreak} is an alias for \texttt{BodyStartsOnOwnLine}. + + \cmhlistingsfromfile{demonstrations/mycommand1.tex}{\texttt{mycommand1.tex}}{lst:mycommand1} + + Upon running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m -l=mycom-mlb1.yaml mycommand1.tex +\end{commandshell} + we obtain \cref{lst:mycommand1-mlb1}; note that the \emph{second} mandatory argument + beginning brace \lstinline!{! has had its leading line break removed, but that the + \emph{first} brace has not. + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-1cm}, + ] + \cmhlistingsfromfile{demonstrations/mycommand1-mlb1.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb1}}{lst:mycommand1-mlb1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb1.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb1.yaml}}{lst:mycom-mlb1} + \end{cmhtcbraster} + + Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb2}; upon running + the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb2}; both + beginning braces \lstinline!{! have had their leading line breaks removed. + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-1cm}, + ] + \cmhlistingsfromfile{demonstrations/mycommand1-mlb2.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb2}}{lst:mycommand1-mlb2} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb2.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb2.yaml}}{lst:mycom-mlb2} + \end{cmhtcbraster} + + Now let's change the YAML file so that it is as in \cref{lst:mycom-mlb3}; upon running + the analogous command to that given above, we obtain \cref{lst:mycommand1-mlb3}. + + \begin{cmhtcbraster}[ + raster force size=false, + raster column 1/.style={add to width=-1cm}, + ] + \cmhlistingsfromfile{demonstrations/mycommand1-mlb3.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb3}}{lst:mycommand1-mlb3} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3} + \end{cmhtcbraster} + +\subsubsection{Conflicting poly-switches: sequential code blocks} + It is very easy to have conflicting poly-switches; if we use the example from + \vref{lst:mycommand1}, and consider the YAML settings given in \cref{lst:mycom-mlb4}. The + output from running + \index{poly-switches!conflicting switches} + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m -l=mycom-mlb4.yaml mycommand1.tex +\end{commandshell} + is given in \cref{lst:mycom-mlb4}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/mycommand1-mlb4.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb4}}{lst:mycommand1-mlb4} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb4.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb4.yaml}}{lst:mycom-mlb4} + \end{cmhtcbraster} + + Studying \cref{lst:mycom-mlb4}, we see that the two poly-switches are at opposition with + one another: + \begin{itemize} + \item on the one hand, \texttt{LCuBStartsOnOwnLine} should \emph{not} start on its own line (as + poly-switch is set to $-1$); + \item on the other hand, \texttt{RCuBFinishesWithLineBreak} \emph{should} finish with a line + break. + \end{itemize} + So, which should win the conflict? As demonstrated in \cref{lst:mycommand1-mlb4}, it is + clear that \texttt{LCuBStartsOnOwnLine} won this conflict, and the reason is that + \emph{the second argument was processed after the first} -- in general, the most + recently-processed code block and associated poly-switch takes priority. + + We can explore this further by considering the YAML settings in \cref{lst:mycom-mlb5}; + upon running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m -l=mycom-mlb5.yaml mycommand1.tex +\end{commandshell} + we obtain the output given in \cref{lst:mycommand1-mlb5}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/mycommand1-mlb5.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb5}}{lst:mycommand1-mlb5} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb5.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb5.yaml}}{lst:mycom-mlb5} + \end{cmhtcbraster} + + As previously, the most-recently-processed code block takes priority -- as before, the + second (i.e, \emph{last}) argument. Exploring this further, we consider the YAML settings + in \cref{lst:mycom-mlb6}, which give associated output in \cref{lst:mycommand1-mlb6}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/mycommand1-mlb6.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb6}}{lst:mycommand1-mlb6} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb6.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb6.yaml}}{lst:mycom-mlb6} + \end{cmhtcbraster} + + Note that a \lstinline!%! \emph{has} been added to the trailing first + \lstinline!}!; this is because: + \begin{itemize} + \item while processing the \emph{first} argument, the trailing line break has been removed + (\texttt{RCuBFinishesWithLineBreak} set to $-1$); + \item while processing the \emph{second} argument, \texttt{latexindent.pl} finds that it does + \emph{not} begin on its own line, and so because \texttt{LCuBStartsOnOwnLine} is set to + $2$, it adds a comment, followed by a line break. + \end{itemize} + +\subsubsection{Conflicting poly-switches: nested code blocks} + Now let's consider an example when nested code blocks have conflicting poly-switches; + we'll use the code in \cref{lst:nested-env}, noting that it contains nested environments. + \index{poly-switches!conflicting switches} + + \cmhlistingsfromfile{demonstrations/nested-env.tex}{\texttt{nested-env.tex}}{lst:nested-env} + + Let's use the YAML settings given in \cref{lst:nested-env-mlb1-yaml}, which upon running + the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m -l=nested-env-mlb1.yaml nested-env.tex +\end{commandshell} + gives the output in \cref{lst:nested-env-mlb1}. + + \begin{cmhtcbraster}[raster column skip=.05\linewidth] + \cmhlistingsfromfile{demonstrations/nested-env-mlb1.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb1-yaml}}{lst:nested-env-mlb1} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb1.yaml}}{lst:nested-env-mlb1-yaml} + \end{cmhtcbraster} + + In \cref{lst:nested-env-mlb1}, let's first of all note that both environments have + received the appropriate (default) indentation; secondly, note that the poly-switch + \texttt{EndStartsOnOwnLine} appears to have won the conflict, as \lstinline!\end{one}! + has had its leading line break removed. + + To understand it, let's talk about the three basic phases \label{page:phases}of + \texttt{latexindent.pl}: + \begin{enumerate} + \item Phase 1: packing, in which code blocks are replaced with unique ids, working from + \emph{the inside to the outside}, and then sequentially -- for example, in + \cref{lst:nested-env}, the \texttt{two} environment is found \emph{before} the + \texttt{one} environment; if the -m switch is active, then during this phase: + \begin{itemize} + \item line breaks at the beginning of the \texttt{body} can be added (if + \texttt{BodyStartsOnOwnLine} is $1$ or $2$) or removed (if \texttt{BodyStartsOnOwnLine} + is $-1$); + \item line breaks at the end of the body can be added (if \texttt{EndStartsOnOwnLine} is $1$ or + $2$) or removed (if \texttt{EndStartsOnOwnLine} is $-1$); + \item line breaks after the end statement can be added (if \texttt{EndFinishesWithLineBreak} is + $1$ or $2$). + \end{itemize} + \item Phase 2: indentation, in which white space is added to the begin, body, and end + statements; + \item Phase 3: unpacking, in which unique ids are replaced by their \emph{indented} code + blocks; if the -m switch is active, then during this phase, + \begin{itemize} + \item line breaks before \texttt{begin} statements can be added or removed (depending upon + \texttt{BeginStartsOnOwnLine}); + \item line breaks after \emph{end} statements can be removed but \emph{NOT} added (see + \texttt{EndFinishesWithLineBreak}). + \end{itemize} + \end{enumerate} + + With reference to \cref{lst:nested-env-mlb1}, this means that during Phase 1: + \begin{itemize} + \item the \texttt{two} environment is found first, and the line break ahead of the + \lstinline!\end{two}! statement is removed because \texttt{EndStartsOnOwnLine} is set to + $-1$. Importantly, because, \emph{at this stage}, + \lstinline!\end{two}! \emph{does} finish with a line break, + \texttt{EndFinishesWithLineBreak} causes no action. + \item next, the \texttt{one} environment is found; the line break ahead of + \lstinline!\end{one}! is removed because \texttt{EndStartsOnOwnLine} is set to + $-1$. + \end{itemize} + The indentation is done in Phase 2; in Phase 3 \emph{there is no option to add a line + break after the \lstinline!end! statements}. We can justify this by remembering that + during Phase 3, the \texttt{one} environment will be found and processed first, followed + by the \texttt{two} environment. If the \texttt{two} environment were to add a line break + after the + \lstinline!\end{two}! statement, then \texttt{latexindent.pl} would have no way of + knowing how much indentation to add to the subsequent text (in this case, + \lstinline!\end{one}!). + + We can explore this further using the poly-switches in \cref{lst:nested-env-mlb2}; upon + running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -m -l=nested-env-mlb2.yaml nested-env.tex +\end{commandshell} + we obtain the output given in \cref{lst:nested-env-mlb2-output}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/nested-env-mlb2.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb2}}{lst:nested-env-mlb2-output} + \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb2.yaml}}{lst:nested-env-mlb2} + \end{cmhtcbraster} + + During Phase 1: + \begin{itemize} + \item the \texttt{two} environment is found first, and the line break ahead of the + \lstinline!\end{two}! statement is not changed because \texttt{EndStartsOnOwnLine} is + set to $1$. Importantly, because, \emph{at this stage}, + \lstinline!\end{two}! \emph{does} finish with a line break, + \texttt{EndFinishesWithLineBreak} causes no action. + \item next, the \texttt{one} environment is found; the line break ahead of + \lstinline!\end{one}! is already present, and no action is needed. + \end{itemize} + The indentation is done in Phase 2, and then in Phase 3, the \texttt{one} environment is + found and processed first, followed by the \texttt{two} environment. \emph{At this + stage}, the \texttt{two} environment finds \texttt{EndFinishesWithLineBreak} is $-1$, so + it removes the trailing line break; remember, at this point, \texttt{latexindent.pl} has + completely finished with the \texttt{one} environment. diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-remove-para-line-breaks.tex b/Master/texmf-dist/doc/support/latexindent/subsec-remove-para-line-breaks.tex new file mode 100644 index 00000000000..f5531cbba48 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-remove-para-line-breaks.tex @@ -0,0 +1,217 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{removeParagraphLineBreaks: modifying line breaks for paragraphs}\label{subsec:removeparagraphlinebreaks} When the \texttt{-m} switch is active + \texttt{latexindent.pl} has the ability to remove line + breaks% + \announce{2017-05-27}{removeParagraphLineBreaks} + from within paragraphs; the behaviour is controlled by the + \texttt{removeParagraphLineBreaks} field, detailed in + \cref{lst:removeParagraphLineBreaks}. Thank you to \cite{jowens} for shaping and + assisting with the testing of this feature. +\yamltitle{removeParagraphLineBreaks}*{fields} + This feature is considered complimentary to the \texttt{oneSentencePerLine} feature + described in \vref{sec:onesentenceperline}. + \index{specialBeginEnd!removeParagraphLineBreaks} + + \cmhlistingsfromfile[style=removeParagraphLineBreaks]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{removeParagraphLineBreaks}}{lst:removeParagraphLineBreaks} + + This routine can be turned on \emph{globally} for \emph{every} code block type known to + \texttt{latexindent.pl} (see \vref{tab:code-blocks}) by using the \texttt{all} switch; by + default, this switch is \emph{off}. Assuming that the \texttt{all} switch is off, then + the routine can be controlled on a per-code-block-type basis, and within that, on a + per-name basis. We will consider examples of each of these in turn, but before we do, + let's specify what \texttt{latexindent.pl} considers as a paragraph: + \begin{itemize} + \item it must begin on its own line with either an alphabetic or numeric character, and not + with any of the code-block types detailed in \vref{tab:code-blocks}; + \item it can include line breaks, but finishes when it meets either a blank line, a + \lstinline!\par! command, or any of the user-specified settings in the + \texttt{paragraphsStopAt} field, detailed in \vref{lst:paragraphsStopAt}. + \end{itemize} + + Let's start with the \texttt{.tex} file in \cref{lst:shortlines}, together with the YAML + settings in \cref{lst:remove-para1-yaml}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines.tex}{\texttt{shortlines.tex}}{lst:shortlines} + \cmhlistingsfromfile{demonstrations/remove-para1.yaml}[MLB-TCB]{\texttt{remove-para1.yaml}}{lst:remove-para1-yaml} + \end{cmhtcbraster} + + Upon running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m shortlines.tex -o shortlines1.tex -l remove-para1.yaml +\end{commandshell} + then we obtain the output given in \cref{lst:shortlines1}. + + \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines1.tex}{\texttt{shortlines1.tex}}{lst:shortlines1} + + Keen readers may notice that some trailing white space must be present in the file in + \cref{lst:shortlines} which has crept in to the output in \cref{lst:shortlines1}. This + can be fixed using the YAML file in \vref{lst:removeTWS-before} and running, for example, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m shortlines.tex -o shortlines1-tws.tex -l remove-para1.yaml,removeTWS-before.yaml +\end{commandshell} + in which case the output is as in \cref{lst:shortlines1-tws}; notice that the double + spaces present in \cref{lst:shortlines1} have been addressed. + + \cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines1-tws.tex}{\texttt{shortlines1-tws.tex}}{lst:shortlines1-tws} + + Keeping with the settings in \cref{lst:remove-para1-yaml}, we note that the \texttt{all} + switch applies to \emph{all} code block types. So, for example, let's consider the files + in \cref{lst:shortlines-mand,lst:shortlines-opt} + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/shortlines-mand.tex}{\texttt{shortlines-mand.tex}}{lst:shortlines-mand} + \cmhlistingsfromfile{demonstrations/shortlines-opt.tex}{\texttt{shortlines-opt.tex}}{lst:shortlines-opt} + \end{cmhtcbraster} + + Upon running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m shortlines-mand.tex -o shortlines-mand1.tex -l remove-para1.yaml +latexindent.pl -m shortlines-opt.tex -o shortlines-opt1.tex -l remove-para1.yaml +\end{commandshell} + \end{widepage} + + then we obtain the respective output given in + \cref{lst:shortlines-mand1,lst:shortlines-opt1}. + + \cmhlistingsfromfile{demonstrations/shortlines-mand1.tex}{\texttt{shortlines-mand1.tex}}{lst:shortlines-mand1} + \cmhlistingsfromfile{demonstrations/shortlines-opt1.tex}{\texttt{shortlines-opt1.tex}}{lst:shortlines-opt1} + + Assuming that we turn \emph{off} the \texttt{all} switch (by setting it to \texttt{0}), + then we can control the behaviour of \texttt{removeParagraphLineBreaks} either on a + per-code-block-type basis, or on a per-name basis. + + For example, let's use the code in \cref{lst:shortlines-envs}, and consider the settings + in \cref{lst:remove-para2-yaml,lst:remove-para3-yaml}; note that in + \cref{lst:remove-para2-yaml} we specify that \emph{every} environment should receive + treatment from the routine, while in \cref{lst:remove-para3-yaml} we specify that + \emph{only} the \texttt{one} environment should receive the treatment. + + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/shortlines-envs.tex}{\texttt{shortlines-envs.tex}}{lst:shortlines-envs} + \end{minipage} + \hfill + \begin{minipage}{.49\linewidth} + \cmhlistingsfromfile{demonstrations/remove-para2.yaml}[MLB-TCB]{\texttt{remove-para2.yaml}}{lst:remove-para2-yaml} + \cmhlistingsfromfile{demonstrations/remove-para3.yaml}[MLB-TCB]{\texttt{remove-para3.yaml}}{lst:remove-para3-yaml} + \end{minipage} + + Upon running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m shortlines-envs.tex -o shortlines-envs2.tex -l remove-para2.yaml +latexindent.pl -m shortlines-envs.tex -o shortlines-envs3.tex -l remove-para3.yaml +\end{commandshell} + \end{widepage} + then we obtain the respective output given in + \cref{lst:shortlines-envs2,lst:shortlines-envs3}. + + \cmhlistingsfromfile{demonstrations/shortlines-envs2.tex}{\texttt{shortlines-envs2.tex}}{lst:shortlines-envs2} + \cmhlistingsfromfile{demonstrations/shortlines-envs3.tex}{\texttt{shortlines-envs3.tex}}{lst:shortlines-envs3} + + The remaining code-block types can be customised in analogous ways, although note that + \texttt{commands}, \texttt{keyEqualsValuesBracesBrackets}, + \texttt{namedGroupingBracesBrackets}, \texttt{UnNamedGroupingBracesBrackets} are + controlled by the \texttt{optionalArguments} and the \texttt{mandatoryArguments}. + + The only special case is the \texttt{masterDocument} field; this is designed for + `chapter'-type files that may contain paragraphs that are not within any other + code-blocks. For example, consider the file in \cref{lst:shortlines-md}, with the YAML + settings in \cref{lst:remove-para4-yaml}. + + \begin{cmhtcbraster} + \cmhlistingsfromfile{demonstrations/shortlines-md.tex}{\texttt{shortlines-md.tex}}{lst:shortlines-md} + \cmhlistingsfromfile{demonstrations/remove-para4.yaml}[MLB-TCB]{\texttt{remove-para4.yaml}}{lst:remove-para4-yaml} + \end{cmhtcbraster} + + Upon running the following command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m shortlines-md.tex -o shortlines-md4.tex -l remove-para4.yaml +\end{commandshell} + \end{widepage} + then we obtain the output in \cref{lst:shortlines-md4}. + \cmhlistingsfromfile{demonstrations/shortlines-md4.tex}{\texttt{shortlines-md4.tex}}{lst:shortlines-md4} + + Note% + \announce{2018-08-13}*{updates to all in removeParagraphLineBreaks} that the \texttt{all} field can take the same exceptions + detailed in \crefrange{lst:textwrap6-yaml}{lst:textwrap8-yaml}. + +\yamltitle{paragraphsStopAt}*{fields} + The paragraph line break routine considers blank lines and the + \lstinline|\par| command to be the end of a paragraph; + \announce{2017-05-27}{paragraphsStopAt} you can fine tune the behaviour of the routine + further by using the \texttt{paragraphsStopAt} fields, shown in + \cref{lst:paragraphsStopAt}. + \index{specialBeginEnd!paragraphsStopAt} + \index{verbatim!in relation to paragraphsStopAt} + + \cmhlistingsfromfile[style=paragraphsStopAt]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{paragraphsStopAt}}{lst:paragraphsStopAt} + + The fields specified in \texttt{paragraphsStopAt} tell \texttt{latexindent.pl} to stop + the current paragraph when it reaches a line that \emph{begins} with any of the + code-block types specified as \texttt{1} in \cref{lst:paragraphsStopAt}. By default, + you'll see that the paragraph line break routine will stop when it reaches an environment + or verbatim code block at the beginning of a line. It is \emph{not} possible to specify + these fields on a per-name basis. + + Let's use the \texttt{.tex} file in \cref{lst:sl-stop}; we will, in turn, consider the + settings in \cref{lst:stop-command-yaml,lst:stop-comment-yaml}. + + \begin{minipage}{.45\linewidth} + \cmhlistingsfromfile{demonstrations/sl-stop.tex}{\texttt{sl-stop.tex}}{lst:sl-stop} + \end{minipage} + \hfill + \begin{minipage}{.49\linewidth} + \cmhlistingsfromfile{demonstrations/stop-command.yaml}[MLB-TCB]{\texttt{stop-command.yaml}}{lst:stop-command-yaml} + + \cmhlistingsfromfile{demonstrations/stop-comment.yaml}[MLB-TCB]{\texttt{stop-comment.yaml}}{lst:stop-comment-yaml} + \end{minipage} + + Upon using the settings from \vref{lst:remove-para4-yaml} and running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{widepage} + \begin{commandshell} +latexindent.pl -m sl-stop.tex -o sl-stop4.tex -l remove-para4.yaml +latexindent.pl -m sl-stop.tex -o sl-stop4-command.tex -l=remove-para4.yaml,stop-command.yaml +latexindent.pl -m sl-stop.tex -o sl-stop4-comment.tex -l=remove-para4.yaml,stop-comment.yaml +\end{commandshell} + \end{widepage} + we obtain the respective outputs in \crefrange{lst:sl-stop4}{lst:sl-stop4-comment}; + notice in particular that: + \begin{itemize} + \item in \cref{lst:sl-stop4} the paragraph line break routine has included commands and + comments; + \item in \cref{lst:sl-stop4-command} the paragraph line break routine has \emph{stopped} at the + \texttt{emph} command, because in \cref{lst:stop-command-yaml} we have specified + \texttt{commands} to be \texttt{1}, and \texttt{emph} is at the beginning of a line; + \item in \cref{lst:sl-stop4-comment} the paragraph line break routine has \emph{stopped} at the + comments, because in \cref{lst:stop-comment-yaml} we have specified \texttt{comments} to + be \texttt{1}, and the comment is at the beginning of a line. + \end{itemize} + In all outputs in \crefrange{lst:sl-stop4}{lst:sl-stop4-comment} we notice that the + paragraph line break routine has stopped at \lstinline!\begin{myenv}! because, by + default, \texttt{environments} is set to \texttt{1} in \vref{lst:paragraphsStopAt}. + + \cmhlistingsfromfile{demonstrations/sl-stop4.tex}{\texttt{sl-stop4.tex}}{lst:sl-stop4} + \cmhlistingsfromfile{demonstrations/sl-stop4-command.tex}{\texttt{sl-stop4-command.tex}}{lst:sl-stop4-command} + \cmhlistingsfromfile{demonstrations/sl-stop4-comment.tex}{\texttt{sl-stop4-comment.tex}}{lst:sl-stop4-comment} + diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap-summary.tex b/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap-summary.tex new file mode 100644 index 00000000000..89379eabbc2 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap-summary.tex @@ -0,0 +1,26 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{Summary of text wrapping} + I consider% + \announce*{2021-07-31}{text wrap quick start} + the most useful starting point for text wrapping to be given in + \cref{subsec:textwrapping-quick-start} and \cref{subsubsec:text-wrap-remove-para-bfccb}. + + Starting from \cref{lst:textwrap-qs-yaml}, it is likely that you will have to experiment + with making adjustments (such as that given in \cref{lst:textwrap14-yaml}) depending on + your preference. + + It is important to note the following: + \index{verbatim!within summary of text wrapping} + \begin{itemize} + \item verbatim code blocks of all types will \emph{not} be affected by the text wrapping + routine. See the demonstration in \vref{lst:textwrap2-mod1}, together with environments: + \vref{lst:verbatimEnvironments}, commands: \vref{lst:verbatimCommands}, + \texttt{noIndentBlock}: \cref{lst:noIndentBlock}, \texttt{specialBeginEnd}: + \vref{lst:special3-mod1}; + \item comments will \emph{not} be affected by the text wrapping routine (see + \vref{lst:textwrap3-mod1}); + \item it is possible to wrap text on a per-code-block and a per-name basis; + \announce{2018-08-13}*{updates to textWrapOptions} + \item indentation is performed \emph{after} the text wrapping routine; as such, indented code + will likely exceed any maximum value set in the \texttt{columns} field. + \end{itemize} diff --git a/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap.tex b/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap.tex new file mode 100644 index 00000000000..2e721cae1a5 --- /dev/null +++ b/Master/texmf-dist/doc/support/latexindent/subsec-text-wrap.tex @@ -0,0 +1,359 @@ +% arara: pdflatex: {shell: yes, files: [latexindent]} +\subsection{Text Wrapping}\label{subsec:textwrapping} + There are \emph{many} different configuration options for the text wrapping routine of + \texttt{latexindent.pl}, perhaps \emph{too} many. The following sections are + comprehensive, but quite long; in an attempt to to be brief, you might begin with the + settings given in \cref{subsec:textwrapping-quick-start}. + +\subsubsection{Text wrap quick start}\label{subsec:textwrapping-quick-start} + + Of all the available text wrapping options, I consider \cref{lst:textwrap-qs-yaml} to be + among the most helpful starting points. + + \cmhlistingsfromfile*{demonstrations/textwrap-qs.yaml}[MLB-TCB,width=1\linewidth]{\texttt{textwrap-qs.yaml}}{lst:textwrap-qs-yaml} + + \index{text wrap!quick start} + + You can read about \texttt{perCodeBlockBasis} in \cref{subsec:text-wrap-per-code-block} + and \texttt{removeParagraphLineBreaks} in \cref{subsec:removeparagraphlinebreaks}. + + If the settings in \cref{lst:textwrap-qs-yaml} do not give your desired output, take a + look at the demonstration in \cref{subsubsec:text-wrap-remove-para-bfccb}, in particular + \cref{lst:textwrap-bfccb-mod14}. + +\subsubsection{textWrapOptions: modifying line breaks by text wrapping} + + When the \texttt{-m} switch is active \texttt{latexindent.pl} has the ability to wrap + text using the options% + \announce{2017-05-27}{textWrapOptions} specified in the \texttt{textWrapOptions} field, + see \cref{lst:textWrapOptions}. + + \index{modifying linebreaks! by text wrapping, globally} + + \cmhlistingsfromfile[style=textWrapOptions]*{../defaultSettings.yaml}[MLB-TCB,width=.85\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptions} + + The value of \texttt{columns} specifies the column at which the text should be wrapped. + + By default, the value of \texttt{columns} is \texttt{0}, so \texttt{latexindent.pl} will + \emph{not} wrap text; if you change it to a value of \texttt{2} or more, then text will + be wrapped after the character in the specified column. + + By default, the text wrapping routine will operate \emph{before} the code blocks have + been searched for; text wrapping on a \emph{per-code-block} basis is discussed in + \cref{subsec:text-wrap-per-code-block}. + + We consider the file give in \cref{lst:textwrap1} for demonstration. + + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap1.tex}{\texttt{textwrap1.tex}}{lst:textwrap1} + \end{widepage} + + Using the file \texttt{textwrap1.yaml} in \cref{lst:textwrap1-yaml}, and running the + command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap1.tex -o textwrap1-mod1.tex -l textwrap1.yaml +\end{commandshell} + we obtain the output in \cref{lst:textwrap1-mod1}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/textwrap1-mod1.tex}{\texttt{textwrap1-mod1.tex}}{lst:textwrap1-mod1} + \cmhlistingsfromfile{demonstrations/textwrap1.yaml}[MLB-TCB]{\texttt{textwrap1.yaml}}{lst:textwrap1-yaml} + \end{cmhtcbraster} + + The text wrapping routine is performed \emph{after} verbatim environments + \index{verbatim!in relation to textWrapOptions} have been stored, so verbatim + environments and verbatim commands are exempt from the routine. For example, using the + file in \cref{lst:textwrap2}, + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap2.tex}{\texttt{textwrap2.tex}}{lst:textwrap2} + \end{widepage} + and running the following command and continuing to use \texttt{textwrap1.yaml} from + \cref{lst:textwrap1-yaml}, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap2.tex -o textwrap2-mod1.tex -l textwrap1.yaml +\end{commandshell} + then the output is as in \cref{lst:textwrap2-mod1}. + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap2-mod1.tex}{\texttt{textwrap2-mod1.tex}}{lst:textwrap2-mod1} + \end{widepage} + Furthermore, the text wrapping routine is performed after the trailing comments have been + stored, and they are also exempt from text wrapping. For example, using the file in + \cref{lst:textwrap3} + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap3.tex}{\texttt{textwrap3.tex}}{lst:textwrap3} + \end{widepage} + and running the following command and continuing to use \texttt{textwrap1.yaml} from + \cref{lst:textwrap1-yaml}, + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap3.tex -o textwrap3-mod1.tex -l textwrap1.yaml +\end{commandshell} + then the output is as in \cref{lst:textwrap3-mod1}. + + \cmhlistingsfromfile{demonstrations/textwrap3-mod1.tex}{\texttt{textwrap3-mod1.tex}}{lst:textwrap3-mod1} + + The% + \announce{2021-07-23}*{huge:overflow is now default} + default value of \texttt{huge} is \texttt{overflow}, which means that words will + \emph{not} be broken by the text wrapping routine, implemented by the \texttt{Text::Wrap} + \cite{textwrap}. There are options to change the \texttt{huge} option for the + \texttt{Text::Wrap} module to either \texttt{wrap} or \texttt{die}. Before modifying the + value of \texttt{huge}, please bear in mind the following warning: + \index{warning!changing huge (textwrap)} + \begin{warning} + \raggedright + Changing the value of \texttt{huge} to anything other than \texttt{overflow} will slow down + \texttt{latexindent.pl} significantly when the \texttt{-m} switch is active. + + Furthermore, changing \texttt{huge} means that you may have some words \emph{or commands}(!) + split across lines in your .tex file, which may affect your output. I do not recommend + changing this field. + \end{warning} + + For example, using the settings in \cref{lst:textwrap2A-yaml,lst:textwrap2B-yaml} and + running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap4.tex -o=+-mod2A -l textwrap2A.yaml +latexindent.pl -m textwrap4.tex -o=+-mod2B -l textwrap2B.yaml +\end{commandshell} + gives the respective output in \cref{lst:textwrap4-mod2A,lst:textwrap4-mod2B}. + + \begin{cmhtcbraster}[raster column skip=.1\linewidth] + \cmhlistingsfromfile{demonstrations/textwrap4-mod2A.tex}{\texttt{textwrap4-mod2A.tex}}{lst:textwrap4-mod2A} + \cmhlistingsfromfile{demonstrations/textwrap2A.yaml}[MLB-TCB]{\texttt{textwrap2A.yaml}}{lst:textwrap2A-yaml} + + \cmhlistingsfromfile{demonstrations/textwrap4-mod2B.tex}{\texttt{textwrap4-mod2B.tex}}{lst:textwrap4-mod2B} + \cmhlistingsfromfile{demonstrations/textwrap2B.yaml}[MLB-TCB]{\texttt{textwrap2B.yaml}}{lst:textwrap2B-yaml} + \end{cmhtcbraster} + + You can also specify the \texttt{tabstop} field% + \announce{2020-11-06}{tabstop option for text wrap module} as an integer value, which is + passed to the text wrap module; see \cite{textwrap} for details. Starting with the code + in \cref{lst:textwrap-ts} with settings in \cref{lst:tabstop}, and running the command + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \index{switches!-o demonstration} + \begin{commandshell} +latexindent.pl -m textwrap-ts.tex -o=+-mod1 -l tabstop.yaml +\end{commandshell} + gives the code given in \cref{lst:textwrap-ts-mod1}. + \begin{cmhtcbraster}[raster columns=3, + raster left skip=-3.5cm, + raster right skip=-2cm, + raster column skip=.03\linewidth] + \cmhlistingsfromfile[showtabs=true]*{demonstrations/textwrap-ts.tex}{\texttt{textwrap-ts.tex}}{lst:textwrap-ts} + \cmhlistingsfromfile{demonstrations/tabstop.yaml}[MLB-TCB]{\texttt{tabstop.yaml}}{lst:tabstop} + \cmhlistingsfromfile[showtabs=true]*{demonstrations/textwrap-ts-mod1.tex}{\texttt{textwrap-ts-mod1.tex}}{lst:textwrap-ts-mod1} + \end{cmhtcbraster} + + You can specify \texttt{separator}, \texttt{break} and \texttt{unexpand} options in your + settings in analogous ways to those demonstrated in + \cref{lst:textwrap2B-yaml,lst:tabstop}, and they will be passed to the + \texttt{Text::Wrap} module. I have not found a useful reason to do this; see + \cite{textwrap} for more details. + +\subsubsection{Text wrapping on a per-code-block basis}\label{subsec:text-wrap-per-code-block} By default, if the value of + \texttt{columns} is greater than 0 and the \texttt{-m} switch is active, + then% + \announce{2018-08-13}*{updates to textWrapOptions} + the text wrapping routine will operate before the code blocks have been searched for. + This behaviour is customisable; in particular, you can instead instruct + \texttt{latexindent.pl} to apply \texttt{textWrap} on a per-code-block basis. Thanks to + \cite{zoehneto} for their help in testing and shaping this feature. + \index{modifying linebreaks! by text wrapping, per-code-block} + + The full details of \texttt{textWrapOptions} are shown in \cref{lst:textWrapOptionsAll}. + In particular, note the field \texttt{perCodeBlockBasis: 0}. + \index{specialBeginEnd!textWrapOptions} + + \cmhlistingsfromfile*[style=textWrapOptionsAll]*{../defaultSettings.yaml}[MLB-TCB,width=.95\linewidth,before=\centering]{\texttt{textWrapOptions}}{lst:textWrapOptionsAll} + + The code blocks detailed in \cref{lst:textWrapOptionsAll} are with direct reference to + those detailed in \vref{tab:code-blocks}. + + The only special case is the \texttt{masterDocument} field; this is designed for + `chapter'-type files that may contain paragraphs that are not within any other + code-blocks. The same notation is used between this feature and the + \texttt{removeParagraphLineBreaks} described in \vref{lst:removeParagraphLineBreaks}; in + fact, the two features can even be combined (this is detailed in + \vref{subsec:removeparagraphlinebreaks:and:textwrap}). + + Let's explore these switches with reference to the code given in \cref{lst:textwrap5}; + the text outside of the environment is considered part of the \texttt{masterDocument}. + + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap5.tex}{\texttt{textwrap5.tex}}{lst:textwrap5} + \end{widepage} + + With reference to this code block, the settings given in + \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} each give the same + output. + + \begin{cmhtcbraster}[raster columns=3, + raster left skip=-3.5cm, + raster right skip=-2cm, + raster column skip=.03\linewidth] + \cmhlistingsfromfile{demonstrations/textwrap3.yaml}[MLB-TCB]{\texttt{textwrap3.yaml}}{lst:textwrap3-yaml} + \cmhlistingsfromfile{demonstrations/textwrap4.yaml}[MLB-TCB]{\texttt{textwrap4.yaml}}{lst:textwrap4-yaml} + \cmhlistingsfromfile{demonstrations/textwrap5.yaml}[MLB-TCB]{\texttt{textwrap5.yaml}}{lst:textwrap5-yaml} + \end{cmhtcbraster} + + Let's explore the similarities and differences in the equivalent (with respect to + \cref{lst:textwrap5}) syntax specified in + \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml}: + \begin{itemize} + \item in each of \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} notice that + \texttt{columns: 30}; + \item in each of \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} notice that + \texttt{perCodeBlockBasis: 1}; + \item in \cref{lst:textwrap3-yaml} we have specified \texttt{all: 1} so that the text wrapping + will operate upon \emph{all} code blocks; + \item in \cref{lst:textwrap4-yaml} we have \emph{not} specified \texttt{all}, and instead, have + specified that text wrapping should be applied to each of \texttt{environments} and + \texttt{masterDocument}; + \item in \cref{lst:textwrap5-yaml} we have specified text wrapping for \texttt{masterDocument} + and on a \emph{per-name} basis for \texttt{environments} code blocks. + \end{itemize} + + Upon running the following commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -s textwrap5.tex -l=textwrap3.yaml -m +latexindent.pl -s textwrap5.tex -l=textwrap4.yaml -m +latexindent.pl -s textwrap5.tex -l=textwrap5.yaml -m +\end{commandshell} + we obtain the output shown in \cref{lst:textwrap5-mod3}. + + \cmhlistingsfromfile{demonstrations/textwrap5-mod3.tex}{\texttt{textwrap5-mod3.tex}}{lst:textwrap5-mod3} + + We can explore the idea of per-name text wrapping given in \cref{lst:textwrap5-yaml} by + using \cref{lst:textwrap6}. + + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap6.tex}{\texttt{textwrap6.tex}}{lst:textwrap6} + \end{widepage} + + In particular, upon running + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -s textwrap6.tex -l=textwrap5.yaml -m +\end{commandshell} + we obtain the output given in \cref{lst:textwrap6-mod5}. + + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap6-mod5.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap5-yaml}}{lst:textwrap6-mod5} + \end{widepage} + + Notice that, because \texttt{environments} has been specified only for \texttt{myenv} (in + \cref{lst:textwrap5-yaml}) that the environment named \texttt{another} has \emph{not} had + text wrapping applied to it. + + The {all} field can be specified with exceptions which can either be done on a + per-code-block or per-name basis; we explore this in relation to \cref{lst:textwrap6} in + the settings given in \crefrange{lst:textwrap6-yaml}{lst:textwrap8-yaml}. + + \begin{adjustwidth}{-3.5cm}{-2.5cm} + \begin{minipage}{.33\linewidth} + \cmhlistingsfromfile{demonstrations/textwrap6.yaml}[MLB-TCB]{\texttt{textwrap6.yaml}}{lst:textwrap6-yaml} + \end{minipage}% + \begin{minipage}{.33\linewidth} + \cmhlistingsfromfile{demonstrations/textwrap7.yaml}[MLB-TCB]{\texttt{textwrap7.yaml}}{lst:textwrap7-yaml} + \end{minipage}% + \begin{minipage}{.33\linewidth} + \cmhlistingsfromfile{demonstrations/textwrap8.yaml}[MLB-TCB]{\texttt{textwrap8.yaml}}{lst:textwrap8-yaml} + \end{minipage} + \end{adjustwidth} + + Upon running the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -s textwrap6.tex -l=textwrap6.yaml -m +latexindent.pl -s textwrap6.tex -l=textwrap7.yaml -m +latexindent.pl -s textwrap6.tex -l=textwrap8.yaml -m +\end{commandshell} + we receive the respective output given in + \crefrange{lst:textwrap6-mod6}{lst:textwrap6-mod8}. + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap6-mod6.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap6-yaml}}{lst:textwrap6-mod6} + + \cmhlistingsfromfile{demonstrations/textwrap6-mod7.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap7-yaml}}{lst:textwrap6-mod7} + + \cmhlistingsfromfile{demonstrations/textwrap6-mod8.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap8-yaml}}{lst:textwrap6-mod8} + \end{widepage} + + Notice that: + \begin{itemize} + \item in \cref{lst:textwrap6-mod6} the text wrapping routine has not been applied to any + \texttt{environments} because it has been switched off (per-code-block) in + \cref{lst:textwrap6-yaml}; + \item in \cref{lst:textwrap6-mod7} the text wrapping routine has not been applied to + \texttt{myenv} because it has been switched off (per-name) in \cref{lst:textwrap7-yaml}; + \item in \cref{lst:textwrap6-mod8} the text wrapping routine has not been applied to + \texttt{masterDocument} because of the settings in \cref{lst:textwrap8-yaml}. + \end{itemize} + + The \texttt{columns} field has a variety of different ways that it can be specified; + we've seen two basic ways already: the default (set to \texttt{0}) and a positive integer + (see \vref{lst:textwrap6}, for example). We explore further options in + \crefrange{lst:textwrap9-yaml}{lst:textwrap11-yaml}. + + \begin{cmhtcbraster}[raster columns=3, + raster left skip=-3.5cm, + raster right skip=-2cm, + raster column skip=.03\linewidth] + \cmhlistingsfromfile{demonstrations/textwrap9.yaml}[MLB-TCB]{\texttt{textwrap9.yaml}}{lst:textwrap9-yaml} + \cmhlistingsfromfile{demonstrations/textwrap10.yaml}[MLB-TCB]{\texttt{textwrap10.yaml}}{lst:textwrap10-yaml} + \cmhlistingsfromfile{demonstrations/textwrap11.yaml}[MLB-TCB]{\texttt{textwrap11.yaml}}{lst:textwrap11-yaml} + \end{cmhtcbraster} + + \Cref{lst:textwrap9-yaml} and \cref{lst:textwrap10-yaml} are equivalent. Upon running + the commands + \index{switches!-l demonstration} + \index{switches!-m demonstration} + \begin{commandshell} +latexindent.pl -s textwrap6.tex -l=textwrap9.yaml -m +latexindent.pl -s textwrap6.tex -l=textwrap11.yaml -m +\end{commandshell} + we receive the respective output given in \cref{lst:textwrap6-mod9,lst:textwrap6-mod11}. + + \begin{widepage} + \cmhlistingsfromfile{demonstrations/textwrap6-mod9.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap9-yaml}}{lst:textwrap6-mod9} + + \cmhlistingsfromfile{demonstrations/textwrap6-mod11.tex}{\texttt{textwrap6.tex} using \cref{lst:textwrap11-yaml}}{lst:textwrap6-mod11} + \end{widepage} + + Notice that: + \begin{itemize} + \item in \cref{lst:textwrap6-mod9} the text for the \texttt{masterDocument} has been wrapped + using \texttt{30} columns, while \texttt{environments} has been wrapped using \texttt{50} + columns; + \item in \cref{lst:textwrap6-mod11} the text for \texttt{myenv} has been wrapped using + \texttt{50} columns, the text for \texttt{another} has been wrapped using \texttt{15} + columns, and \texttt{masterDocument} has been wrapped using \texttt{30} columns. + \end{itemize} + If you don't specify a \texttt{default} value on per-code-block basis, then the + \texttt{default} value from \texttt{columns} will be inherited; if you don't specify a + default value for \texttt{columns} then \texttt{80} will be used. + + \texttt{alignAtAmpersandTakesPriority} is set to \texttt{1} by default; assuming + that text wrapping is occurring on a per-code-block basis, and the current + environment/code block is specified within \vref{lst:aligndelims:basic} then text + wrapping will be disabled for this code block. + + If you wish to specify \texttt{afterHeading} commands (see + \vref{lst:indentAfterHeadings}) on a per-name basis, then you need to append the name + with \texttt{:heading}, for example, you might use \texttt{section:heading}. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex index 5531e7eace6..9521a04fb69 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex @@ -1,18 +1,18 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \subsubsection{Commands with arguments}\label{subsubsec:commands-arguments} - Let's begin with the simple example in \cref{lst:mycommand}; when - \texttt{latexindent.pl} operates on this file, the default output is shown in - \cref{lst:mycommand-default}. \footnote{The command code blocks - have quite a few subtleties, described in \vref{subsec:commands-string-between}.} + Let's begin with the simple example in \cref{lst:mycommand}; when \texttt{latexindent.pl} + operates on this file, the default output is shown in \cref{lst:mycommand-default}. + \footnote{The command code blocks have quite a few subtleties, described in + \vref{subsec:commands-string-between}.} \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/mycommand.tex}{\texttt{mycommand.tex}}{lst:mycommand} \cmhlistingsfromfile{demonstrations/mycommand-default.tex}{\texttt{mycommand.tex} default output}{lst:mycommand-default} \end{cmhtcbraster} - As in the environment-based case (see \vref{lst:myenv-noAdd1,lst:myenv-noAdd2}) we may specify - \texttt{noAdditionalIndent} either in `scalar' form, or in `field' form, as shown in - \cref{lst:mycommand-noAdd1,lst:mycommand-noAdd2} + As in the environment-based case (see \vref{lst:myenv-noAdd1,lst:myenv-noAdd2}) we may + specify \texttt{noAdditionalIndent} either in `scalar' form, or in `field' form, as shown + in \cref{lst:mycommand-noAdd1,lst:mycommand-noAdd2} \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycommand-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd1.yaml}}{lst:mycommand-noAdd1} @@ -28,7 +28,8 @@ latexindent.pl mycommand.tex -l mycommand-noAdd1.yaml latexindent.pl mycommand.tex -l mycommand-noAdd2.yaml \end{commandshell} - we receive the respective output given in \cref{lst:mycommand-output-noAdd1,lst:mycommand-output-noAdd2} + we receive the respective output given in + \cref{lst:mycommand-output-noAdd1,lst:mycommand-output-noAdd2} \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/mycommand-noAdd1.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd1}}{lst:mycommand-output-noAdd1} @@ -39,13 +40,14 @@ latexindent.pl mycommand.tex -l mycommand-noAdd2.yaml \end{minipage} Note that in \cref{lst:mycommand-output-noAdd1} that the `body', optional argument - \emph{and} mandatory argument have \emph{all} received no - additional indentation, while in \cref{lst:mycommand-output-noAdd2}, only the `body' has not received - any additional indentation. We define the `body' of a command as any lines following the - command name that include its optional or mandatory arguments. + \emph{and} mandatory argument have \emph{all} received no additional indentation, while + in \cref{lst:mycommand-output-noAdd2}, only the `body' has not received any additional + indentation. We define the `body' of a command as any lines following the command name + that include its optional or mandatory arguments. We may further customise \texttt{noAdditionalIndent} for \texttt{mycommand} as we did in - \vref{lst:myenv-noAdd5,lst:myenv-noAdd6}; explicit examples are given in \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. + \vref{lst:myenv-noAdd5,lst:myenv-noAdd6}; explicit examples are given in + \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycommand-noAdd3.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd3.yaml}}{lst:mycommand-noAdd3} @@ -61,7 +63,8 @@ latexindent.pl mycommand.tex -l mycommand-noAdd2.yaml latexindent.pl mycommand.tex -l mycommand-noAdd3.yaml latexindent.pl mycommand.tex -l mycommand-noAdd4.yaml \end{commandshell} - we receive the respective output given in \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4}. + we receive the respective output given in + \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/mycommand-noAdd3.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd3}}{lst:mycommand-output-noAdd3} @@ -72,11 +75,12 @@ latexindent.pl mycommand.tex -l mycommand-noAdd4.yaml \end{minipage} Attentive readers will note that the body of \texttt{mycommand} in both - \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4} has received no additional indent, even though - \texttt{body} is explicitly set to \texttt{0} in both - \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. This is because, by default, \texttt{noAdditionalIndentGlobal} for - \texttt{commands} is set to \texttt{1} by default; this can be easily - fixed as in \cref{lst:mycommand-noAdd5,lst:mycommand-noAdd6}.\label{page:command:noAddGlobal} + \cref{lst:mycommand-output-noAdd3,lst:mycommand-output-noAdd4} has received no additional + indent, even though \texttt{body} is explicitly set to \texttt{0} in both + \cref{lst:mycommand-noAdd3,lst:mycommand-noAdd4}. This is because, by default, + \texttt{noAdditionalIndentGlobal} for \texttt{commands} is set to \texttt{1} by default; + this can be easily fixed as in + \cref{lst:mycommand-noAdd5,lst:mycommand-noAdd6}.\label{page:command:noAddGlobal} \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycommand-noAdd5.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{mycommand-noAdd5.yaml}}{lst:mycommand-noAdd5} @@ -92,7 +96,8 @@ latexindent.pl mycommand.tex -l mycommand-noAdd4.yaml latexindent.pl mycommand.tex -l mycommand-noAdd5.yaml latexindent.pl mycommand.tex -l mycommand-noAdd6.yaml \end{commandshell} - we receive the respective output given in \cref{lst:mycommand-output-noAdd5,lst:mycommand-output-noAdd6}. + we receive the respective output given in + \cref{lst:mycommand-output-noAdd5,lst:mycommand-output-noAdd6}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/mycommand-noAdd5.tex}{\texttt{mycommand.tex} using \cref{lst:mycommand-noAdd5}}{lst:mycommand-output-noAdd5} diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex index b151d2d7676..ebd37ac4f03 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex @@ -6,8 +6,8 @@ \cmhlistingsfromfile{demonstrations/myenvironment-simple.tex}{\texttt{myenv.tex}}{lst:myenvtex} \yamltitle{noAdditionalIndent}*{fields} - If we do not wish \texttt{myenv} to receive any additional indentation, we have a - few choices available to us, as demonstrated in \cref{lst:myenv-noAdd1,lst:myenv-noAdd2}. + If we do not wish \texttt{myenv} to receive any additional indentation, we have a few + choices available to us, as demonstrated in \cref{lst:myenv-noAdd1,lst:myenv-noAdd2}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/myenv-noAdd1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd1.yaml}}{lst:myenv-noAdd1} @@ -24,13 +24,13 @@ latexindent.pl myenv.tex -l myenv-noAdd1.yaml latexindent.pl myenv.tex -l myenv-noAdd2.yaml \end{commandshell} we obtain the output given in \cref{lst:myenv-output}; note in particular that the - environment \texttt{myenv} has not received any \emph{additional} - indentation, but that the \texttt{outer} environment \emph{has} still - received indentation. + environment \texttt{myenv} has not received any \emph{additional} indentation, but that + the \texttt{outer} environment \emph{has} still received indentation. \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-noAdd1} or \cref{lst:myenv-noAdd2})}{lst:myenv-output} - Upon changing the YAML files to those shown in \cref{lst:myenv-noAdd3,lst:myenv-noAdd4}, and running either + Upon changing the YAML files to those shown in \cref{lst:myenv-noAdd3,lst:myenv-noAdd4}, + and running either \index{switches!-l demonstration} \begin{commandshell} latexindent.pl myenv.tex -l myenv-noAdd3.yaml @@ -48,8 +48,8 @@ latexindent.pl myenv.tex -l myenv-noAdd4.yaml \cmhlistingsfromfile{demonstrations/myenvironment-simple-noAdd-body4.tex}{\texttt{myenv.tex output} (using either \cref{lst:myenv-noAdd3} or \cref{lst:myenv-noAdd4})}{lst:myenv-output-4} - Let's now allow \texttt{myenv} to have some optional and mandatory arguments, as - in \cref{lst:myenv-args}. + Let's now allow \texttt{myenv} to have some optional and mandatory arguments, as in + \cref{lst:myenv-args}. \cmhlistingsfromfile{demonstrations/myenvironment-args.tex}{\texttt{myenv-args.tex}}{lst:myenv-args} @@ -58,15 +58,16 @@ latexindent.pl myenv.tex -l myenv-noAdd4.yaml \begin{commandshell} latexindent.pl -l=myenv-noAdd1.yaml myenv-args.tex \end{commandshell} - we obtain the output shown in \cref{lst:myenv-args-noAdd1}; note that the optional argument, - mandatory argument and body \emph{all} have received no additional indent. - This is because, when \texttt{noAdditionalIndent} is specified in `scalar' form (as in - \cref{lst:myenv-noAdd1}), then \emph{all} parts of the environment (body, - optional and mandatory arguments) are assumed to want no additional indent. + we obtain the output shown in \cref{lst:myenv-args-noAdd1}; note that the optional + argument, mandatory argument and body \emph{all} have received no additional indent. This + is because, when \texttt{noAdditionalIndent} is specified in `scalar' form (as in + \cref{lst:myenv-noAdd1}), then \emph{all} parts of the environment (body, optional and + mandatory arguments) are assumed to want no additional indent. \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd-body1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd1}}{lst:myenv-args-noAdd1} We may customise \texttt{noAdditionalIndent} for optional and mandatory arguments of the - \texttt{myenv} environment, as shown in, for example, \cref{lst:myenv-noAdd5,lst:myenv-noAdd6}. + \texttt{myenv} environment, as shown in, for example, + \cref{lst:myenv-noAdd5,lst:myenv-noAdd6}. \begin{minipage}{.49\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/myenv-noAdd5.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-noAdd5.yaml}}{lst:myenv-noAdd5} @@ -82,11 +83,12 @@ latexindent.pl -l=myenv-noAdd1.yaml myenv-args.tex latexindent.pl myenv.tex -l myenv-noAdd5.yaml latexindent.pl myenv.tex -l myenv-noAdd6.yaml \end{commandshell} - we obtain the respective outputs given in \cref{lst:myenv-args-noAdd5,lst:myenv-args-noAdd6}. Note that in - \cref{lst:myenv-args-noAdd5} the text for the \emph{optional} argument has not - received any additional indentation, and that in \cref{lst:myenv-args-noAdd6} the - \emph{mandatory} argument has not received any additional indentation; in both - cases, the \emph{body} has not received any additional indentation. + we obtain the respective outputs given in + \cref{lst:myenv-args-noAdd5,lst:myenv-args-noAdd6}. Note that in + \cref{lst:myenv-args-noAdd5} the text for the \emph{optional} argument has not received + any additional indentation, and that in \cref{lst:myenv-args-noAdd6} the \emph{mandatory} + argument has not received any additional indentation; in both cases, the \emph{body} has + not received any additional indentation. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/myenvironment-args-noAdd5.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-noAdd5}}{lst:myenv-args-noAdd5} @@ -112,9 +114,8 @@ latexindent.pl myenv.tex -l myenv-rules1.yaml latexindent.pl myenv.tex -l myenv-rules2.yaml \end{commandshell} we obtain the output given in \cref{lst:myenv-rules-output}; note in particular that the - environment \texttt{myenv} has received one tab (from the - \texttt{outer} environment) plus three spaces from \cref{lst:myenv-rules1} or - \ref{lst:myenv-rules2}. + environment \texttt{myenv} has received one tab (from the \texttt{outer} environment) + plus three spaces from \cref{lst:myenv-rules1} or \ref{lst:myenv-rules2}. \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenv-rules1.tex}{\texttt{myenv.tex} output (using either \cref{lst:myenv-rules1} or \cref{lst:myenv-rules2})}{lst:myenv-rules-output} @@ -127,9 +128,10 @@ latexindent.pl myenv.tex -l myenv-rules2.yaml \begin{commandshell} latexindent.pl myenv-args.tex -l=myenv-rules1.yaml \end{commandshell} - we obtain the output in \cref{lst:myenv-args-rules1}; note that the body, optional argument - and mandatory argument of \texttt{myenv} have \emph{all} received - the same customised indentation. \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1}}{lst:myenv-args-rules1} + we obtain the output in \cref{lst:myenv-args-rules1}; note that the body, optional + argument and mandatory argument of \texttt{myenv} have \emph{all} received the same + customised indentation. + \cmhlistingsfromfile[showtabs=true,showspaces=true]{demonstrations/myenvironment-args-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:myenv-rules1}}{lst:myenv-args-rules1} You can specify different indentation rules for the different features using, for example, \cref{lst:myenv-rules3,lst:myenv-rules4} @@ -148,7 +150,8 @@ latexindent.pl myenv-args.tex -l=myenv-rules1.yaml latexindent.pl myenv-args.tex -l myenv-rules3.yaml latexindent.pl myenv-args.tex -l myenv-rules4.yaml \end{commandshell} - then we obtain the respective outputs given in \cref{lst:myenv-args-rules3,lst:myenv-args-rules4}. + then we obtain the respective outputs given in + \cref{lst:myenv-args-rules3,lst:myenv-args-rules4}. \begin{widepage} \begin{minipage}{.5\textwidth} @@ -160,8 +163,8 @@ latexindent.pl myenv-args.tex -l myenv-rules4.yaml \end{minipage} \end{widepage} - Note that in \cref{lst:myenv-args-rules3}, the optional argument has only received a single - space of indentation, while the mandatory argument has received the default (tab) + Note that in \cref{lst:myenv-args-rules3}, the optional argument has only received a + single space of indentation, while the mandatory argument has received the default (tab) indentation; the environment body has received three spaces of indentation. In \cref{lst:myenv-args-rules4}, the optional argument has received the default (tab) @@ -172,11 +175,12 @@ latexindent.pl myenv-args.tex -l myenv-rules4.yaml \begin{wrapfigure}[6]{r}[0pt]{7cm} \cmhlistingsfromfile[style=noAdditionalIndentGlobalEnv]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{noAdditionalIndentGlobal}}{lst:noAdditionalIndentGlobal:environments} \end{wrapfigure} - Assuming that your environment name is not found within neither \texttt{noAdditionalIndent} - nor \texttt{indentRules}, the next place that \texttt{latexindent.pl} will look is - \texttt{noAdditionalIndentGlobal}, and in particular \emph{for the environments} key (see - \cref{lst:noAdditionalIndentGlobal:environments}). Let's say that you change the value of \texttt{environments} - to \texttt{1} in \cref{lst:noAdditionalIndentGlobal:environments}, and that you run + Assuming that your environment name is not found within neither + \texttt{noAdditionalIndent} nor \texttt{indentRules}, the next place that + \texttt{latexindent.pl} will look is \texttt{noAdditionalIndentGlobal}, and in particular + \emph{for the environments} key (see \cref{lst:noAdditionalIndentGlobal:environments}). + Let's say that you change the value of \texttt{environments} to \texttt{1} in + \cref{lst:noAdditionalIndentGlobal:environments}, and that you run \index{switches!-l demonstration} \begin{widepage} @@ -186,12 +190,13 @@ latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-noAdditionalGlobal.yaml \end{commandshell} \end{widepage} - The respective output from these two commands are in \cref{lst:myenv-args-no-add-global1,lst:myenv-args-no-add-global2}; in + The respective output from these two commands are in + \cref{lst:myenv-args-no-add-global1,lst:myenv-args-no-add-global2}; in \cref{lst:myenv-args-no-add-global1} notice that \emph{both} environments receive no - additional indentation but that the arguments of \texttt{myenv} still - \emph{do} receive indentation. In \cref{lst:myenv-args-no-add-global2} notice that the - \emph{outer} environment does not receive additional indentation, but because - of the settings from \texttt{myenv-rules1.yaml} (in \vref{lst:myenv-rules1}), the \texttt{myenv} environment + additional indentation but that the arguments of \texttt{myenv} still \emph{do} receive + indentation. In \cref{lst:myenv-args-no-add-global2} notice that the \emph{outer} + environment does not receive additional indentation, but because of the settings from + \texttt{myenv-rules1.yaml} (in \vref{lst:myenv-rules1}), the \texttt{myenv} environment still \emph{does} receive indentation. \begin{minipage}{.45\textwidth} @@ -202,8 +207,9 @@ latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-noAdditionalGlobal.yaml \cmhlistingsfromfile{demonstrations/myenvironment-args-rules1-noAddGlobal2.tex}{\texttt{myenv-args.tex} using \cref{lst:noAdditionalIndentGlobal:environments,lst:myenv-rules1}}{lst:myenv-args-no-add-global2} \end{minipage} - In fact, \texttt{noAdditionalIndentGlobal} also contains keys that control the indentation of - optional and mandatory arguments; on referencing \cref{lst:opt-args-no-add-glob,lst:mand-args-no-add-glob} + In fact, \texttt{noAdditionalIndentGlobal} also contains keys that control the + indentation of optional and mandatory arguments; on referencing + \cref{lst:opt-args-no-add-glob,lst:mand-args-no-add-glob} \begin{minipage}{.49\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/opt-args-no-add-glob.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{opt-args-no-add-glob.yaml}}{lst:opt-args-no-add-glob} @@ -219,7 +225,8 @@ latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-noAdditionalGlobal.yaml latexindent.pl myenv-args.tex -local opt-args-no-add-glob.yaml latexindent.pl myenv-args.tex -local mand-args-no-add-glob.yaml \end{commandshell} - which produces the respective outputs given in \cref{lst:myenv-args-no-add-opt,lst:myenv-args-no-add-mand}. Notice that in + which produces the respective outputs given in + \cref{lst:myenv-args-no-add-opt,lst:myenv-args-no-add-mand}. Notice that in \cref{lst:myenv-args-no-add-opt} the \emph{optional} argument has not received any additional indentation, and in \cref{lst:myenv-args-no-add-mand} the \emph{mandatory} argument has not received any additional indentation. @@ -237,8 +244,8 @@ latexindent.pl myenv-args.tex -local mand-args-no-add-glob.yaml \cmhlistingsfromfile[style=indentRulesGlobalEnv]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentRulesGlobal}}{lst:indentRulesGlobal:environments} \end{wrapfigure} The final check that \texttt{latexindent.pl} will make is to look for - \texttt{indentRulesGlobal} as detailed in \cref{lst:indentRulesGlobal:environments}; if you change the - \texttt{environments} field to anything involving horizontal space, say + \texttt{indentRulesGlobal} as detailed in \cref{lst:indentRulesGlobal:environments}; if + you change the \texttt{environments} field to anything involving horizontal space, say \lstinline!" "!, and then run the following commands \index{switches!-l demonstration} @@ -246,12 +253,14 @@ latexindent.pl myenv-args.tex -local mand-args-no-add-glob.yaml latexindent.pl myenv-args.tex -l env-indentRules.yaml latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-indentRules.yaml \end{commandshell} - then the respective output is shown in \cref{lst:myenv-args-indent-rules-global1,lst:myenv-args-indent-rules-global2}. Note that in - \cref{lst:myenv-args-indent-rules-global1}, both the environment blocks have received a single-space - indentation, whereas in \cref{lst:myenv-args-indent-rules-global2} the \texttt{outer} environment - has received single-space indentation (specified by \texttt{indentRulesGlobal}), but - \texttt{myenv} has received \lstinline!" "!, as specified by the - particular \texttt{indentRules} for \texttt{myenv} \vref{lst:myenv-rules1}. + then the respective output is shown in + \cref{lst:myenv-args-indent-rules-global1,lst:myenv-args-indent-rules-global2}. Note that + in \cref{lst:myenv-args-indent-rules-global1}, both the environment blocks have received + a single-space indentation, whereas in \cref{lst:myenv-args-indent-rules-global2} the + \texttt{outer} environment has received single-space indentation (specified by + \texttt{indentRulesGlobal}), but \texttt{myenv} has received \lstinline!" "!, as + specified by the particular \texttt{indentRules} for \texttt{myenv} + \vref{lst:myenv-rules1}. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[showspaces=true]{demonstrations/myenvironment-args-global-rules1.tex}{\texttt{myenv-args.tex} using \cref{lst:indentRulesGlobal:environments}}{lst:myenv-args-indent-rules-global1} @@ -278,9 +287,10 @@ latexindent.pl myenv-args.tex -l myenv-rules1.yaml,env-indentRules.yaml latexindent.pl myenv-args.tex -local opt-args-indent-rules-glob.yaml latexindent.pl myenv-args.tex -local mand-args-indent-rules-glob.yaml \end{commandshell} - we obtain the respective outputs in \cref{lst:myenv-args-indent-rules-global3,lst:myenv-args-indent-rules-global4}. Note that the - \emph{optional} argument in \cref{lst:myenv-args-indent-rules-global3} has received two tabs worth - of indentation, while the \emph{mandatory} argument has done so in + we obtain the respective outputs in + \cref{lst:myenv-args-indent-rules-global3,lst:myenv-args-indent-rules-global4}. Note that + the \emph{optional} argument in \cref{lst:myenv-args-indent-rules-global3} has received + two tabs worth of indentation, while the \emph{mandatory} argument has done so in \cref{lst:myenv-args-indent-rules-global4}. \begin{widepage} diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex index c615be110df..0a08b9b4c8c 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex @@ -1,15 +1,14 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \subsubsection{Environments with items} With reference to \vref{lst:indentafteritems,lst:itemNames}, some commands may contain - \texttt{item} commands; for the purposes of this discussion, we will use the - code from \vref{lst:itemsbefore}. + \texttt{item} commands; for the purposes of this discussion, we will use the code from + \vref{lst:itemsbefore}. - Assuming that you've populated \texttt{itemNames} with the name of your - \texttt{item}, you can put the item name into \texttt{noAdditionalIndent} as in - \cref{lst:item-noAdd1}, although a more efficient approach may be to change the relevant - field in \texttt{itemNames} to \texttt{0}. Similarly, you can customise - the indentation that your \texttt{item} receives using \texttt{indentRules}, - as in \cref{lst:item-rules1} + Assuming that you've populated \texttt{itemNames} with the name of your \texttt{item}, + you can put the item name into \texttt{noAdditionalIndent} as in \cref{lst:item-noAdd1}, + although a more efficient approach may be to change the relevant field in + \texttt{itemNames} to \texttt{0}. Similarly, you can customise the indentation that your + \texttt{item} receives using \texttt{indentRules}, as in \cref{lst:item-rules1} \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-noAdd1.yaml}[yaml-TCB]{\texttt{item-noAdd1.yaml}}{lst:item-noAdd1} @@ -22,9 +21,9 @@ latexindent.pl items1.tex -local item-noAdd1.yaml latexindent.pl items1.tex -local item-rules1.yaml \end{commandshell} - the respective outputs are given in \cref{lst:items1-noAdd1,lst:items1-rules1}; note that in - \cref{lst:items1-noAdd1} that the text after each \texttt{item} has not received - any additional indentation, and in \cref{lst:items1-rules1}, the text after each + the respective outputs are given in \cref{lst:items1-noAdd1,lst:items1-rules1}; note that + in \cref{lst:items1-noAdd1} that the text after each \texttt{item} has not received any + additional indentation, and in \cref{lst:items1-rules1}, the text after each \texttt{item} has received a single space of indentation, specified by \cref{lst:item-rules1}. @@ -38,10 +37,10 @@ latexindent.pl items1.tex -local item-rules1.yaml Alternatively, you might like to populate \texttt{noAdditionalIndentGlobal} or \texttt{indentRulesGlobal} using the \texttt{items} key, as demonstrated in - \cref{lst:items-noAdditionalGlobal,lst:items-indentRulesGlobal}. Note that there is a need to `reset/remove' the - \texttt{item} field from \texttt{indentRules} in both cases (see the hierarchy - description given on \cpageref{sec:noadd-indent-rules}) as the \texttt{item} command is a - member of \texttt{indentRules} by default. + \cref{lst:items-noAdditionalGlobal,lst:items-indentRulesGlobal}. Note that there is a + need to `reset/remove' the \texttt{item} field from \texttt{indentRules} in both cases + (see the hierarchy description given on \cpageref{sec:noadd-indent-rules}) as the + \texttt{item} command is a member of \texttt{indentRules} by default. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/items-noAdditionalGlobal.yaml}[yaml-TCB]{\texttt{items-noAdditionalGlobal.yaml}}{lst:items-noAdditionalGlobal} @@ -57,7 +56,7 @@ latexindent.pl items1.tex -local item-rules1.yaml latexindent.pl items1.tex -local items-noAdditionalGlobal.yaml latexindent.pl items1.tex -local items-indentRulesGlobal.yaml \end{commandshell} - the respective outputs from \cref{lst:items1-noAdd1,lst:items1-rules1} are obtained; note, however, that - \emph{all} such \texttt{item} commands without their own individual + the respective outputs from \cref{lst:items1-noAdd1,lst:items1-rules1} are obtained; + note, however, that \emph{all} such \texttt{item} commands without their own individual \texttt{noAdditionalIndent} or \texttt{indentRules} settings would behave as in these listings. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex index 3cbe5996ea9..de647cde5a0 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex @@ -1,8 +1,9 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \subsubsection{afterHeading code blocks}\label{subsubsec-headings-no-add-indent-rules} Let's use the example \cref{lst:headings2} for demonstration throughout this - \namecref{subsubsec-headings-no-add-indent-rules}. As discussed on \cpageref{lst:headings1}, by default - \texttt{latexindent.pl} will not add indentation after headings. + \namecref{subsubsec-headings-no-add-indent-rules}. As discussed on + \cpageref{lst:headings1}, by default \texttt{latexindent.pl} will not add indentation + after headings. \cmhlistingsfromfile{demonstrations/headings2.tex}{\texttt{headings2.tex}}{lst:headings2} @@ -20,15 +21,15 @@ latexindent.pl headings2.tex -l headings3.yaml \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings3.yaml}[yaml-TCB]{\texttt{headings3.yaml}}{lst:headings3yaml} \end{cmhtcbraster} - If we specify \texttt{noAdditionalIndent} as in \cref{lst:headings4yaml} and run the command + If we specify \texttt{noAdditionalIndent} as in \cref{lst:headings4yaml} and run the + command \index{switches!-l demonstration} \begin{commandshell} latexindent.pl headings2.tex -l headings4.yaml \end{commandshell} then we receive the output in \cref{lst:headings2-mod4}. Note that the arguments - \emph{and} the body after the heading of \texttt{paragraph} has received - no additional indentation, because we have specified \texttt{noAdditionalIndent} in scalar - form. + \emph{and} the body after the heading of \texttt{paragraph} has received no additional + indentation, because we have specified \texttt{noAdditionalIndent} in scalar form. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/headings2-mod4.tex}{\texttt{headings2.tex} using \cref{lst:headings4yaml}}{lst:headings2-mod4} @@ -36,10 +37,9 @@ latexindent.pl headings2.tex -l headings4.yaml \end{cmhtcbraster} Similarly, if we specify \texttt{indentRules} as in \cref{lst:headings5yaml} and run - analogous commands to those above, we receive the output in \cref{lst:headings2-mod5}; note - that the \emph{body}, \emph{mandatory argument} and content - \emph{after the heading} of \texttt{paragraph} have \emph{all} received - three tabs worth of indentation. + analogous commands to those above, we receive the output in \cref{lst:headings2-mod5}; + note that the \emph{body}, \emph{mandatory argument} and content \emph{after the heading} + of \texttt{paragraph} have \emph{all} received three tabs worth of indentation. \begin{cmhtcbraster}[raster force size=false, raster column 1/.style={add to width=1cm}, @@ -67,14 +67,15 @@ latexindent.pl headings2.tex -l headings4.yaml \cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings7.yaml}[yaml-TCB]{\texttt{headings7.yaml}}{lst:headings7yaml} \end{cmhtcbraster} - Finally, let's consider \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} shown in - \cref{lst:headings8yaml,lst:headings9yaml} respectively, with respective output in \cref{lst:headings2-mod8,lst:headings2-mod9}. - Note that in \cref{lst:headings8yaml} the \emph{mandatory argument} of \texttt{paragraph} - has received a (default) tab's worth of indentation, while the body after the heading has - received \emph{no additional indentation}. Similarly, in \cref{lst:headings2-mod9}, the - \emph{argument} has received both a (default) tab plus two spaces of indentation - (from the global rule specified in \cref{lst:headings9yaml}), and the remaining body after - \texttt{paragraph} has received just two spaces of indentation. + Finally, let's consider \texttt{noAdditionalIndentGlobal} and \texttt{indentRulesGlobal} + shown in \cref{lst:headings8yaml,lst:headings9yaml} respectively, with respective output + in \cref{lst:headings2-mod8,lst:headings2-mod9}. Note that in \cref{lst:headings8yaml} + the \emph{mandatory argument} of \texttt{paragraph} has received a (default) tab's worth + of indentation, while the body after the heading has received \emph{no additional + indentation}. Similarly, in \cref{lst:headings2-mod9}, the \emph{argument} has received + both a (default) tab plus two spaces of indentation (from the global rule specified in + \cref{lst:headings9yaml}), and the remaining body after \texttt{paragraph} has received + just two spaces of indentation. \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/headings2-mod8.tex}{\texttt{headings2.tex} using \cref{lst:headings8yaml}}{lst:headings2-mod8} diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex index 419fc0d53f9..5f46af63260 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex @@ -1,8 +1,8 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \subsubsection{ifelsefi code blocks} Let's use the simple example shown in \cref{lst:ifelsefi1}; when \texttt{latexindent.pl} - operates on this file, the output as in \cref{lst:ifelsefi1-default}; note that the body of - each of the \lstinline!\if! statements have been indented, and that the + operates on this file, the output as in \cref{lst:ifelsefi1-default}; note that the body + of each of the \lstinline!\if! statements have been indented, and that the \lstinline!\else! statement has been accounted for correctly. \begin{minipage}{.45\textwidth} @@ -32,9 +32,10 @@ latexindent.pl ifelsefi1.tex -local ifnum-noAdd.yaml latexindent.pl ifelsefi1.tex -l ifnum-indent-rules.yaml \end{commandshell} - we receive the respective output given in \cref{lst:ifelsefi1-output-noAdd,lst:ifelsefi1-output-indent-rules}; note that in - \cref{lst:ifelsefi1-output-noAdd}, the \texttt{ifnum} code block has \emph{not} - received any additional indentation, while in \cref{lst:ifelsefi1-output-indent-rules}, the + we receive the respective output given in + \cref{lst:ifelsefi1-output-noAdd,lst:ifelsefi1-output-indent-rules}; note that in + \cref{lst:ifelsefi1-output-noAdd}, the \texttt{ifnum} code block has \emph{not} received + any additional indentation, while in \cref{lst:ifelsefi1-output-indent-rules}, the \texttt{ifnum} code block has received one tab and two spaces of indentation. \begin{minipage}{.45\textwidth} @@ -62,9 +63,12 @@ latexindent.pl ifelsefi1.tex -l ifnum-indent-rules.yaml latexindent.pl ifelsefi1.tex -local ifelsefi-noAdd-glob.yaml latexindent.pl ifelsefi1.tex -l ifelsefi-indent-rules-global.yaml \end{commandshell} - we receive the outputs in \cref{lst:ifelsefi1-output-noAdd-glob,lst:ifelsefi1-output-indent-rules-global}; notice that in \cref{lst:ifelsefi1-output-noAdd-glob} - neither of the \texttt{ifelsefi} code blocks have received indentation, while in - \cref{lst:ifelsefi1-output-indent-rules-global} both code blocks have received a single space of indentation. + we receive the outputs in + \cref{lst:ifelsefi1-output-noAdd-glob,lst:ifelsefi1-output-indent-rules-global}; notice + that in \cref{lst:ifelsefi1-output-noAdd-glob} neither of the \texttt{ifelsefi} code + blocks have received indentation, while in + \cref{lst:ifelsefi1-output-indent-rules-global} both code blocks have received a single + space of indentation. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/ifelsefi1-noAdd-glob.tex}{\texttt{ifelsefi1.tex} using \cref{lst:ifelsefi-noAdd-glob}}{lst:ifelsefi1-output-noAdd-glob} @@ -76,9 +80,9 @@ latexindent.pl ifelsefi1.tex -l ifelsefi-indent-rules-global.yaml We can further explore the treatment of \texttt{ifElseFi} code blocks% - \announce{2018-04-27}*{updates to ifElseFi code blocks} in \cref{lst:ifelsefi2}, - and the associated default output given in \cref{lst:ifelsefi2-default}; note, in particular, - that the bodies of each of the `or statements' have been indented. + \announce{2018-04-27}*{updates to ifElseFi code blocks} in \cref{lst:ifelsefi2}, and the associated default output given in + \cref{lst:ifelsefi2-default}; note, in particular, that the bodies of each of the `or + statements' have been indented. \begin{cmhtcbraster}[raster column skip=.1\linewidth] \cmhlistingsfromfile{demonstrations/ifelsefi2.tex}{\texttt{ifelsefi2.tex}}{lst:ifelsefi2} diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex index f72ac43d395..a6be17e6fa5 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex @@ -1,9 +1,9 @@ % arara: pdflatex: {shell: yes, files: [latexindent]} \subsubsection{The remaining code blocks} Referencing the different types of code blocks in \vref{tab:code-blocks}, we have a few - code blocks yet to cover; these are very similar to the \texttt{commands} code block - type covered comprehensively in \vref{subsubsec:commands-arguments}, but a small discussion defining - these remaining code blocks is necessary. + code blocks yet to cover; these are very similar to the \texttt{commands} code block type + covered comprehensively in \vref{subsubsec:commands-arguments}, but a small discussion + defining these remaining code blocks is necessary. \paragraph{keyEqualsValuesBracesBrackets} \texttt{latexindent.pl} defines this type of code block by the following criteria: @@ -15,8 +15,9 @@ \item then at least one set of curly braces or square brackets (comments and line breaks allowed throughout). \end{itemize} - See the \texttt{keyEqualsValuesBracesBrackets: follow} and \texttt{keyEqualsValuesBracesBrackets: name} fields of the fine tuning - section in \vref{lst:fineTuning}% + See the \texttt{keyEqualsValuesBracesBrackets: follow} and + \texttt{keyEqualsValuesBracesBrackets: name} fields of the fine tuning section in + \vref{lst:fineTuning}% \announce{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets} An example is shown in \cref{lst:pgfkeysbefore}, with the default output given in @@ -30,29 +31,31 @@ \cmhlistingsfromfile[showtabs=true]{demonstrations/pgfkeys1-default.tex}{\texttt{pgfkeys1.tex} default output}{lst:pgfkeys1:default} \end{minipage}% - In \cref{lst:pgfkeys1:default}, note that the maximum indentation is three tabs, and these - come from: + In \cref{lst:pgfkeys1:default}, note that the maximum indentation is three tabs, and + these come from: \begin{itemize} \item the \lstinline!\pgfkeys! command's mandatory argument; \item the \lstinline!start coordinate/.initial! key's mandatory argument; - \item the \lstinline!start coordinate/.initial! key's body, which is defined as any lines following the name - of the key that include its arguments. This is the part controlled by the - \emph{body} field for \texttt{noAdditionalIndent} and friends from + \item the \lstinline!start coordinate/.initial! key's body, which is defined as any lines + following the name of the key that include its arguments. This is the part controlled by + the \emph{body} field for \texttt{noAdditionalIndent} and friends from \cpageref{sec:noadd-indent-rules}. \end{itemize} \paragraph{namedGroupingBracesBrackets} This type of code block is mostly motivated by tikz-based code; we define this code block as follows: \begin{itemize} - \item it must immediately follow either \emph{horizontal space} OR \emph{one or more line breaks} OR + \item it must immediately follow either \emph{horizontal space} OR \emph{one or more line + breaks} OR \lstinline!{! OR \lstinline![! OR \lstinline!$! OR \lstinline!)! OR \lstinline!(! \item the name may contain the characters detailed in \vref{tab:code-blocks}; \item then at least one set of curly braces or square brackets (comments and line breaks allowed throughout). \end{itemize} - See the \texttt{NamedGroupingBracesBrackets: follow} and \texttt{NamedGroupingBracesBrackets: name} fields of the fine tuning - section in \vref{lst:fineTuning}% + See the \texttt{NamedGroupingBracesBrackets: follow} and + \texttt{NamedGroupingBracesBrackets: name} fields of the fine tuning section in + \vref{lst:fineTuning}% \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets} A simple example is given in \cref{lst:child1}, with default output in @@ -66,21 +69,21 @@ \cmhlistingsfromfile[showtabs=true]{demonstrations/child1-default.tex}{\texttt{child1.tex} default output}{lst:child1:default} \end{minipage}% - In particular, \texttt{latexindent.pl} considers \texttt{child}, - \texttt{parent} and \texttt{node} all to be - \texttt{namedGroupingBracesBrackets}\footnote{ - You may like to verify this by using the \texttt{-tt} option and checking \texttt{indent.log}! }. Referencing \cref{lst:child1:default}, note - that the maximum indentation is two tabs, and these come from: + In particular, \texttt{latexindent.pl} considers \texttt{child}, \texttt{parent} and + \texttt{node} all to be \texttt{namedGroupingBracesBrackets}\footnote{ You may like to + verify this by using the \texttt{-tt} option and checking \texttt{indent.log}! }. + Referencing \cref{lst:child1:default}, note that the maximum indentation is two tabs, and + these come from: \begin{itemize} \item the \lstinline!child!'s mandatory argument; - \item the \lstinline!child!'s body, which is defined as any lines following the name of - the \texttt{namedGroupingBracesBrackets} that include its arguments. This is the part controlled by the - \emph{body} field for \texttt{noAdditionalIndent} and friends from + \item the \lstinline!child!'s body, which is defined as any lines following the name of the + \texttt{namedGroupingBracesBrackets} that include its arguments. This is the part + controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from \cpageref{sec:noadd-indent-rules}. \end{itemize} - \paragraph{UnNamedGroupingBracesBrackets} occur in a variety of situations; specifically, we define - this type of code block as satisfying the following criteria: + \paragraph{UnNamedGroupingBracesBrackets} occur in a variety of situations; specifically, + we define this type of code block as satisfying the following criteria: \begin{itemize} \item it must immediately follow either \lstinline!{! OR \lstinline![! OR \lstinline!,! OR \lstinline!&! OR \lstinline!)! OR @@ -88,7 +91,8 @@ \item then at least one set of curly braces or square brackets (comments and line breaks allowed throughout). \end{itemize} - See the \texttt{UnNamedGroupingBracesBrackets: follow} field of the fine tuning section in \vref{lst:fineTuning}% + See the \texttt{UnNamedGroupingBracesBrackets: follow} field of the fine tuning section + in \vref{lst:fineTuning}% \announce{2019-07-13}{fine tuning: namedGroupingBracesBrackets} An example is shown in \cref{lst:psforeach1} with default output give in @@ -102,20 +106,18 @@ \cmhlistingsfromfile[showtabs=true]{demonstrations/psforeach1-default.tex}{\texttt{psforeach1.tex} default output}{lst:psforeach:default} \end{minipage}% - Referencing \cref{lst:psforeach:default}, there are \emph{three} sets of unnamed - braces. Note also that the maximum value of indentation is three tabs, and these come - from: + Referencing \cref{lst:psforeach:default}, there are \emph{three} sets of unnamed braces. + Note also that the maximum value of indentation is three tabs, and these come from: \begin{itemize} \item the \lstinline!\psforeach! command's mandatory argument; \item the \emph{first} un-named braces mandatory argument; - \item the \emph{first} un-named braces \emph{body}, which we define as any - lines following the first opening \lstinline!{! or \lstinline![! that - defined the code block. This is the part controlled by the \emph{body} field - for \texttt{noAdditionalIndent} and friends from \cpageref{sec:noadd-indent-rules}. + \item the \emph{first} un-named braces \emph{body}, which we define as any lines following the + first opening \lstinline!{! or \lstinline![! that defined the code block. This is the + part controlled by the \emph{body} field for \texttt{noAdditionalIndent} and friends from + \cpageref{sec:noadd-indent-rules}. \end{itemize} - Users wishing to customise the mandatory and/or optional arguments on a - \emph{per-name} basis for the \texttt{UnNamedGroupingBracesBrackets} should use - \texttt{always-un-named}. + Users wishing to customise the mandatory and/or optional arguments on a \emph{per-name} + basis for the \texttt{UnNamedGroupingBracesBrackets} should use \texttt{always-un-named}. \paragraph{filecontents} code blocks behave just as \texttt{environments}, except that neither arguments nor items are sought. diff --git a/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex b/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex index 7a974461652..410d3c31093 100644 --- a/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex +++ b/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex @@ -24,10 +24,11 @@ latexindent.pl special1.tex -local displayMath-noAdd.yaml latexindent.pl special1.tex -l displayMath-indent-rules.yaml \end{commandshell} - we receive the respective output given in \cref{lst:special1-output-noAdd,lst:special1-output-indent-rules}; note that in + we receive the respective output given in + \cref{lst:special1-output-noAdd,lst:special1-output-indent-rules}; note that in \cref{lst:special1-output-noAdd}, the \texttt{displayMath} code block has \emph{not} - received any additional indentation, while in \cref{lst:special1-output-indent-rules}, the - \texttt{displayMath} code block has received three tabs worth of indentation. + received any additional indentation, while in \cref{lst:special1-output-indent-rules}, + the \texttt{displayMath} code block has received three tabs worth of indentation. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/special1-noAdd.tex}{\texttt{special1.tex} using \cref{lst:displayMath-noAdd}}{lst:special1-output-noAdd} @@ -54,9 +55,11 @@ latexindent.pl special1.tex -l displayMath-indent-rules.yaml latexindent.pl special1.tex -local special-noAdd-glob.yaml latexindent.pl special1.tex -l special-indent-rules-global.yaml \end{commandshell} - we receive the outputs in \cref{lst:special1-output-noAdd-glob,lst:special1-output-indent-rules-global}; notice that in \cref{lst:special1-output-noAdd-glob} - neither of the \texttt{special} code blocks have received indentation, while in - \cref{lst:special1-output-indent-rules-global} both code blocks have received a single space of indentation. + we receive the outputs in + \cref{lst:special1-output-noAdd-glob,lst:special1-output-indent-rules-global}; notice + that in \cref{lst:special1-output-noAdd-glob} neither of the \texttt{special} code blocks + have received indentation, while in \cref{lst:special1-output-indent-rules-global} both + code blocks have received a single space of indentation. \begin{minipage}{.45\textwidth} \cmhlistingsfromfile{demonstrations/special1-noAdd-glob.tex}{\texttt{special1.tex} using \cref{lst:special-noAdd-glob}}{lst:special1-output-noAdd-glob} diff --git a/Master/texmf-dist/doc/support/latexindent/title.tex b/Master/texmf-dist/doc/support/latexindent/title.tex index fcbb6f63240..39b50dc0443 100644 --- a/Master/texmf-dist/doc/support/latexindent/title.tex +++ b/Master/texmf-dist/doc/support/latexindent/title.tex @@ -8,14 +8,14 @@ sharp corners, enhanced, overlay={\node[anchor=north east,outer sep=2pt] at ([xshift=3cm,yshift=4mm]frame.north east) {\includegraphics[width=3cm]{logo}}; }] - \centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.10.1 + \centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.11 \end{tcolorbox} } \author{Chris Hughes \thanks{and contributors! See \vref{sec:contributors}. For all communication, please visit \cite{latexindent-home}.}} -\date{2021-07-23} +\date{2021-07-31} \maketitle \begin{adjustwidth}{1cm}{1cm} \small diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm index 85a05579503..4098d018137 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm @@ -222,6 +222,21 @@ sub find_objects{ # one sentence per line: sentences are objects, as of V3.5.1 $self->one_sentence_per_line if ($is_m_switch_active and ${$masterSettings{modifyLineBreaks}{oneSentencePerLine}}{manipulateSentences}); + if ($is_m_switch_active and !${$self}{preamblePresent}){ + $self->yaml_get_textwrap_removeparagraphline_breaks; + } + + if( $is_m_switch_active and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} == 1){ + # call the remove_paragraph_line_breaks and text_wrap routines + if(${$masterSettings{modifyLineBreaks}{removeParagraphLineBreaks}}{beforeTextWrap}){ + $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; + $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); + } else { + $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); + $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; + } + } + # search for environments $logger->trace('looking for ENVIRONMENTS') if $is_t_switch_active; $self->find_environments if ${$self}{body} =~ m/$environmentBasicRegExp/s; @@ -238,17 +253,15 @@ sub find_objects{ $self->find_commands_or_key_equals_values_braces_and_special if ${$self}{body} =~ m/$specialBeginAndBracesBracketsBasicRegExp/s; # documents without preamble need a manual call to the paragraph_one_line routine - if ($is_m_switch_active and !${$self}{preamblePresent}){ - $self->yaml_get_textwrap_removeparagraphline_breaks; - - # call the remove_paragraph_line_breaks and text_wrap routines - if(${$masterSettings{modifyLineBreaks}{removeParagraphLineBreaks}}{beforeTextWrap}){ - $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; - $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); - } else { - $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); - $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; - } + if ($is_m_switch_active and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} == 0 ){ + # call the remove_paragraph_line_breaks and text_wrap routines + if(${$masterSettings{modifyLineBreaks}{removeParagraphLineBreaks}}{beforeTextWrap}){ + $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; + $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); + } else { + $self->text_wrap if (${$self}{textWrapOptions} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis}); + $self->remove_paragraph_line_breaks if ${$self}{removeParagraphLineBreaks}; + } } # if there are no children, return @@ -303,12 +316,15 @@ sub get_settings_and_store_new_object{ # there are a number of tasks common to each object $latexIndentObject->tasks_common_to_each_object(%{$self}); + + # removeParagraphLineBreaks and textWrapping fun! + $latexIndentObject->text_wrap_remove_paragraph_line_breaks if( $is_m_switch_active and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} ); # tasks particular to each object $latexIndentObject->tasks_particular_to_each_object; # removeParagraphLineBreaks and textWrapping fun! - $latexIndentObject->text_wrap_remove_paragraph_line_breaks if($is_m_switch_active); + $latexIndentObject->text_wrap_remove_paragraph_line_breaks if($is_m_switch_active and !${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} ); # store children in special hash push(@{${$self}{children}},$latexIndentObject); diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm index f28fdd6525c..1529493d4f9 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm @@ -570,6 +570,27 @@ sub yaml_read_settings{ $logger->info(Dumper(\%masterSettings)); } + if( $is_m_switch_active + and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} + and !${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis} ){ + + # the following settings don't make sense, so we change + # + # modifyLineBreaks: + # textWrapOptions: + # perCodeBlockBasis: 0 + # beforeFindingChildCodeBlocks: 1 + # into + # + # modifyLineBreaks: + # textWrapOptions: + # perCodeBlockBasis: 0 + # beforeFindingChildCodeBlocks: 0 + $logger->warn("*textWrapOptions:beforeFindingChildCodeBlocks:1 with textWrapOptions:perCodeBlockBasis:0"); + $logger->warn("turning off beforeFindingChildCodeBlocks by changing textWrapOptions:beforeFindingOtherCodeBlocks to be 0"); + $logger->warn("you need to set *both* values to be 1 to use the beforeFindingChildCodeBlocks feature"); + ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{beforeFindingChildCodeBlocks} = 0; + } return; } diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm index 1b3f9486459..f11221e25bd 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm @@ -274,6 +274,7 @@ sub verbatim_modify_line_breaks{ } } } + sub text_wrap_remove_paragraph_line_breaks{ my $self = shift; @@ -293,6 +294,60 @@ sub text_wrap{ # alignment at ampersand can take priority return if(${$self}{lookForAlignDelims} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{alignAtAmpersandTakesPriority}); + # goal: get an accurate measurement of verbatim objects; + # + # example: + # Lorem \verb!x+y! ipsum dolor sit amet + # + # is represented as + # + # Lorem LTXIN-TK-VERBATIM1-END ipsum dolor sit amet + # + # so we *measure* the verbatim token and replace it with + # an appropriate-length string + # + # Lorem a2A41233rt ipsum dolor sit amet + # + # and then put the body back to + # + # Lorem LTXIN-TK-VERBATIM1-END ipsum dolor sit amet + # + # following the text wrapping + my @putVerbatimBackIn; + + # check body for verbatim and get measurements + if (${$self}{body} =~ m/$tokens{verbatim}/s and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{huge} eq "overflow"){ + + # reference: https://stackoverflow.com/questions/10336660/in-perl-how-can-i-generate-random-strings-consisting-of-eight-hex-digits + my @set = ('0' ..'9', 'A' .. 'Z', 'a' .. 'z'); + + # loop through verbatim objects + while( my ($verbatimID,$child)= each %verbatimStorage){ + my $verbatimThing = ${$child}{begin}.${$child}{body}.${$child}{end}; + + # if the object has line breaks, don't measure it + next if $verbatimThing =~ m/\R/s; + + if(${$self}{body} =~m/$verbatimID/s){ + + # measure length + my $verbatimLength = Unicode::GCString->new($verbatimThing)->columns(); + + # create temporary ID, and check that it is not contained in the body + my $verbatimTmpID = join '' => map $set[rand @set], 1 .. $verbatimLength; + while(${$self}{body} =~m/$verbatimTmpID/s){ + $verbatimTmpID = join '' => map $set[rand @set], 1 .. $verbatimLength; + } + + # store for use after the text wrapping + push(@putVerbatimBackIn,{origVerbatimID=>$verbatimID,tmpVerbatimID=>$verbatimTmpID}); + + # make the substitution + ${$self}{body} =~ s/$verbatimID/$verbatimTmpID/s; + } + } + } + # call the text wrapping routine my $columns; @@ -311,15 +366,20 @@ sub text_wrap{ $columns = 80; } + # vital Text::Wrap options $Text::Wrap::columns=$columns; - if(${$masterSettings{modifyLineBreaks}{textWrapOptions}}{separator} ne ''){ - $Text::Wrap::separator=${$masterSettings{modifyLineBreaks}{textWrapOptions}}{separator}; - } - $Text::Wrap::huge = ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{huge} if ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{huge}; + $Text::Wrap::huge = ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{huge}; + + # all other Text::Wrap options not usually needed/helpful, but available + $Text::Wrap::separator=${$masterSettings{modifyLineBreaks}{textWrapOptions}}{separator} if(${$masterSettings{modifyLineBreaks}{textWrapOptions}}{separator} ne ''); $Text::Wrap::break = ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{break} if ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{break}; $Text::Wrap::unexpand = ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{unexpand} if ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{unexpand}; $Text::Wrap::tabstop = ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{tabstop} if ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{tabstop}; + + # perform the text wrapping ${$self}{body} = wrap('','',${$self}{body}); + + ${$self}{body} =~ s/${$_}{tmpVerbatimID}/${$_}{origVerbatimID}/s foreach (@putVerbatimBackIn); } sub construct_paragraph_reg_exp{ diff --git a/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm index 41ff54c12be..81a37b49c0f 100644 --- a/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm +++ b/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm @@ -19,6 +19,6 @@ use warnings; use Exporter qw/import/; our @EXPORT_OK = qw/$versionNumber $versionDate/; -our $versionNumber = '3.10.1'; -our $versionDate = '2021-07-23'; +our $versionNumber = '3.11'; +our $versionDate = '2021-07-31'; 1 diff --git a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml index 94a3a9f4c61..edac9bad826 100755 --- a/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml +++ b/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml @@ -1,9 +1,10 @@ -# defaultSettings.yaml for latexindent.pl, version 3.10.1, 2021-07-23 +# defaultSettings.yaml for latexindent.pl, version 3.11, 2021-07-31 # a script that aims to # beautify .tex, .sty, .cls files # # (or latexindent.exe if you're on Windows) # +#--------------------------------------------------------------------------------------- # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or @@ -19,8 +20,8 @@ # Chris Hughes, 2017 # # For all communication, please visit: https://github.com/cmhughes/latexindent.pl - - +# +#--------------------------------------------------------------------------------------- # You should feel encouraged to change anything you like in these settings, but # it would probably be better to have your own user settings # files somewhere else - remember that this file may be overwritten @@ -31,6 +32,8 @@ # for details of how to create and configure your own settings files. # # Please read the manual (linked from above) first to understand what each switch does. +# +#--------------------------------------------------------------------------------------- # latexindent can be called to act on a file without using the file's extension, # e.g, simply @@ -512,6 +515,7 @@ modifyLineBreaks: huge: overflow # forbid mid-word line breaks separator: "" perCodeBlockBasis: 0 + beforeFindingChildCodeBlocks: 0 all: 0 alignAtAmpersandTakesPriority: 1 environments: diff --git a/Master/texmf-dist/scripts/latexindent/latexindent.pl b/Master/texmf-dist/scripts/latexindent/latexindent.pl index 7813b3a6575..696fb2b7b8d 100755 --- a/Master/texmf-dist/scripts/latexindent/latexindent.pl +++ b/Master/texmf-dist/scripts/latexindent/latexindent.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# latexindent.pl, version 3.10.1, 2021-07-23 +# latexindent.pl, version 3.11, 2021-07-31 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -- cgit v1.2.3