texlive[51635] trunk: latexindent (13jul19)

commits+karl at tug.org commits+karl at tug.org
Sat Jul 13 23:40:12 CEST 2019


Revision: 51635
          http://tug.org/svn/texlive?view=revision&revision=51635
Author:   karl
Date:     2019-07-13 23:40:12 +0200 (Sat, 13 Jul 2019)
Log Message:
-----------
latexindent (13jul19)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl
    trunk/Master/bin/win32/latexindent.exe
    trunk/Master/texmf-dist/doc/support/latexindent/README
    trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex
    trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/latexindent.pdf
    trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex
    trunk/Master/texmf-dist/doc/support/latexindent/logo.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex
    trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex
    trunk/Master/texmf-dist/doc/support/latexindent/title.tex
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/AlignmentAtAmpersand.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Environment.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Indent.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/MandatoryArgument.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/OptionalArgument.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Sentence.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Switches.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
    trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
    trunk/Master/texmf-dist/scripts/latexindent/latexindent.pl

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex
    trunk/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex
    trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Replacement.pm

Modified: trunk/Build/source/texk/texlive/linked_scripts/latexindent/latexindent.pl
===================================================================
(Binary files differ)

Modified: trunk/Master/bin/win32/latexindent.exe
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/latexindent/README
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/README	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/README	2019-07-13 21:40:12 UTC (rev 51635)
@@ -1,5 +1,5 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-    latexindent.pl, version 3.6, 2019-05-05
+    latexindent.pl, version 3.7, 2019-07-13
 
     PERL script to indent code within environments, and align delimited 
     environments in .tex files.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/appendices.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -37,7 +37,7 @@
 		install any missing \texttt{perl} modules on your system; if you run
 		\begin{commandshell}
 perl latexindent-module-installer.pl
-     \end{commandshell}
+\end{commandshell}
 		or
 		\begin{dosprompt}
 perl latexindent-module-installer.pl
@@ -51,7 +51,7 @@
 		might visit the software center, or else run
 		\begin{commandshell}
 sudo perl -MCPAN -e 'install "File::HomeDir"'
- \end{commandshell}
+\end{commandshell}
 
 		Linux users may be interested in exploring Perlbrew \cite{perlbrew}; possible
 		installation and setup options follow for Ubuntu (other distributions will need slightly
@@ -69,6 +69,19 @@
 cpanm Log::Dispatch
 \end{commandshell}
 
+		Users of the Macintosh operating system might like to explore the following commands, for
+		example:
+		\begin{commandshell}
+brew install perl
+brew install cpanm
+
+cpanm YAML::Tiny
+cpanm File::HomeDir
+cpanm Unicode::GCString
+cpanm Log::Log4perl
+cpanm Log::Dispatch
+\end{commandshell}
+
 		Strawberry Perl users on Windows might use \texttt{CPAN client}. All of the modules are
 		readily available on CPAN \cite{cpan}.
 
@@ -97,7 +110,7 @@
 			\item run
 			      \begin{commandshell}
 ls /usr/local/bin
-          \end{commandshell}
+\end{commandshell}
 			      to see what is \emph{currently} in there;
 			\item run the following commands
 			      \begin{commandshell}
@@ -110,7 +123,7 @@
 			\item run
 			      \begin{commandshell}
 ls /usr/local/bin
-          \end{commandshell}
+\end{commandshell}
 			      again to check that \texttt{latexindent.pl}, its modules and \texttt{defaultSettings.yaml} have
 			      been added.
 		\end{enumerate}
@@ -117,7 +130,7 @@
 		To \emph{remove} the files, run
 		\begin{commandshell}
 sudo make uninstall
-    \end{commandshell}
+\end{commandshell}
 	\subsection{Add to path for Windows}
 		To add \texttt{latexindent.exe} to the path for Windows, follow these steps:
 		\begin{enumerate}
@@ -156,7 +169,7 @@
 	 If we run the following command (noting that \texttt{-t} is active)
 	 \begin{commandshell}
 latexindent.pl -t -l=logfile-prefs1.yaml simple.tex 
- \end{commandshell}
+\end{commandshell}
 	 then on inspection of \texttt{indent.log} we will find the snippet given in
 	 \cref{lst:indentlog}.
 	 \begin{cmhlistings}[style=tcblatex,morekeywords={TRACE}]{\texttt{indent.log}}{lst:indentlog}
@@ -183,7 +196,7 @@
 	 3.0. Explicitly, in previous versions you might have run, for example,
 	 \begin{commandshell}
 latexindent.pl -o myfile.tex outputfile.tex
- \end{commandshell}
+\end{commandshell}
 	 whereas in Version 3.0 you would run any of the following, for example,
 	 \begin{commandshell}
 latexindent.pl -o=outputfile.tex myfile.tex
@@ -192,7 +205,7 @@
 latexindent.pl myfile.tex -o=outputfile.tex 
 latexindent.pl myfile.tex -outputfile=outputfile.tex 
 latexindent.pl myfile.tex -outputfile outputfile.tex 
- \end{commandshell}
+\end{commandshell}
 	 noting that the \emph{output} file is given \emph{next to} the
 	 \texttt{-o} switch.
 
@@ -223,7 +236,7 @@
 	 \begin{minipage}{.45\textwidth}
 		 \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath} in Version 3.0}{lst:indentAfterThisHeadingNew1}
 
-		 \cmhlistingsfromfile{demonstrations/noAddtionalIndentNew1.yaml}[yaml-TCB]{\texttt{noAdditionalIndent} for \texttt{displayMath}  in Version 3.0}{lst:indentAfterThisHeadingNew2}
+		 \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}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/cmhlistings.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -20,4 +20,9 @@
 .. warning::^^J
 #1^^J
 .. endwarning::^^J
-}{}
+}
+\newcommand{\example}[1]{
+.. proof:example::^^J
+#1^^J
+.. endproof:example::^^J
+}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/latexindent.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/latexindent.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -47,7 +47,7 @@
 \usetikzlibrary{decorations.pathmorphing}
 \usetikzlibrary{decorations,shapes}
 \usepackage{varioref}                                % the documentation library from tcolorbox loads hyperref
-\tcbuselibrary{breakable,minted,xparse,documentation,hooks}
+\tcbuselibrary{breakable,minted,xparse,documentation,hooks,raster}
 \hypersetup{
 	pdfauthor={Chris Hughes},
 	pdftitle={latexindent.pl package},
@@ -122,6 +122,8 @@
 
 \definecolor{harvestgold}{cmyk}{0.00, 0.05, 0.51, 0.07}  %EDE275
 \definecolor{cmhgold}{cmyk}{0,0.178,0.909,0.008}         %FDD017
+\colorlet{cmhgray}{gray!30!white}
+
 \makeatletter
 \tcbset{
 	addtolol/.style={list entry={\kvtcb at title},add to list={lol}{lstlisting}},
@@ -152,16 +154,13 @@
 			listing engine=listings,
 			left=0cm,
 			boxrule=0pt,
-			%leftrule=3pt,
 			sharp corners,
 			center title,
-			%colbacktitle=white!75!black,
 			colbacktitle=white!75!blue,
 			colframe=white!25!blue,
 			colback=white!90!blue,
 			toprule=2pt,
 			titlerule=2pt,
-			%bottomrule=1pt,
 		},
 	MLB-TCB/.style={
 			yaml-TCB,
@@ -171,16 +170,25 @@
 			colback=white!60!cmhgold,
 			width=0.9\linewidth,
 			before=\centering,
-			%bottomrule=1pt,
 			enhanced,
 			overlay={\node[anchor=north east,outer sep=2pt,draw=cmhgold,very thick,double,fill=harvestgold,font =\small] at ([yshift=-3mm]frame.north east) {\texttt{-m}}; }
 		},
+	replace-TCB/.style={
+			yaml-TCB,
+			center title,
+			colbacktitle=white!75!green,
+			colframe=white!25!green,
+			colback=white!90!green,
+			width=0.9\linewidth,
+			before=\centering,
+			enhanced,
+			overlay={\node[anchor=north east,outer sep=2pt,draw=white!25!green,very thick,circle,fill=white!75!green,font =\small] at ([yshift=-3mm]frame.north east) {\texttt{-r}}; }
+		},
 	yaml-obsolete/.style={
 			listing only,
 			listing engine=listings,
 			left=0cm,
 			boxrule=0pt,
-			%leftrule=3pt,
 			sharp corners,
 			center title,
 			toprule=2pt,
@@ -196,15 +204,23 @@
 		},
 }
 
-\newtcblisting[use counter=lstlisting]{cmhlistings}[3][]{%
+\DeclareTCBListing[use counter=lstlisting]{cmhlistings}{s O{} m m}{%
 	cmhlistings,
-	addtolol,
+	IfBooleanTF={#1}{new-to-this-version}{addtolol},
 	center title,
-	title={\color{black}{\scshape Listing \thetcbcounter}: ~#2},label={#3},
+	title={\color{black}{\scshape Listing \thetcbcounter}: ~#3},label={#4},
 	listing engine=listings,
-	listing options={#1},
+	listing options={#2},
 }
 
+\DeclareDocumentEnvironment{cmhtcbraster}{O{}}{\begin{tcbraster}[
+		new-to-this-version/.style={
+				enhanced,
+				overlay app={\node[anchor=south east] at ([yshift=-3mm,xshift=3mm]frame.north east) {\stardemo[scale=1.2]}; },
+				addtololstar,
+			},
+		raster valign=top,raster columns=2,#1]}{\end{tcbraster}}
+
 % \cmhlistingsfromfile
 %                   *    no star: not new, star: new
 %                   [ listing/minted options ]
@@ -298,166 +314,178 @@
 
 \lstdefinestyle{fileExtensionPreference}{
 	style=yaml-LST,
-	firstnumber=38,linerange={38-42},
+	firstnumber=41,linerange={41-45},
 	numbers=left,
 }
 
 \lstdefinestyle{logFilePreferences}{
 	style=yaml-LST,
-	firstnumber=79,linerange={79-89},
+	firstnumber=85,linerange={85-95},
 	numbers=left,
 }
 
 \lstdefinestyle{verbatimEnvironments}{
 	style=yaml-LST,
-	firstnumber=93,linerange={93-96},
+	firstnumber=99,linerange={99-102},
 	numbers=left,
 }
 
 \lstdefinestyle{verbatimCommands}{
 	style=yaml-LST,
-	firstnumber=99,linerange={99-101},
+	firstnumber=105,linerange={105-107},
 	numbers=left,
 }
 
 \lstdefinestyle{noIndentBlock}{
 	style=yaml-LST,
-	firstnumber=107,linerange={107-109},
+	firstnumber=112,linerange={112-114},
 	numbers=left,
 }
 
 \lstdefinestyle{removeTrailingWhitespace}{
 	style=yaml-LST,
-	firstnumber=112,linerange={112-114},
+	firstnumber=117,linerange={117-119},
 	numbers=left,
 }
 
 \lstdefinestyle{fileContentsEnvironments}{
 	style=yaml-LST,
-	firstnumber=118,linerange={118-120},
+	firstnumber=123,linerange={123-125},
 	numbers=left,
 }
 
 \lstdefinestyle{lookForPreamble}{
 	style=yaml-LST,
-	firstnumber=126,linerange={126-130},
+	firstnumber=131,linerange={131-135},
 	numbers=left,
 }
 
 \lstdefinestyle{indentAfterItems}{
 	style=yaml-LST,
-	firstnumber=182,linerange={182-186},
+	firstnumber=187,linerange={187-191},
 	numbers=left,
 }
 
 \lstdefinestyle{itemNames}{
 	style=yaml-LST,
-	firstnumber=192,linerange={192-194},
+	firstnumber=197,linerange={197-199},
 	numbers=left,
 }
 
 \lstdefinestyle{specialBeginEnd}{
 	style=yaml-LST,
-	firstnumber=198,linerange={198-211},
+	firstnumber=203,linerange={203-216},
 	numbers=left,
 }
 
 \lstdefinestyle{indentAfterHeadings}{
 	style=yaml-LST,
-	firstnumber=221,linerange={221-230},
+	firstnumber=226,linerange={226-235},
 	numbers=left,
 }
 
 \lstdefinestyle{noAdditionalIndentGlobalEnv}{
 	style=yaml-LST,
-	firstnumber=279,linerange={279-280},
+	firstnumber=284,linerange={284-285},
 	numbers=left,
 }
 
 \lstdefinestyle{noAdditionalIndentGlobal}{
 	style=yaml-LST,
-	firstnumber=279,linerange={279-291},
+	firstnumber=284,linerange={284-296},
 	numbers=left,
 }
 
 \lstdefinestyle{indentRulesGlobalEnv}{
 	style=yaml-LST,
-	firstnumber=295,linerange={295-296},
+	firstnumber=300,linerange={300-301},
 	numbers=left,
 }
 
 \lstdefinestyle{indentRulesGlobal}{
 	style=yaml-LST,
-	firstnumber=295,linerange={295-307},
+	firstnumber=300,linerange={300-312},
 	numbers=left,
 }
 
 \lstdefinestyle{commandCodeBlocks}{
 	style=yaml-LST,
-	firstnumber=310,linerange={310-324},
+	firstnumber=315,linerange={315-329},
 	numbers=left,
 }
 
 \lstdefinestyle{modifylinebreaks}{
 	style=yaml-LST,
-	firstnumber=394,linerange={394-396},
+	firstnumber=441,linerange={441-443},
 	numbers=left,
 }
 
 \lstdefinestyle{textWrapOptions}{
 	style=yaml-LST,
-	firstnumber=421,linerange={421-422},
+	firstnumber=468,linerange={468-469},
 	numbers=left,
 }
 
 \lstdefinestyle{textWrapOptionsAll}{
 	style=yaml-LST,
-	firstnumber=421,linerange={421-437},
+	firstnumber=468,linerange={468-484},
 	numbers=left,
 }
 
 \lstdefinestyle{removeParagraphLineBreaks}{
 	style=yaml-LST,
-	firstnumber=438,linerange={438-452},
+	firstnumber=485,linerange={485-499},
 	numbers=left,
 }
 
 \lstdefinestyle{paragraphsStopAt}{
 	style=yaml-LST,
-	firstnumber=453,linerange={453-462},
+	firstnumber=500,linerange={500-509},
 	numbers=left,
 }
 
 \lstdefinestyle{oneSentencePerLine}{
 	style=yaml-LST,
-	firstnumber=397,linerange={397-420},
+	firstnumber=444,linerange={444-467},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesFollow}{
 	style=yaml-LST,
-	firstnumber=402,linerange={402-410},
+	firstnumber=449,linerange={449-457},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesBeginWith}{
 	style=yaml-LST,
-	firstnumber=411,linerange={411-414},
+	firstnumber=458,linerange={458-461},
 	numbers=left,
 }
 
 \lstdefinestyle{sentencesEndWith}{
 	style=yaml-LST,
-	firstnumber=415,linerange={415-420},
+	firstnumber=462,linerange={462-467},
 	numbers=left,
 }
 
 \lstdefinestyle{modifylinebreaksEnv}{
 	style=yaml-LST,
-	firstnumber=463,linerange={463-472},
+	firstnumber=510,linerange={510-519},
 	numbers=left,
 }
 
+\lstdefinestyle{replacements}{
+	style=yaml-LST,
+	firstnumber=571,linerange={571-579},
+	numbers=left,
+}
+
+\lstdefinestyle{fineTuning}{
+	style=yaml-LST,
+	firstnumber=582,linerange={582-603},
+	numbers=left,
+}
+
 % stars around contributors
 \pgfdeclaredecoration{stars}{initial}{
 	\state{initial}[width=15pt]
@@ -499,6 +527,34 @@
 	parbox=false,
 }
 
+\newtcolorbox[auto counter]{example}{breakable,
+	enhanced jigsaw,
+	before skip=6pt,after skip=6pt,
+	frame hidden,
+	title={\llap{Example~\thetcbcounter\hspace{3mm}}},
+	fonttitle=\bfseries,
+	coltitle=black,
+	attach title to upper,
+	grow to left by=5mm,
+	top=3mm,
+	overlay unbroken={%
+			\draw[thick,cmhgray] ([xshift=3mm]interior.north east)--([xshift=3mm]interior.south east);
+			\path [fill=cmhgray] ([xshift=3mm]interior.north east) circle (.5mm);
+			\path [fill=cmhgray] ([xshift=3mm]interior.south east) circle (1mm);
+		},
+	overlay first={%
+			\draw[thick,cmhgray] ([xshift=3mm]interior.north east)--([xshift=3mm]interior.south east);
+			\path [fill=cmhgray] ([xshift=3mm]interior.north east) circle (.5mm);
+			%\path [draw=cmhgray,fill=white] ([xshift=3mm]interior.south east) circle (.5mm);
+		},
+	overlay last={%
+			\draw[thick,cmhgray] ([xshift=3mm]interior.north east)--([xshift=3mm]interior.south east);
+			%\path [fill=white,draw=cmhgray] ([xshift=3mm]interior.north east) circle (.5mm);
+			\path [fill=cmhgray] ([xshift=3mm]interior.south east) circle (1mm);
+		},
+	parbox=false,
+}
+
 % copied from /usr/local/texlive/2013/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
 % the only modification is the \stars and \endstars
 \defbibenvironment{specialbib}
@@ -550,6 +606,21 @@
 {\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}
+
+\titleformat% Formatting the header
+{\section} % command
+[block] % shape - Only managed to get it working with block
+{\normalfont\bfseries\huge} % format - Change here as needed
+{\centering {\scshape Section \thesection}\\} % the section
+{0pt} % sep
+{\centering \ruleline{\includegraphics{\imagetouse}}\\ % The horizontal rule
+	\centering} % And the actual title
+
 % custom subsection
 \titleformat{\subsection}
 {\normalfont\bfseries}
@@ -563,9 +634,9 @@
 {0pt}
 {}
 
-\titlespacing\section{0pt}{12pt plus 4pt minus 2pt}{-5pt plus 2pt minus 2pt}
-\titlespacing\subsection{0pt}{12pt plus 4pt minus 2pt}{-6pt plus 2pt minus 2pt}
-\titlespacing\subsubsection{0pt}{12pt plus 4pt minus 2pt}{-6pt plus 2pt minus 2pt}
+\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}
 
 % list of listings
 \contentsuse{lstlisting}{lol}
@@ -677,26 +748,30 @@
 \input{title.tex}
 \tableofcontents
 {\small\lstlistoflistings}
-\input{sec-introduction}
-\input{sec-demonstration}
-\input{sec-how-to-use}
-\input{sec-indent-config-and-settings.tex}
-\input{sec-default-user-local}
-\input{subsec-noAdditionalIndent-indentRules}
-\input{subsubsec-environments-and-their-arguments}
-\input{subsubsec-environments-with-items}
-\input{subsubsec-commands-with-arguments}
-\input{subsubsec-ifelsefi}
-\input{subsubsec-special}
-\input{subsubsec-headings}
-\input{subsubsec-no-add-remaining-code-blocks}
-\stopcontents[noAdditionalIndent]
-\input{subsec-commands-and-their-options}
-\input{sec-the-m-switch}
-\stopcontents[the-m-switch]
-\input{subsec-partnering-poly-switches}
-\input{subsec-conflicting-poly-switches}
-\input{sec-conclusions-know-limitations}
-\input{references}
-\input{appendices}
+% start sections on new page
+\newcommand{\sectionbreak}{\clearpage\thispagestyle{plain}}
+ \input{sec-introduction}
+ \input{sec-demonstration}
+ \input{sec-how-to-use}
+ \input{sec-indent-config-and-settings.tex}
+ \input{sec-default-user-local}
+ \input{subsec-noAdditionalIndent-indentRules}
+ \input{subsubsec-environments-and-their-arguments}
+ \input{subsubsec-environments-with-items}
+ \input{subsubsec-commands-with-arguments}
+ \input{subsubsec-ifelsefi}
+ \input{subsubsec-special}
+ \input{subsubsec-headings}
+ \input{subsubsec-no-add-remaining-code-blocks}
+ \stopcontents[noAdditionalIndent]
+ \input{subsec-commands-and-their-options}
+ \input{sec-the-m-switch}
+ \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}
 \end{document}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/logo.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/logo.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/logo.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -24,10 +24,10 @@
 \pagecolor{white}
 \begin{tikzpicture}[logo/.style={draw=blue,circle,fill=none,fill opacity=0.75}]
 	\matrix{%
-		\node[logo,dash pattern=on .5pt off 1.0pt,thick,draw=purple!75!white]{};  & \node[logo,draw=burntorange]{};                         \\
+		\node[logo,dash pattern=on .5pt off 1.0pt,thick,draw=purple!75!white]{}; & \node[logo,draw=burntorange]{};                         \\
 		\node[logo,fill,draw=bakeoffgreen,fill=bakeoffblue]{}; & \node[logo,double,draw=cmhgold,fill=harvestgold]{};\\};
-      \begin{scope}[on background layer]
-        %\node [yshift=0.01em,xshift=0.07em] {\resizebox{1cm}{!}{\color{gray!50!white}\faGithub}};
-        \node {\resizebox{1cm}{!}{\color{gray!25!white}\faGithub}};
-      \end{scope}
+	\begin{scope}[on background layer]
+		%\node [yshift=0.01em,xshift=0.07em] {\resizebox{1cm}{!}{\color{gray!50!white}\faGithub}};
+		\node {\resizebox{1cm}{!}{\color{gray!25!white}\faGithub}};
+	\end{scope}
 \end{tikzpicture}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-conclusions-know-limitations.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,8 +17,8 @@
  future.
 
  There are other limitations to do with the multicolumn alignment routine (see
- \vref{lst:tabular2-mod2}); in particular, when working with codeblocks in which multicolumn
- commands overlap, the algorithm can fail.
+ \vref{lst:tabular2-mod2}); in particular, 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
@@ -27,9 +27,10 @@
  \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 \texttt{.sty}, \texttt{.cls} and
- any file types that you specify in \lstinline[breaklines=true]!fileExtensionPreference! (see \vref{lst:fileExtensionPreference});
- if you find a case in which the script struggles, please feel free to report it at
+ 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:noIndentBlockdemo}).
 
  I hope that this script is useful to some; if you find an example where the script does

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-default-user-local.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -38,7 +38,7 @@
 	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
+	\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
@@ -64,8 +64,8 @@
 \yamltitle{cycleThroughBackUps}*{integer}
 	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
@@ -72,7 +72,7 @@
 copy myfile.bak2 to myfile.bak1
 copy myfile.bak3 to myfile.bak2
 copy myfile.bak4 to myfile.bak3
-	\end{commandshell}
+\end{commandshell}
 	The default value of \texttt{cycleThroughBackUps} is \texttt{0}.
 
 \yamltitle{logFilePreferences}*{fields}
@@ -87,7 +87,7 @@
 
 	\cmhlistingsfromfile[style=logFilePreferences,]*{../defaultSettings.yaml}[width=.9\linewidth,before=\centering,yaml-TCB]{\texttt{logFilePreferences}}{lst:logFilePreferences}
 
-	When%%%%
+	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
@@ -111,15 +111,12 @@
 	no indentation will be performed on environments that you have specified in this field,
 	see \cref{lst:verbatimEnvironments}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile[style=verbatimEnvironments]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimEnvironments}}{lst:verbatimEnvironments}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=verbatimCommands]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{verbatimCommands}}{lst:verbatimCommands}
-	\end{minipage}%
+	\end{cmhtcbraster}
 
-	Note that if  you put an environment in  \texttt{verbatimEnvironments} and in other fields such
+	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}.
 
@@ -243,7 +240,7 @@
 	\cref{lst:aligndelims:basic} and the \emph{advanced} version in
 	\cref{lst:aligndelims:advanced}; we will discuss each in turn.
 
-	The environments specified in this field will be operated on in a special way  by
+	The environments specified in this field will be operated on in a special way by
 	\texttt{latexindent.pl}. In particular, it will try and align each column by its
 	alignment tabs. It does have some limitations (discussed further in
 	\cref{sec:knownlimitations}), but in many cases it will produce results such as those in
@@ -255,13 +252,10 @@
 	\emph{specific} instances of the environment, you could wrap them in something
 	from \texttt{noIndentBlock} (see \vref{lst:noIndentBlock}).
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/tabular1.tex}{\texttt{tabular1.tex}}{lst:tabularbefore:basic}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/tabular1-default.tex}{\texttt{tabular1.tex} default output}{lst:tabularafter:basic}
-	\end{minipage}%
+	\end{cmhtcbraster}
 
 	If, for example, you wish to remove the alignment of the \lstinline!\\! within a
 	delimiter-aligned block, then the advanced form of \texttt{lookForAlignDelims} shown in
@@ -343,7 +337,7 @@
 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}
+\end{commandshell}
 	we obtain the respective outputs given in \crefrange{lst:tabular2-default}{lst:tabular2-mod8}.
 
 	\begin{widepage}
@@ -397,17 +391,14 @@
 	you run the command
 	\begin{commandshell}
 latexindent.pl matrix1.tex 
-    \end{commandshell}
+\end{commandshell}
 	then the before-and-after results shown in \cref{lst:matrixbefore,lst:matrixafter} are achievable by
 	default.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/matrix1.tex}{\texttt{matrix1.tex}}{lst:matrixbefore}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/matrix1-default.tex}{\texttt{matrix1.tex} default output}{lst:matrixafter}
-	\end{minipage}%
+	\end{cmhtcbraster}
 
 	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
@@ -418,13 +409,10 @@
 	\lstinline!*! and \lstinline!\begin{tabular}!; note also that you may use any
 	environment name that you have specified in \texttt{lookForAlignDelims}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/align-block.tex}{\texttt{align-block.tex}}{lst:alignmentmarkup}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/align-block-default.tex}{\texttt{align-block.tex} default output}{lst:alignmentmarkup-default}
-	\end{minipage}%
+	\end{cmhtcbraster}
 
 	With reference to \vref{tab:code-blocks} and the, yet undiscussed, fields of
 	\texttt{noAdditionalIndent} and \texttt{indentRules}
@@ -432,21 +420,19 @@
 	considered \texttt{environments}.
 
 \yamltitle{indentAfterItems}*{fields}
-	\begin{wrapfigure}[5]{r}[0pt]{7cm}
-		\cmhlistingsfromfile[style=indentAfterItems]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterItems}}{lst:indentafteritems}
-	\end{wrapfigure}
-	The environment names specified in \texttt{indentAfterItems}  tell \texttt{latexindent.pl}
+	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}
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster columns=3,
+			raster left skip=-3.5cm,
+			raster right skip=-2cm,
+			raster column skip=.03\linewidth]
+		\cmhlistingsfromfile[style=indentAfterItems]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{indentAfterItems}}{lst:indentafteritems}
 		\cmhlistingsfromfile{demonstrations/items1.tex}{\texttt{items1.tex}}{lst:itemsbefore}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/items1-default.tex}{\texttt{items1.tex} default output}{lst:itemsafter}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 \yamltitle{itemNames}*{fields}
 	\begin{wrapfigure}[5]{r}[0pt]{5cm}
@@ -461,7 +447,7 @@
 	\vref{lst:mysettings} \\ in particular \label{page:examsettings}.)
 
 \yamltitle{specialBeginEnd}*{fields}\label{yaml:specialBeginEnd}
-	The fields specified%%%%
+	The fields specified%
 	\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}
@@ -477,13 +463,10 @@
 
 	A demonstration of the before-and-after results are shown in \cref{lst:specialbefore,lst:specialafter}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/special1.tex}{\texttt{special1.tex} before}{lst:specialbefore}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/special1-default.tex}{\texttt{special1.tex} default output}{lst:specialafter}
-	\end{minipage}
+	\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
@@ -490,7 +473,7 @@
 	\texttt{latexindent.pl} not to look for the pattern, by setting \texttt{lookForThis}
 	to \texttt{0}.
 
-	There are%%%%
+	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.
@@ -500,13 +483,10 @@
 
 	Now consider the YAML files shown in \cref{lst:specialsLeftRight-yaml,lst:specialBeforeCommand-yaml}
 
-	\begin{minipage}{.49\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[]*{demonstrations/specialsLeftRight.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialsLeftRight.yaml}}{lst:specialsLeftRight-yaml}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\linewidth}
 		\cmhlistingsfromfile[]*{demonstrations/specialBeforeCommand.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{specialBeforeCommand.yaml}}{lst:specialBeforeCommand-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the following commands
 	\begin{widepage}
@@ -513,7 +493,7 @@
 		\begin{commandshell}
 latexindent.pl specialLR.tex -l=specialsLeftRight.yaml      
 latexindent.pl specialLR.tex -l=specialsLeftRight.yaml,specialBeforeCommand.yaml      
-    \end{commandshell}
+\end{commandshell}
 	\end{widepage}
 	we receive the respective outputs in \cref{lst:specialLR-comm-first-tex,lst:specialLR-special-first-tex}.
 
@@ -534,7 +514,7 @@
 		      \texttt{specialBeginEnd} should be sought \emph{before} commands.
 	\end{itemize}
 
-	You can,optionally, specify%%%%
+	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}.
@@ -545,24 +525,18 @@
 	\begin{commandshell}
 latexindent.pl special2.tex -l=middle
 latexindent.pl special2.tex -l=middle1
-    \end{commandshell}
+\end{commandshell}
 	then we obtain the output given in \cref{lst:special2-mod1,lst:special2-mod2}.
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/middle.yaml}[yaml-TCB]{\texttt{middle.yaml}}{lst:middle-yaml}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile{demonstrations/special2-mod1.tex}{\texttt{special2.tex} using \cref{lst:middle-yaml}}{lst:special2-mod1}
-	\end{minipage}
+	\end{cmhtcbraster}
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/middle1.yaml}[yaml-TCB]{\texttt{middle1.yaml}}{lst:middle1-yaml}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile{demonstrations/special2-mod2.tex}{\texttt{special2.tex} using \cref{lst:middle1-yaml}}{lst:special2-mod2}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	We note that:
 	\begin{itemize}
@@ -576,25 +550,22 @@
 		      \cref{lst:special2-mod2}.
 	\end{itemize}
 
-	You may%%
+	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}.
 
-	For example, beginning with the code in \cref{lst:special3-mod1} and the YAML  in
+	For example, beginning with the code in \cref{lst:special3-mod1} and the YAML in
 	\cref{lst:special-verb1-yaml}, and running
 	\begin{commandshell}
 latexindent.pl special3.tex -l=special-verb1
-    \end{commandshell}
+\end{commandshell}
 	then the output in \cref{lst:special3-mod1} is unchanged.
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/special-verb1.yaml}[yaml-TCB]{\texttt{special-verb1.yaml}}{lst:special-verb1-yaml}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile{demonstrations/special3-mod1.tex}{\texttt{special3.tex} and output using \cref{lst:special-verb1-yaml}}{lst:special3-mod1}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 \yamltitle{indentAfterHeadings}*{fields}
 	\begin{wrapfigure}[17]{r}[0pt]{8cm}
@@ -624,13 +595,10 @@
 	\texttt{headings1.yaml}, and that you have the text from \cref{lst:headings1} saved
 	into \texttt{headings1.tex}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings1.yaml}[yaml-TCB]{\texttt{headings1.yaml}}{lst:headings1yaml}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/headings1.tex}{\texttt{headings1.tex}}{lst:headings1}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	If you run the command
 	\begin{commandshell}
@@ -657,7 +625,7 @@
 
 \yamltitle{maximumIndentation}*{horizontal space}
 	You can control the maximum indentation given to your file
-	by%%%%
+	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
@@ -666,28 +634,22 @@
 	For example, consider the example shown in \cref{lst:mult-nested} together with the
 	default output shown in \cref{lst:mult-nested-default}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/mult-nested.tex}{\texttt{mult-nested.tex}}{lst:mult-nested}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[showtabs=true]{demonstrations/mult-nested-default.tex}{\texttt{mult-nested.tex} default output}{lst:mult-nested-default}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Now say that, for example, you have the \texttt{max-indentation1.yaml} from
 	\cref{lst:max-indentation1yaml} and that you run the following command:
 	\begin{commandshell}
 latexindent.pl mult-nested.tex -l=max-indentation1
-    \end{commandshell}
+\end{commandshell}
 	You should receive the output shown in \cref{lst:mult-nested-max-ind1}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/max-indentation1.yaml}[yaml-TCB]{\texttt{max-indentation1.yaml}}{lst:max-indentation1yaml}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[showspaces=true]{demonstrations/mult-nested-max-ind1.tex}{\texttt{mult-nested.tex} using \cref{lst:max-indentation1yaml}}{lst:mult-nested-max-ind1}
-	\end{minipage}
+	\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.
@@ -770,4 +732,6 @@
 		\end{widepage}
 	\end{table}
 
-	We will refer to these code blocks in what follows.
+	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}.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-demonstration.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -6,7 +6,7 @@
 
  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 personalize your indentation scheme.
+ 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,

Added: trunk/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -0,0 +1,109 @@
+% arara: pdflatex: {shell: yes, files: [latexindent]}
+\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}.
+
+ 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.
+
+ \begin{warning}
+	 Making changes to the fine tuning may have significant consequences for your indentation scheme,
+	 proceed with caution!
+ \end{warning}
+
+ \begin{widepage}
+	 \cmhlistingsfromfile*[style=fineTuning]*{../defaultSettings.yaml}[width=0.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 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.
+
+ 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:
+	       \begin{enumerate}
+		       \item \texttt{a-z} lower case letters
+		       \item \texttt{A-Z} upper case letters
+		       \item \texttt{@} the \texttt{@} 'letter'
+		       \item \lstinline!\*! stars
+		       \item \texttt{0-9} numbers
+		       \item \lstinline!_! underscores
+		       \item \lstinline!\! backslashes
+	       \end{enumerate}
+	       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'
+	       \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
+		             \lstinline!(...)!
+		       \item \lstinline^(?<!\\)\{)^ means a \lstinline^{^ but it can \emph{not}
+		             be immediately preceded by a \lstinline!\!
+	       \end{enumerate}
+	 \item in the \texttt{arguments:before} field
+	       \begin{enumerate}
+		       \item \lstinline^\d\h*^ means a digit (i.e. a number), followed by 0 or more horizontal
+		             spaces
+		       \item \lstinline^;?,?^ means \emph{possibly} a semi-colon, and possibly a comma
+		       \item \lstinline^\<.*?\>^ is designed for 'beamer'-type commands; the
+		             \lstinline^.*?^ means anything in between \lstinline^<...>^
+	       \end{enumerate}
+	 \item the \texttt{modifyLineBreaks} field refers to fine tuning settings detailed in
+	       \vref{sec:modifylinebreaks}. In particular:
+	       \begin{enumerate}
+		       \item \texttt{betterFullStop} is in relation to the one sentence per line routine, detailed in
+		             \vref{sec:onesentenceperline}
+		       \item \texttt{doubleBackSlash} is in relation to the \texttt{DBSStartsOnOwnLine} and
+		             \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}
+	       \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.
+
+ As a demonstration, consider the file given in \cref{lst:finetuning1}, together with its
+ default output using the command
+ \begin{commandshell}
+latexindent.pl finetuning1.tex 
+\end{commandshell}
+ is given in \cref{lst:finetuning1-default}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+	 \cmhlistingsfromfile*{demonstrations/finetuning1.tex}{\texttt{finetuning1.tex}}{lst:finetuning1}
+	 \cmhlistingsfromfile*{demonstrations/finetuning1-default.tex}{\texttt{finetuning1.tex} default}{lst:finetuning1-default}
+ \end{cmhtcbraster}
+
+ It's clear from \cref{lst:finetuning1-default} that the indentation scheme has not worked as
+ expected. We can \emph{fine tune} the indentation scheme by employing the settings
+ given in \cref{lst:fine-tuning1} and running the command
+ \begin{commandshell}
+latexindent.pl finetuning1.tex -l=fine-tuning1.yaml
+\end{commandshell}
+ and the associated (desired) output is given in \cref{lst:finetuning1-mod1}.
+
+ \begin{cmhtcbraster}[raster column skip=.01\linewidth]
+	 \cmhlistingsfromfile*{demonstrations/finetuning1-mod1.tex}{\texttt{finetuning1.tex} using \cref{lst:fine-tuning1}}{lst:finetuning1-mod1}
+	 \cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/fine-tuning1.yaml}[yaml-TCB]{\texttt{finetuning1.yaml}}{lst:fine-tuning1}
+ \end{cmhtcbraster}


Property changes on: trunk/Master/texmf-dist/doc/support/latexindent/sec-fine-tuning.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-how-to-use.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -27,18 +27,17 @@
 \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 customized,
-	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}
 	\announce{2017-06-25}{version}
 	\begin{commandshell}
 latexindent.pl -v
-      \end{commandshell}
+\end{commandshell}
 	This will output only the version number to the terminal.
 
 \flagbox{-h, --help}
@@ -45,17 +44,17 @@
 
 	\begin{commandshell}
 latexindent.pl -h
-      \end{commandshell}
+\end{commandshell}
 
 	As above this will output a welcome message to the terminal, including the version number
 	and available options.
 	\begin{commandshell}
 latexindent.pl myfile.tex
-      \end{commandshell}
+\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}
 	\begin{commandshell}
@@ -62,7 +61,7 @@
 latexindent.pl -w myfile.tex
 latexindent.pl --overwrite myfile.tex
 latexindent.pl myfile.tex --overwrite 
-      \end{commandshell}
+\end{commandshell}
 
 	This \emph{will} overwrite \texttt{myfile.tex}, but it will make a copy of
 	\texttt{myfile.tex} first. You can control the name of the extension (default is
@@ -80,7 +79,7 @@
 latexindent.pl myfile.tex -o=output.tex 
 latexindent.pl --outputfile=output.tex myfile.tex
 latexindent.pl --outputfile output.tex myfile.tex
-      \end{commandshell}
+\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
@@ -105,7 +104,7 @@
 \end{commandshell}
 
 	You can call the \texttt{-o} switch using a \texttt{+} symbol at
-	the beginning; this will%%%
+	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:
@@ -115,7 +114,7 @@
 \end{commandshell}
 
 	You can call the \texttt{-o} switch using a \texttt{++} symbol at
-	the end of the name%%%
+	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
@@ -154,7 +153,7 @@
 	\begin{commandshell}
 latexindent.pl -s myfile.tex
 latexindent.pl myfile.tex -s
-      \end{commandshell}
+\end{commandshell}
 
 	Silent mode: no output will be given to the terminal.
 
@@ -162,7 +161,7 @@
 	\begin{commandshell}
 latexindent.pl -t myfile.tex
 latexindent.pl myfile.tex -t
-      \end{commandshell}
+\end{commandshell}
 
 	\label{page:traceswitch}
 	Tracing mode: verbose output will be given to \texttt{indent.log}. This is useful if
@@ -175,7 +174,7 @@
 	\begin{commandshell}
 latexindent.pl -tt myfile.tex
 latexindent.pl myfile.tex -tt
-      \end{commandshell}
+\end{commandshell}
 
 	\emph{More detailed} tracing mode: this option gives more details to
 	\texttt{indent.log}
@@ -191,7 +190,7 @@
 latexindent.pl -l first.yaml,second.yaml,third.yaml myfile.tex
 latexindent.pl -l=first.yaml,second.yaml,third.yaml myfile.tex
 latexindent.pl myfile.tex -l=first.yaml,second.yaml,third.yaml 
-      \end{commandshell}
+\end{commandshell}
 
 	\label{page:localswitch}
 	\texttt{latexindent.pl} will always load \texttt{defaultSettings.yaml} (rhymes with camel)
@@ -204,7 +203,7 @@
 	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}.%%%
+	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
@@ -212,7 +211,7 @@
 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}
+\end{commandshell}
 	You will find a lot of other explicit demonstrations of how to use the
 	\texttt{-l} switch throughout this documentation,
 
@@ -219,24 +218,24 @@
 	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:
 	\begin{commandshell}
-latexindent.pl -l=+myyaml.yaml  myfile.tex
+latexindent.pl -l=+myyaml.yaml myfile.tex
 latexindent.pl -l "+ myyaml.yaml" myfile.tex
 latexindent.pl -l=myyaml.yaml+  myfile.tex
-    \end{commandshell}
+\end{commandshell}
 	which translate, respectively, to
 	\begin{commandshell}
 latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
 latexindent.pl -l=localSettings.yaml,myyaml.yaml myfile.tex
 latexindent.pl -l=myyaml.yaml,localSettings.yaml myfile.tex
-    \end{commandshell}
+\end{commandshell}
 	Note that the following is \emph{not} allowed:
 	\begin{commandshell}
 latexindent.pl -l+myyaml.yaml myfile.tex
-    \end{commandshell}
+\end{commandshell}
 	and
 	\begin{commandshell}
 latexindent.pl -l + myyaml.yaml myfile.tex
-    \end{commandshell}
+\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.
@@ -245,7 +244,7 @@
 	\announce{2017-06-25}{no extension for -l switch}
 	\begin{commandshell}
 latexindent.pl -l=localSettings,myyaml myfile.tex
-    \end{commandshell}
+\end{commandshell}
 \flagbox{-y, --yaml=yaml settings}
 	\begin{commandshell}
 latexindent.pl myfile.tex -y="defaultIndent: ' '"
@@ -253,7 +252,7 @@
 latexindent.pl myfile.tex -y="indentRules: one: '\t\t\t\t'"
 latexindent.pl myfile.tex -y='modifyLineBreaks:environments:EndStartsOnOwnLine:3' -m
 latexindent.pl myfile.tex -y='modifyLineBreaks:environments:one:EndStartsOnOwnLine:3' -m
-    \end{commandshell}
+\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;
@@ -268,11 +267,11 @@
 \flagbox{-d, --onlydefault}
 	\begin{commandshell}
 latexindent.pl -d myfile.tex
-      \end{commandshell}
+\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
+	\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
@@ -283,7 +282,7 @@
 \flagbox{-c, --cruft=<directory>}
 	\begin{commandshell}
 latexindent.pl -c=/path/to/directory/ myfile.tex
-      \end{commandshell}
+\end{commandshell}
 
 	If you wish to have backup files and \texttt{indent.log} written to a directory other
 	than the current working directory, then you can send these `cruft' files to another
@@ -295,7 +294,7 @@
 latexindent.pl -g other.log myfile.tex
 latexindent.pl --logfile other.log myfile.tex
 latexindent.pl myfile.tex -g other.log 
-      \end{commandshell}
+\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
@@ -305,8 +304,8 @@
 	\begin{commandshell}
 latexindent.pl -sl myfile.tex
 latexindent.pl -screenlog myfile.tex
-      \end{commandshell}
-	Using this%%%%
+\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.
@@ -315,7 +314,7 @@
 	\begin{commandshell}
 latexindent.pl -m myfile.tex
 latexindent.pl -modifylinebreaks myfile.tex
-      \end{commandshell}
+\end{commandshell}
 
 	One of the most exciting developments in Version~3.0 is the ability to modify line
 	breaks; for full details see \vref{sec:modifylinebreaks}
@@ -324,13 +323,13 @@
 	example
 	\begin{commandshell}
 latexindent.pl myfile
-    \end{commandshell}
+\end{commandshell}
 	and in which case, you can specify the order in which extensions are searched for; see
 	\vref{lst:fileExtensionPreference} for full details.
 \flagbox{STDIN}
 	\begin{commandshell}
 cat myfile.tex | latexindent.pl
-    \end{commandshell}
+\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
@@ -337,13 +336,13 @@
 	\texttt{myfile.tex}, then the above command will output the results of operating upon
 	\texttt{myfile.tex}
 
-	Similarly, if you%%%%
+	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.
 	\begin{commandshell}
 latexindent.pl
-      \end{commandshell}
+\end{commandshell}
 
 	Once you have finished typing your input, you can press
 	\begin{itemize}
@@ -352,7 +351,40 @@
 	\end{itemize}
 	to signify that your input has finished. Thanks to \cite{xu-cheng} for an update
 	to this feature.
+\flagbox{-r, --replacement}
+	\begin{commandshell}
+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
+	replacements/substitutions on your file; full details and examples are given in
+	\vref{sec:replacements}.
 
+\flagbox{-rv, --replacementrespectverb}
+	\begin{commandshell}
+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}.
+
+\flagbox{-rr, --onlyreplacement}
+	\begin{commandshell}
+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}.
+
 \subsection{From arara}\label{sec:arara}
 	Using \texttt{latexindent.pl} from the command line is fine for some folks, but others
 	may find it easier to use from \texttt{arara}; you can find the arara rule for

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-indent-config-and-settings.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -64,7 +64,7 @@
 \end{yaml}
 
 	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 recognize
+	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}.
@@ -118,7 +118,7 @@
 	file.
 
 \subsection{The -y|yaml switch}\label{sec:yamlswitch}
-	You%%%%
+	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,
@@ -125,22 +125,31 @@
 	then you could use the following command:
 	\begin{commandshell}
 latexindent.pl -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
-    \end{commandshell}
+\end{commandshell}
 	Note the use of \texttt{;} to specify another field within
 	\texttt{verbatimEnvironments}. This is shorthand, and equivalent, to using the following
 	command:
 	\begin{commandshell}
 latexindent.pl -y="verbatimEnvironments:cmhenvironment:0,verbatimEnvironments:myenv:1" myfile.tex
-    \end{commandshell}
+\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,
 	\begin{commandshell}
 latexindent.pl -l=mysettings.yaml -y="verbatimEnvironments:cmhenvironment:0;myenv:1" myfile.tex
-    \end{commandshell}
+\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.
 
+	If you wish to specify any regex-based settings using the \texttt{-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
+	\begin{commandshell}
+latexindent.pl -m --yaml='modifyLineBreaks:oneSentencePerLine:sentencesEndWith:other:\;'
+\end{commandshell}
+
 \subsection{Settings load order}\label{sec:loadorder}
 	\texttt{latexindent.pl} loads the settings files in the following order:
 	\begin{enumerate}
@@ -150,11 +159,11 @@
 		\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%%
+		      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
+		\item any settings%
+		      \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}.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-introduction.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -86,9 +86,19 @@
 		for more details.
 	\end{minipage}%
 
+	\begin{minipage}{.55\textwidth}
+		\cmhlistingsfromfile*[style=replacements]*{../defaultSettings.yaml}[replace-TCB,width=.85\linewidth,before=\centering]{\texttt{replacements}}{lst:replacements-demo}
+	\end{minipage}%
+	\hfill
+	\begin{minipage}{.4\textwidth}
+		This type of listing is a \texttt{.yaml} file, but it will only
+		be relevant when the \texttt{-r} switch is active; see \vref{sec:replacements}
+		for more details.
+	\end{minipage}%
+
 	% \begin{latexonly}
 	You will occasionally see dates shown in the margin (for example, next to this
-	paragraph!)%%%
+	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
@@ -104,7 +114,7 @@
 	If you'd like to get started with \texttt{latexindent.pl} then simply type
 	\begin{commandshell}
 latexindent.pl myfile.tex
-    \end{commandshell}
+\end{commandshell}
 	from the command line. If you receive an error message such as that given in
 	\cref{lst:poss-errors}, then you need to install the missing perl modules.
 	\begin{cmhlistings}[style=tcblatex,language=Perl]{Possible error messages}{lst:poss-errors}
@@ -115,6 +125,6 @@
 	following script, you should be prompted to install the appropriate modules.
 	\begin{commandshell}
 perl latexindent-module-installer.pl
-    \end{commandshell}
+\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}.

Added: trunk/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -0,0 +1,372 @@
+% arara: pdflatex: {shell: yes, files: [latexindent]}
+\section{The -r, -rv and -rr switches}\label{sec:replacements}
+ \fancyhead[R]{\bfseries\thepage%
+	 \tikz[remember picture,overlay] {
+		 \node at (1,0){\includegraphics{logo-bw}}; }
+ }
+
+ You can instruct \texttt{latexindent.pl} to perform replacements/substitutions on your
+ \announce*{2019-07-13}{replacement mode switches}
+ file by using any of the \texttt{-r}, \texttt{-rv} or
+ \texttt{-rr} switches:
+ \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.
+ \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}.
+
+ \begin{table}[!htb]
+	 \centering
+	 \caption{The replacement mode switches}\label{tab:replacementswitches}
+	 \begin{tabular}{rcc}
+		 \toprule
+		 switch       & indentation? & respect verbatim? \\
+		 \midrule
+		 \texttt{-r}  & \faCheck     & \faClose          \\
+		 \texttt{-rv} & \faCheck     & \faCheck          \\
+		 \texttt{-rr} & \faClose     & \faClose          \\
+		 \bottomrule
+	 \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}.
+
+ \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.
+
+ 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.
+
+\subsection{Introduction to replacements}
+	Let's explore the action of the default settings, and then we'll demonstrate the feature
+	with further examples. With reference to \cref{lst:replacements}, the default action will
+	replace every instance of the text \texttt{latexindent.pl} with \texttt{pl.latexindent}.
+
+	Beginning with the code in \cref{lst:replace1} and running the command
+	\begin{commandshell}
+latexindent.pl -r replace1.tex
+\end{commandshell}
+	gives the output given in \cref{lst:replace1-r1}.
+
+	\begin{cmhtcbraster}[raster column skip=.01\linewidth]
+		\cmhlistingsfromfile*{demonstrations/replace1.tex}{\texttt{replace1.tex}}{lst:replace1}
+		\cmhlistingsfromfile*{demonstrations/replace1-r1.tex}{\texttt{replace1.tex} default}{lst:replace1-r1}
+	\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
+	\begin{commandshell}
+latexindent.pl -r replace1.tex -l=replace1.yaml
+\end{commandshell}
+	which gives the output in \cref{lst:replace1-mod1}.
+
+	\begin{cmhtcbraster}[raster column skip=.01\linewidth]
+		\cmhlistingsfromfile*{demonstrations/replace1-mod1.tex}{\texttt{replace1.tex} using \cref{lst:replace1-yaml}}{lst:replace1-mod1}
+		\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.
+
+	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.
+		\item \emph{regex}-based replacements, which use the \texttt{substitution} field.
+	\end{enumerate}
+	We will demonstrate both in the examples that follow.
+
+	\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.
+
+\subsection{Examples of replacements}
+	\begin{example}
+		We begin with code given in \cref{lst:colsep}
+
+		\cmhlistingsfromfile*{demonstrations/colsep.tex}{\texttt{colsep.tex}}{lst:colsep}
+
+		Let's assume that our goal is to remove both of the \texttt{arraycolsep} statements; we can achieve this in
+		a few different ways.
+
+		Using the YAML in \cref{lst:colsep-yaml}, and running the command
+		\begin{commandshell}
+latexindent.pl -r colsep.tex -l=colsep.yaml
+\end{commandshell}
+		then we achieve the output in \cref{lst:colsep-mod0}.
+		\begin{cmhtcbraster}[raster column skip=.01\linewidth]
+			\cmhlistingsfromfile*{demonstrations/colsep-mod0.tex}{\texttt{colsep.tex} using \cref{lst:colsep}}{lst:colsep-mod0}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/colsep.yaml}[replace-TCB]{\texttt{colsep.yaml}}{lst:colsep-yaml}
+		\end{cmhtcbraster}
+		Note that in \cref{lst:colsep-yaml}, we have specified \emph{two} separate fields, each with their own `\emph{this}' field;
+		furthermore, for both of the separate fields, we have not specified `\texttt{that}', so the \texttt{that} field
+		is assumed to be blank by \texttt{latexindent.pl};
+
+		We can make the YAML in \cref{lst:colsep-yaml} more concise by exploring the \texttt{substitution} field. Using
+		the settings in \cref{lst:colsep1} and running the command
+		\begin{commandshell}
+latexindent.pl -r colsep.tex -l=colsep1.yaml
+\end{commandshell}
+		then we achieve the output in \cref{lst:colsep-mod1}.
+		\begin{cmhtcbraster}[raster column skip=.01\linewidth,
+				raster force size=false,
+				raster column 1/.style={add to width=-.1\textwidth}]
+			\cmhlistingsfromfile*{demonstrations/colsep-mod1.tex}{\texttt{colsep.tex} using \cref{lst:colsep1}}{lst:colsep-mod1}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/colsep1.yaml}[replace-TCB,width=0.6\textwidth]{\texttt{colsep1.yaml}}{lst:colsep1}
+		\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
+		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 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
+			      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}
+		for details of modifiers; in general, I recommend starting with the \texttt{sg} modifiers for this feature.
+	\end{example}
+
+	\begin{example}
+		We'll keep working with the file in \vref{lst:colsep} for this example.
+
+		Using the YAML in \cref{lst:multi-line}, and running the command
+		\begin{commandshell}
+latexindent.pl -r colsep.tex -l=multi-line.yaml
+\end{commandshell}
+		then we achieve the output in \cref{lst:colsep-mod2}.
+		\begin{cmhtcbraster}[raster column skip=.01\linewidth]
+			\cmhlistingsfromfile*{demonstrations/colsep-mod2.tex}{\texttt{colsep.tex} using \cref{lst:multi-line}}{lst:colsep-mod2}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/multi-line.yaml}[replace-TCB]{\texttt{multi-line.yaml}}{lst:multi-line}
+		\end{cmhtcbraster}
+		With reference to \cref{lst:multi-line}, we have specified a \emph{multi-line} version of \texttt{this} by employing the \emph{literal}
+		YAML style \lstinline!|-!. See, for example, \href{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}{https://stackoverflow.com/questions/3790454/in-yaml-how-do-i-break-a-string-over-multiple-lines}
+		for further options, all of which can be used in your YAML file.
+
+		This is a natural point to explore the \texttt{when} field, specified in \vref{lst:replacements}. This field can take two values: \emph{before}
+		and \emph{after}, which respectively instruct \texttt{latexindent.pl} to perform the replacements \emph{before} indentation or \emph{after} it.
+		The default value is \texttt{before}.
+
+		Using the YAML in \cref{lst:multi-line1}, and running the command
+		\begin{commandshell}
+latexindent.pl -r colsep.tex -l=multi-line1.yaml
+\end{commandshell}
+		then we achieve the output in \cref{lst:colsep-mod3}.
+		\begin{cmhtcbraster}[raster column skip=.01\linewidth]
+			\cmhlistingsfromfile*{demonstrations/colsep-mod3.tex}{\texttt{colsep.tex} using \cref{lst:multi-line1}}{lst:colsep-mod3}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/multi-line1.yaml}[replace-TCB]{\texttt{multi-line1.yaml}}{lst:multi-line1}
+		\end{cmhtcbraster}
+		We note that, because we have specified \texttt{when: after}, that \texttt{latexindent.pl} has not found the string specified
+		in \cref{lst:multi-line1} within the file in \vref{lst:colsep}. As it has looked for the string within \cref{lst:multi-line1} \emph{after} the indentation has been performed. After
+		indentation, the string as written in \cref{lst:multi-line1} is no longer part of the file, and has therefore not been replaced.
+
+		As a final note on this example, if you use the \texttt{-rr} switch, as follows,
+		\begin{commandshell}
+latexindent.pl -rr colsep.tex -l=multi-line1.yaml
+\end{commandshell}
+		then the \texttt{when} field is ignored, no indentation is done, and the output is as in \cref{lst:colsep-mod2}.
+	\end{example}
+
+	\begin{example}
+		An important part of the substitution routine is in \emph{capture groups}.
+
+		Assuming that we start with
+		the code in \cref{lst:displaymath}, let's assume that our goal is to replace each occurrence of \lstinline!$$...$$!
+		with \lstinline!\begin{equation*}...\end{equation*}!. This example is partly motivated by \href{https://tex.stackexchange.com/questions/242150/good-looking-latex-code}{tex stackexchange question 242150}.
+
+		\cmhlistingsfromfile*{demonstrations/displaymath.tex}{\texttt{displaymath.tex}}{lst:displaymath}
+
+		We use the settings in \cref{lst:displaymath1} and run the command
+		\begin{commandshell}
+latexindent.pl -r displaymath.tex -l=displaymath1.yaml
+\end{commandshell}
+		to receive the output given in \cref{lst:displaymath-mod1}.
+
+		\begin{cmhtcbraster}[raster left skip=-3.75cm,
+				raster right skip=-2cm,]
+			\cmhlistingsfromfile*{demonstrations/displaymath-mod1.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1}}{lst:displaymath-mod1}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/displaymath1.yaml}[replace-TCB]{\texttt{displaymath1.yaml}}{lst:displaymath1}
+		\end{cmhtcbraster}
+
+		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.
+		\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.
+
+		The features of the replacement switches can, of course, be combined with others from the toolkit of \texttt{latexindent.pl}. For example,
+		we can combine the poly-switches of \vref{sec:poly-switches}, which we do in \cref{lst:equation}; upon running the command
+		\begin{commandshell}
+latexindent.pl -r -m displaymath.tex -l=displaymath1.yaml,equation.yaml
+\end{commandshell}
+		then we receive the output in \cref{lst:displaymath-mod2}.
+
+		\begin{cmhtcbraster}[
+				raster force size=false,
+				raster column 1/.style={add to width=-.1\textwidth},
+				raster column skip=.06\linewidth]
+			\cmhlistingsfromfile*{demonstrations/displaymath-mod2.tex}{\texttt{displaymath.tex} using \cref{lst:displaymath1,lst:equation}}{lst:displaymath-mod2}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/equation.yaml}[MLB-TCB,width=0.55\textwidth]{\texttt{equation.yaml}}{lst:equation}
+		\end{cmhtcbraster}
+	\end{example}
+
+	\begin{example}
+		This example is motivated by \href{https://tex.stackexchange.com/questions/490086/bring-several-lines-together-to-fill-blank-spaces-in-texmaker}{tex stackexchange question 490086}.
+		We begin with the code in \cref{lst:phrase}.
+
+		\cmhlistingsfromfile*{demonstrations/phrase.tex}{\texttt{phrase.tex}}{lst:phrase}
+
+		Our goal is to make the spacing uniform between the phrases. To achieve this, we employ the settings in \cref{lst:hspace},
+		and run the command
+		\begin{commandshell}
+latexindent.pl -r phrase.tex -l=hspace.yaml
+\end{commandshell}
+		which gives the output in \cref{lst:phrase-mod1}.
+
+		\begin{cmhtcbraster}
+			\cmhlistingsfromfile*{demonstrations/phrase-mod1.tex}{\texttt{phrase.tex} using \cref{lst:hspace}}{lst:phrase-mod1}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/hspace.yaml}[replace-TCB]{\texttt{hspace.yaml}}{lst:hspace}
+		\end{cmhtcbraster}
+
+		The \lstinline!\h+! setting in \cref{lst:hspace} say to replace \emph{at least one horizontal space} with a single space.
+	\end{example}
+
+	\begin{example}
+		We begin with the code in \cref{lst:references}.
+
+		\cmhlistingsfromfile*{demonstrations/references.tex}{\texttt{references.tex}}{lst:references}
+
+		Our goal is to change each reference so that both the text and the reference are contained within one hyperlink. We
+		achieve this by employing \cref{lst:reference} and running the command
+		\begin{commandshell}
+latexindent.pl -r references.tex -l=reference.yaml
+\end{commandshell}
+		which gives the output in \cref{lst:references-mod1}.
+
+		\cmhlistingsfromfile*{demonstrations/references-mod1.tex}{\texttt{references.tex} using \cref{lst:reference}}{lst:references-mod1}
+
+		\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/reference.yaml}[replace-TCB]{\texttt{reference.yaml}}{lst:reference}
+
+		Referencing \cref{lst:reference}, the \lstinline!|! means \emph{or}, we have used \emph{capture groups}, together with an example
+		of an \emph{optional} pattern, \lstinline!(?:eq)?!.
+	\end{example}
+
+	\begin{example}
+		Let's explore the three replacement mode switches (see \vref{tab:replacementswitches}) in the context of
+		an example that contains a verbatim code block, \cref{lst:verb1}; we will use the settings in \cref{lst:verbatim1-yaml}.
+
+		\begin{cmhtcbraster}
+			\cmhlistingsfromfile*{demonstrations/verb1.tex}{\texttt{verb1.tex}}{lst:verb1}
+			\cmhlistingsfromfile*[style=yaml-LST]*{demonstrations/verbatim1.yaml}[replace-TCB]{\texttt{verbatim1.yaml}}{lst:verbatim1-yaml}
+		\end{cmhtcbraster}
+
+		Upon running the following commands,
+		\begin{commandshell}
+latexindent.pl -r verb1.tex -l=verbatim1.yaml -o=+mod1
+latexindent.pl -rv verb1.tex -l=verbatim1.yaml -o=+-rv-mod1
+latexindent.pl -rr verb1.tex -l=verbatim1.yaml -o=+-rr-mod1
+\end{commandshell}
+		we receive the respective output in \crefrange{lst:verb1-mod1}{lst:verb1-rr-mod1}
+
+		\begin{cmhtcbraster}[raster columns=3,
+				raster left skip=-3.75cm,
+				raster right skip=-2cm,]
+			\cmhlistingsfromfile*{demonstrations/verb1-mod1.tex}{\texttt{verb1-mod1.tex}}{lst:verb1-mod1}
+			\cmhlistingsfromfile*{demonstrations/verb1-rv-mod1.tex}{\texttt{verb1-rv-mod1.tex}}{lst:verb1-rv-mod1}
+			\cmhlistingsfromfile*{demonstrations/verb1-rr-mod1.tex}{\texttt{verb1-rr-mod1.tex}}{lst:verb1-rr-mod1}
+		\end{cmhtcbraster}
+	\end{example}
+
+	We note that:
+	\begin{enumerate}
+		\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.
+	\end{enumerate}
+	See the summary within \vref{tab:replacementswitches}.
+
+	\begin{example}
+		Let's explore the \texttt{amalgamate} field from \vref{lst:replacements} in the context of the file specified
+		in \cref{lst:amalg1}.
+
+		\cmhlistingsfromfile*{demonstrations/amalg1.tex}{\texttt{amalg1.tex}}{lst:amalg1}
+
+		Let's consider the YAML files given in \crefrange{lst:amalg1-yaml}{lst:amalg3-yaml}.
+
+		\begin{cmhtcbraster}[raster columns=3,
+				raster left skip=-3.75cm,
+				raster right skip=-2cm,]
+			\cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg1-yaml.yaml}[replace-TCB]{\texttt{amalg1-yaml.yaml}}{lst:amalg1-yaml}
+			\cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg2-yaml.yaml}[replace-TCB]{\texttt{amalg2-yaml.yaml}}{lst:amalg2-yaml}
+			\cmhlistingsfromfile*[style=yaml-LST]{demonstrations/amalg3-yaml.yaml}[replace-TCB]{\texttt{amalg3-yaml.yaml}}{lst:amalg3-yaml}
+		\end{cmhtcbraster}
+
+		Upon running the following commands,
+		\begin{commandshell}
+latexindent.pl -r amalg1.tex -l=amalg1-yaml
+latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml
+latexindent.pl -r amalg1.tex -l=amalg1-yaml,amalg2-yaml,amalg3-yaml
+\end{commandshell}
+		we receive the respective output in \crefrange{lst:amalg1-mod1}{lst:amalg1-mod123}.
+
+		\begin{cmhtcbraster}[raster columns=3,
+				raster left skip=-3.75cm,
+				raster right skip=-2cm,]
+			\cmhlistingsfromfile*{demonstrations/amalg1-mod1.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml}}{lst:amalg1-mod1}
+			\cmhlistingsfromfile*{demonstrations/amalg1-mod12.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml}}{lst:amalg1-mod12}
+			\cmhlistingsfromfile*{demonstrations/amalg1-mod123.tex}{\texttt{amalg1.tex} using \cref{lst:amalg1-yaml,lst:amalg2-yaml,lst:amalg3-yaml}}{lst:amalg1-mod123}
+		\end{cmhtcbraster}
+		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.
+		\end{enumerate}
+	\end{example}


Property changes on: trunk/Master/texmf-dist/doc/support/latexindent/sec-replacements.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/sec-the-m-switch.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -1,9 +1,10 @@
 % arara: pdflatex: {shell: yes, files: [latexindent]}
-\fancyhead[R]{\bfseries\thepage%
-	\tikz[remember picture,overlay] {
-		\node at (1,0){\includegraphics{logo}};
-	}}
+\renewcommand{\imagetouse}{logo}
 \section{The -m (modifylinebreaks) switch}\label{sec:modifylinebreaks}
+ \fancyhead[R]{\bfseries\thepage%
+	 \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.
 
@@ -87,13 +88,10 @@
 \end{commandshell}
 	we obtain the output in \cref{lst:textwrap1-mod1}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/textwrap1-mod1.tex}{\texttt{textwrap1-mod1.tex}}{lst:textwrap1-mod1}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile{demonstrations/textwrap1.yaml}[MLB-TCB]{\texttt{textwrap1.yaml}}{lst:textwrap1-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	The text wrapping routine is performed \emph{after} verbatim environments
 	have been stored, so verbatim environments and verbatim commands are exempt from the
@@ -128,7 +126,7 @@
 	The text wrapping routine of \texttt{latexindent.pl} is performed by the
 	\texttt{Text::Wrap} module, which provides a \texttt{separator} feature
 	to separate lines with characters other than a new line (see
-	\cite{textwrap}). By default, the separator is empty  which means that a new
+	\cite{textwrap}). By default, the separator is empty which means that a new
 	line token will be used, but you can change it as you see fit.
 
 	For example starting with the file in \cref{lst:textwrap4}
@@ -141,13 +139,10 @@
 \end{commandshell}
 	then we obtain the output in \cref{lst:textwrap4-mod2}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/textwrap4-mod2.tex}{\texttt{textwrap4-mod2.tex}}{lst:textwrap4-mod2}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile{demonstrations/textwrap2.yaml}[MLB-TCB]{\texttt{textwrap2.yaml}}{lst:textwrap2-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 \subsubsection{text wrapping on a per-code-block basis}
 	By default, if the value of \texttt{columns} is greater than 0 and the
@@ -179,20 +174,17 @@
 		\cmhlistingsfromfile{demonstrations/textwrap5.tex}{\texttt{textwrap5.tex}}{lst:textwrap5}
 	\end{widepage}
 
-	With reference to this codeblock, the settings given in \cref{lst:textwrap3-yaml,lst:textwrap4-yaml,lst:textwrap5-yaml} each
+	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{adjustwidth}{-3.5cm}{-2.5cm}
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap3.yaml}[MLB-TCB]{\texttt{textwrap3.yaml}}{lst:textwrap3-yaml}
-		\end{minipage}%
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap4.yaml}[MLB-TCB]{\texttt{textwrap4.yaml}}{lst:textwrap4-yaml}
-		\end{minipage}%
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap5.yaml}[MLB-TCB]{\texttt{textwrap5.yaml}}{lst:textwrap5-yaml}
-		\end{minipage}
-	\end{adjustwidth}
+	\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}:
@@ -214,7 +206,7 @@
 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}
+\end{commandshell}
 	we obtain the output shown in \cref{lst:textwrap5-mod3}.
 
 	\cmhlistingsfromfile{demonstrations/textwrap5-mod3.tex}{\texttt{textwrap5-mod3.tex}}{lst:textwrap5-mod3}
@@ -229,7 +221,7 @@
 	In particular, upon running
 	\begin{commandshell}
 latexindent.pl -s textwrap6.tex -l=textwrap5.yaml -m
-    \end{commandshell}
+\end{commandshell}
 	we obtain the output given in \cref{lst:textwrap6-mod5}.
 
 	\begin{widepage}
@@ -261,7 +253,7 @@
 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}
+\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}
@@ -288,17 +280,14 @@
 	\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{adjustwidth}{-3.5cm}{-2.5cm}
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap9.yaml}[MLB-TCB]{\texttt{textwrap9.yaml}}{lst:textwrap9-yaml}
-		\end{minipage}%
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap10.yaml}[MLB-TCB]{\texttt{textwrap10.yaml}}{lst:textwrap10-yaml}
-		\end{minipage}%
-		\begin{minipage}{.33\linewidth}
-			\cmhlistingsfromfile{demonstrations/textwrap11.yaml}[MLB-TCB]{\texttt{textwrap11.yaml}}{lst:textwrap11-yaml}
-		\end{minipage}
-	\end{adjustwidth}
+	\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
@@ -305,7 +294,7 @@
 	\begin{commandshell}
 latexindent.pl -s textwrap6.tex -l=textwrap9.yaml -m
 latexindent.pl -s textwrap6.tex -l=textwrap11.yaml -m
-    \end{commandshell}
+\end{commandshell}
 	we receive the respective output given in \cref{lst:textwrap6-mod9,lst:textwrap6-mod11}.
 
 	\begin{widepage}
@@ -330,12 +319,12 @@
 	\texttt{80} will be used.
 
 	\texttt{alignAtAmpersandTakesPriority} is set to \texttt{1} by default; assuming
-	that text wrapping is occuring on a per-code-block basis, and the current
+	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
+	\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}
@@ -357,7 +346,7 @@
 
 \subsection{oneSentencePerLine: modifying line breaks for sentences}\label{sec:onesentenceperline}
 	You can instruct \texttt{latexindent.pl} to
-	format%%%%%%
+	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
@@ -373,9 +362,9 @@
 
 \yamltitle{removeSentenceLineBreaks}{0|1}
 	When operating upon sentences \texttt{latexindent.pl} will, by default, remove
-	internal linebreaks as \texttt{removeSentenceLineBreaks} is set to \texttt{1}.
-	Setting this switch to \texttt{0} instructs \texttt{latexindent.pl}
-	not to do so.
+	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.
 
 	For example, consider \texttt{multiple-sentences.tex} shown in \cref{lst:multiple-sentences}.
 
@@ -386,25 +375,19 @@
 		\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{commandshell}
 	\end{widepage}
 	then we obtain the respective output given in \cref{lst:multiple-sentences-mod1,lst:multiple-sentences-mod2}.
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod1.tex}{\texttt{multiple-sentences.tex} using \cref{lst:manipulate-sentences-yaml}}{lst:multiple-sentences-mod1}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/manipulate-sentences.yaml}[MLB-TCB]{\texttt{manipulate-sentences.yaml}}{lst:manipulate-sentences-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod2.tex}{\texttt{multiple-sentences.tex} using \cref{lst:keep-sen-line-breaks-yaml}}{lst:multiple-sentences-mod2}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\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{minipage}
+	\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
@@ -411,7 +394,7 @@
 	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 perpesctive of
+	\texttt{latexindent.pl} on how to define a sentence. From the perspective of
 	\texttt{latexindent.pl} a sentence must:
 	\begin{itemize}
 		\item \emph{follow} a certain character or set of characters (see
@@ -427,19 +410,14 @@
 	pattern that you would like; you can specify anything in this field using the language of
 	regular expressions.
 
-	\begin{adjustwidth}{-3.5cm}{-2.5cm}
-		\begin{minipage}{.36\linewidth}
-			\cmhlistingsfromfile[style=sentencesFollow]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesFollow}}{lst:sentencesFollow}
-		\end{minipage}
-		\hfill
-		\begin{minipage}{.31\linewidth}
-			\cmhlistingsfromfile[style=sentencesBeginWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesBeginWith}}{lst:sentencesBeginWith}
-		\end{minipage}
-		\hfill
-		\begin{minipage}{.31\linewidth}
-			\cmhlistingsfromfile[style=sentencesEndWith]*{../defaultSettings.yaml}[MLB-TCB,width=.9\linewidth,before=\centering]{\texttt{sentencesEndWith}}{lst:sentencesEndWith}
-		\end{minipage}
-	\end{adjustwidth}
+	\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
@@ -450,13 +428,10 @@
 \end{commandshell}
 	we obtain the output given in \cref{lst:multiple-sentences-mod3}.
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod3.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-follow1-yaml}}{lst:multiple-sentences-mod3}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow1.yaml}[MLB-TCB]{\texttt{sentences-follow1.yaml}}{lst:sentences-follow1-yaml}
-	\end{minipage}
+	\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
@@ -472,18 +447,18 @@
 		\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{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{minipage}{.55\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-follow2.yaml}[MLB-TCB]{\texttt{sentences-follow2.yaml}}{lst:sentences-follow2-yaml}
-	\end{minipage}
+		\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
@@ -504,18 +479,18 @@
 		\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{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}
 
-	\begin{minipage}{.55\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-begin1.yaml}[MLB-TCB]{\texttt{sentences-begin1.yaml}}{lst:sentences-begin1-yaml}
-	\end{minipage}
+		\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
@@ -535,21 +510,15 @@
 \end{commandshell}
 	then we obtain the output in \cref{lst:multiple-sentences-mod4}.
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod4.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end1-yaml}}{lst:multiple-sentences-mod4}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end1.yaml}[MLB-TCB]{\texttt{sentences-end1.yaml}}{lst:sentences-end1-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences-mod5.tex}{\texttt{multiple-sentences.tex} using \cref{lst:sentences-end2-yaml}}{lst:multiple-sentences-mod5}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentences-end2.yaml}[MLB-TCB]{\texttt{sentences-end2.yaml}}{lst:sentences-end2-yaml}
-	\end{minipage}
+	\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
@@ -584,10 +553,15 @@
 	\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.
+	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 accomodate the specifications above. For example, using the following command
+	it does not accommodate the specifications above. For example, using the following
+	command
 	\begin{commandshell}
 latexindent.pl url -m -l=alt-full-stop1.yaml
 \end{commandshell}
@@ -594,17 +568,16 @@
 	and the YAML in \cref{lst:alt-full-stop1-yaml} gives the output in
 	\cref{lst:url-mod2}.
 
-	\begin{adjustwidth}{-3.5cm}{-1.5cm}
-		\begin{minipage}{.6\linewidth}
-			\cmhlistingsfromfile{demonstrations/url-mod2.tex}{\texttt{url.tex} using \cref{lst:alt-full-stop1-yaml}}{lst:url-mod2}
-		\end{minipage}
-		\hfill
-		\begin{minipage}{.4\linewidth}
-			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/alt-full-stop1.yaml}[MLB-TCB]{\texttt{alt-full-stop1.yaml}}{lst:alt-full-stop1-yaml}
-		\end{minipage}
-	\end{adjustwidth}
+	\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 accomodated correctly because of
+	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}
@@ -617,7 +590,7 @@
 	\cref{lst:multiple-sentences3}, and run the command
 	\begin{commandshell}
 latexindent.pl multiple-sentences3 -m -l=manipulate-sentences.yaml
-	\end{commandshell}
+\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}
 
@@ -627,30 +600,27 @@
 	\begin{commandshell}
 latexindent.pl multiple-sentences4 -m -l=manipulate-sentences.yaml
 latexindent.pl multiple-sentences4 -m -l=keep-sen-line-breaks.yaml
-	\end{commandshell}
+\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 accomodate the
+	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
 	\begin{commandshell}
 latexindent.pl multiple-sentences4 -m -l=item-rules2.yaml
-	\end{commandshell}
+\end{commandshell}
 	the output of which is shown in \cref{lst:multiple-sentences4-mod3}.
 
-	\begin{minipage}{.5\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/multiple-sentences4-mod3.tex}{\texttt{multiple-sentences4.tex} using \cref{lst:item-rules2-yaml}}{lst:multiple-sentences4-mod3}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.5\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-rules2.yaml}[MLB-TCB]{\texttt{item-rules2.yaml}}{lst:item-rules2-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 \subsubsection{text wrapping and indenting sentences}
-	The \texttt{oneSentencePerLine}%%%
+	The \texttt{oneSentencePerLine}%
 	\announce{2018-08-13}{oneSentencePerline text wrap and indent} can be instructed to perform
 	text wrapping and indentation upon sentences.
 
@@ -664,19 +634,18 @@
 \end{commandshell}
 	we receive the output given in \cref{lst:multiple-sentences5-mod1}.
 
-	\begin{widepage}
-		\begin{minipage}{.55\linewidth}
-			\cmhlistingsfromfile{demonstrations/multiple-sentences5-mod1.tex}{\texttt{multiple-sentences5.tex} using \cref{lst:sentence-wrap1-yaml}}{lst:multiple-sentences5-mod1}
-		\end{minipage}%
-		\hfill
-		\begin{minipage}{.45\linewidth}
-			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/sentence-wrap1.yaml}[MLB-TCB]{\texttt{sentence-wrap1.yaml}}{lst:sentence-wrap1-yaml}
-		\end{minipage}
-	\end{widepage}
+	\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
+	\vref{lst:textwrap9-yaml}, for example, you would replace/append
 	\texttt{environments} with, for example, \texttt{sentence: 50}.
 
 	The indentation of sentences requires that sentences are stored as code blocks. This
@@ -752,13 +721,10 @@
 	Let's start with the \texttt{.tex} file in \cref{lst:shortlines},
 	together with the YAML settings in \cref{lst:remove-para1-yaml}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[showspaces=true]{demonstrations/shortlines.tex}{\texttt{shortlines.tex}}{lst:shortlines}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\linewidth}
 		\cmhlistingsfromfile{demonstrations/remove-para1.yaml}[MLB-TCB]{\texttt{remove-para1.yaml}}{lst:remove-para1-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the command
 	\begin{commandshell}
@@ -774,7 +740,7 @@
 	\vref{lst:removeTWS-before} and running, for example,
 	\begin{commandshell}
 latexindent.pl -m shortlines.tex -o shortlines1-tws.tex -l remove-para1.yaml,removeTWS-before.yaml  
-    \end{commandshell}
+\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.
 
@@ -784,13 +750,10 @@
 	\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{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/shortlines-mand.tex}{\texttt{shortlines-mand.tex}}{lst:shortlines-mand}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile{demonstrations/shortlines-opt.tex}{\texttt{shortlines-opt.tex}}{lst:shortlines-opt}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the commands
 	\begin{widepage}
@@ -837,7 +800,7 @@
 	\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 customized in analogous ways, although note that
+	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}.
@@ -847,13 +810,10 @@
 	code-blocks. For example, consider the file in \cref{lst:shortlines-md}, with the YAML
 	settings in \cref{lst:remove-para4-yaml}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/shortlines-md.tex}{\texttt{shortlines-md.tex}}{lst:shortlines-md}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\linewidth}
 		\cmhlistingsfromfile{demonstrations/remove-para4.yaml}[MLB-TCB]{\texttt{remove-para4.yaml}}{lst:remove-para4-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the following command
 	\begin{widepage}
@@ -863,7 +823,7 @@
 	\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%%%%%
+	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}.
@@ -903,7 +863,7 @@
 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{commandshell}
 	\end{widepage}
 	we obtain the respective outputs in \crefrange{lst:sl-stop4}{lst:sl-stop4-comment}; notice in particular
 	that:
@@ -931,7 +891,7 @@
 
 \subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap}
 
-	The%%%%%
+	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.
@@ -953,25 +913,22 @@
 	Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command
 	\begin{commandshell}
 latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12
-    \end{commandshell}
+\end{commandshell}
 	we obtain the output in \cref{lst:textwrap7-mod12}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\linewidth}
 		\cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
-	In \cref{lst:textwrap7-mod12} the paragraph linebreaks have first been removed from
-	\cref{lst:textwrap7}, and  then the text wrapping routine has been applied. It is
+	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 \emph{five}%%%%%%
+	take one of \emph{five}%
 	\announce{2017-08-21}*{blank line poly-switch} integer values:
 	\begin{itemize}[font=\bfseries]
 		\item[$-1$] \emph{remove mode}: line breaks before or after the
@@ -989,7 +946,11 @@
 		      \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.
+		      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{itemize}
 	In the above, \emph{<part of thing>} refers to either the
 	\emph{begin statement}, \emph{body} or \emph{end statement}
@@ -1002,8 +963,9 @@
 	\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. Note that all poly-switches are \emph{off} by default.
+	\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.
 
 	\cmhlistingsfromfile[style=modifylinebreaksEnv]*{../defaultSettings.yaml}[width=.8\linewidth,before=\centering,MLB-TCB]{\texttt{environments}}{lst:environments-mlb}
 
@@ -1070,7 +1032,7 @@
 		\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}.
+	Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod3,lst:env-mlb-mod4}.
 
 	\begin{widepage}
 		\begin{minipage}{.56\linewidth}
@@ -1086,9 +1048,9 @@
 	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
+	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}).
 
@@ -1100,7 +1062,7 @@
 		\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}.
+	Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod5,lst:env-mlb-mod6}.
 
 	\begin{widepage}
 		\begin{minipage}{.56\linewidth}
@@ -1115,6 +1077,46 @@
 	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}).
+
+	\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
+	\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
@@ -1168,7 +1170,7 @@
 		\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}.
+	Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod9,lst:env-mlb-mod10}.
 
 	\begin{widepage}
 		\begin{minipage}{.43\linewidth}
@@ -1184,7 +1186,7 @@
 	comment symbol has been added before adding the line break; in both cases, trailing
 	horizontal space has been stripped before doing so.
 
-	Let's%%%%%%
+	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
@@ -1198,7 +1200,7 @@
 		\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}.
+	Upon running commands analogous to the above, we obtain \cref{lst:env-mlb-mod11,lst:env-mlb-mod12}.
 
 	\begin{widepage}
 		\begin{minipage}{.42\linewidth}
@@ -1213,11 +1215,50 @@
 	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.
 
-\subsubsection{poly-switches only add line breaks when necessary}
+	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}).
+
+	\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
+	\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$),
-	it will only do so if necessary. For example, if you process the file in
-	\vref{lst:mlb2} using any of the YAML files presented so far in this section,
+	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}
@@ -1228,37 +1269,39 @@
 		\cmhlistingsfromfile{demonstrations/env-mlb3.tex}{\texttt{env-mlb3.tex}}{lst:mlb3}
 	\end{minipage}
 
-	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
+	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
+	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{minipage}{.45\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile{demonstrations/env-mlb3-mod4.tex}{\texttt{env-mlb3.tex} using \vref{lst:env-mlb4}}{lst:env-mlb3-mod4}
-	\end{minipage}
+	\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.
+	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}.
+	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}.
 
 	\begin{minipage}{.45\linewidth}
 		\begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb4.tex}}{lst:mlb4}
@@ -1333,10 +1376,10 @@
 	\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.
+	when considering the \texttt{-m} switch; let's consider the file shown
+	in \cref{lst:mlb5}, which highlights trailing spaces.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\begin{cmhlistings}[style=tcblatex,showspaces=true,escapeinside={(*@}{@*)}]{\texttt{env-mlb5.tex}}{lst:mlb5}
 before words   (*@$\BeginStartsOnOwnLine$@*) 
 \begin{myenv}           (*@$\BodyStartsOnOwnLine$@*)
@@ -1344,11 +1387,8 @@
 \end{myenv}     (*@$\EndFinishesWithLineBreak$@*)
 after words
 \end{cmhlistings}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/removeTWS-before.yaml}[yaml-TCB]{\texttt{removeTWS-before.yaml}}{lst:removeTWS-before}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	The output from the following commands
 	\begin{widepage}
@@ -1357,9 +1397,9 @@
 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
+	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}
@@ -1371,7 +1411,7 @@
 \subsubsection{poly-switch line break removal and blank lines}
 	Now let's consider the file in \cref{lst:mlb6}, which contains blank lines.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\begin{cmhlistings}[style=tcblatex,escapeinside={(*@}{@*)}]{\texttt{env-mlb6.tex}}{lst:mlb6}
 before words(*@$\BeginStartsOnOwnLine$@*)
 
@@ -1386,11 +1426,8 @@
 
 after words
 \end{cmhlistings}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/UnpreserveBlankLines.yaml}[MLB-TCB]{\texttt{UnpreserveBlankLines.yaml}}{lst:UnpreserveBlankLines}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the following commands
 	\begin{widepage}
@@ -1400,22 +1437,23 @@
 \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}.
+	\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{widepage}
-		\begin{minipage}{.30\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}
-		\end{minipage}
-		\hfill
-		\begin{minipage}{.65\linewidth}
-			\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{minipage}
-	\end{widepage}
+	\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}.
@@ -1426,7 +1464,7 @@
 	\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}
+\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}
@@ -1443,6 +1481,186 @@
 		      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.
+
+	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
+	\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{yaml:lookforaligndelims});
+		      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{yaml:lookforaligndelims});
+		      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
+	\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{yaml:lookforaligndelims});
+		      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{yaml:lookforaligndelims});
+		      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}.
+
+	\cmhlistingsfromfile*{demonstrations/special4.tex}{\texttt{special4.tex}}{lst:special4}
+
+	Upon using the YAML settings in \cref{lst:DBS5}, and running the command
+	\begin{commandshell}
+latexindent.pl -m special4.tex -l DBS5.yaml
+\end{commandshell}
+	then we receive the output given in \cref{lst:special4-DBS5}.
+
+	\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}.
+
+	\cmhlistingsfromfile*{demonstrations/mycommand2.tex}{\texttt{mycommand2.tex}}{lst:mycommand2}
+
+	Upon using the YAML settings in \cref{lst:DBS6,lst:DBS7}, and running the command
+	\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}
+
+\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]!.
+
+	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},
+	\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
@@ -1449,74 +1667,80 @@
 	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}).
+	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}).
 
-    \clearpage
+	\clearpage
 	\begin{longtable}{llll}
-		\caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping}                                                                                                                         \\
+		\caption{Poly-switch mappings for all code-block types}\label{tab:poly-switch-mapping}                                                                                                                                                  \\
 		\toprule
-		Code block                             & Sample                                                  & \multicolumn{2}{c}{Poly-switch mapping}                                                                     \\
+		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!                             &                                         &                                                                   \\
+		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 polyswitches}                                                                                                                                                    \\
-		                                       & \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!                             &                                         &                                                                   \\
+		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                                         \\
-		                                       & \verb!body of opt arg!$\EndStartsOnOwnLine$        & $\EndStartsOnOwnLine$                   & RSqBStartsOnOwnLine                                               \\
-		                                       & \verb!]!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & RSqBFinishesWithLineBreak                                         \\
-		                                       & \verb!...!                             &                                         &                                                                   \\
+		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                                        \\
-		                                       & \verb!body of mand arg!$\EndStartsOnOwnLine$        & $\EndStartsOnOwnLine$                   & RCuBStartsOnOwnLine                                               \\
-		                                       & \verb!}!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & RCuBFinishesWithLineBreak                                         \\
-		                                       & \verb!...!                             &                                         &                                                                   \\
+		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$                   &                                         &                                                                   \\
+		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$             &                                         &                                                                   \\
+		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                                       \\
+		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!...!                             &                                         &                                                                   \\
+		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 polyswitches}                                                                                                                                                     \\
-		                                       & \verb!\middle!$\ElseFinishesWithLineBreak$ & $\ElseFinishesWithLineBreak$            & SpecialMiddleFinishesWithLineBreak                                \\
-		                                       & body of special/middle $\EndStartsOnOwnLine$            & $\EndStartsOnOwnLine$                   & SpecialEndStartsOnOwnLine                                         \\
-		                                       & \verb!\]!$\EndFinishesWithLineBreak$  & $\EndFinishesWithLineBreak$             & SpecialEndFinishesWithLineBreak                                   \\
-		                                       & after words                                             &                                         &                                                                   \\
+		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                                             &                                         &                                                                   \\
+		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}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-commands-and-their-options.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -7,7 +7,7 @@
 
 \yamltitle{commandCodeBlocks}*{fields}
 
-	The \texttt{commandCodeBlocks} field%%%%
+	The \texttt{commandCodeBlocks} field%
 	\announce{2018-04-27}*{commandCodeBlocks}
 	contains a few switches detailed in \cref{lst:commandCodeBlocks}.
 
@@ -43,16 +43,13 @@
 	Upon using the YAML settings in \cref{lst:noRoundParentheses}, and running the command
 	\begin{commandshell}
 latexindent.pl pstricks1.tex -l noRoundParentheses.yaml
-        \end{commandshell}
+\end{commandshell}
 	we obtain the output given in  \cref{lst:pstricks1-nrp}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/pstricks1-nrp.tex}{\texttt{pstricks1.tex} using \cref{lst:noRoundParentheses}}{lst:pstricks1-nrp}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/noRoundParentheses.yaml}[yaml-TCB]{\texttt{noRoundParentheses.yaml}}{lst:noRoundParentheses}
-	\end{minipage}
+	\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
@@ -65,16 +62,13 @@
 	Let's explore this using the YAML given in \cref{lst:defFunction} and run the command
 	\begin{commandshell}
 latexindent.pl pstricks1.tex -l defFunction.yaml
-        \end{commandshell}
+\end{commandshell}
 	then the output is as in \cref{lst:pstricks1-indent-rules}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile[showspaces=true]{demonstrations/pstricks1-indent-rules.tex}{\texttt{pstricks1.tex} using \cref{lst:defFunction}}{lst:pstricks1-indent-rules}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/defFunction.yaml}[yaml-TCB]{\texttt{defFunction.yaml}}{lst:defFunction}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Notice in \cref{lst:pstricks1-indent-rules} that the \emph{body} of the
 	\lstinline!defFunction! command i.e, the subsequent lines containing arguments after the
@@ -121,13 +115,10 @@
 \end{commandshell}
 	we receive the output given in \cref{lst:tikz-node1-draw}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile[showspaces=true]{demonstrations/tikz-node1-draw.tex}{\texttt{tikz-node1.tex} using \cref{lst:draw}}{lst:tikz-node1-draw}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/draw.yaml}[yaml-TCB]{\texttt{draw.yaml}}{lst:draw}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Notice that each line after the \lstinline!\draw! command (its `body') in
 	\cref{lst:tikz-node1-draw} has been given the appropriate two-spaces worth of indentation
@@ -140,13 +131,10 @@
 \end{commandshell}
 	given in \cref{lst:tikz-node1-no-strings}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/tikz-node1-no-strings.tex}{\texttt{tikz-node1.tex} using \cref{lst:no-strings}}{lst:tikz-node1-no-strings}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/no-strings.yaml}[yaml-TCB]{\texttt{no-strings.yaml}}{lst:no-strings}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	In this case, \texttt{latexindent.pl} sees that:
 	\begin{itemize}
@@ -166,19 +154,15 @@
 	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{adjustwidth}{-3.5cm}{-1.5cm}
-		\begin{minipage}{.32\linewidth}
-			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo.yaml}[yaml-TCB]{\texttt{amalgamate-demo.yaml}}{lst:amalgamate-demo}
-		\end{minipage}%
-		\hfill
-		\begin{minipage}{.32\linewidth}
-			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo1.yaml}[yaml-TCB]{\texttt{amalgamate-demo1.yaml}}{lst:amalgamate-demo1}
-		\end{minipage}%
-		\hfill
-		\begin{minipage}{.32\linewidth}
-			\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo2.yaml}[yaml-TCB]{\texttt{amalgamate-demo2.yaml}}{lst:amalgamate-demo2}
-		\end{minipage}
-	\end{adjustwidth}
+	\begin{cmhtcbraster}[raster columns=3,
+			raster left skip=-3.5cm,
+			raster right skip=-2cm,
+			raster column skip=.03\linewidth]
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo.yaml}[yaml-TCB]{\texttt{amalgamate-demo.yaml}}{lst:amalgamate-demo}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/amalgamate-demo1.yaml}[yaml-TCB]{\texttt{amalgamate-demo1.yaml}}{lst:amalgamate-demo1}
+		\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
@@ -192,13 +176,10 @@
 	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{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/for-each.tex}{\texttt{for-each.tex}}{lst:for-each}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/for-each-default.tex}{\texttt{for-each} default output}{lst:for-each-default}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Let's compare this with the output from using the YAML settings in
 	\cref{lst:foreach}, and running the command
@@ -207,13 +188,10 @@
 \end{commandshell}
 	given in \cref{lst:for-each-mod1}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/for-each-mod1.tex}{\texttt{for-each.tex} using \cref{lst:foreach}}{lst:for-each-mod1}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.49\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/foreach.yaml}[yaml-TCB]{\texttt{foreach.yaml}}{lst:foreach}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	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
@@ -225,7 +203,7 @@
 
 \yamltitle{commandNameSpecial}*{fields}
 	There are some special command names%
-	\announce{2018-04-27}*{commandNameSpecial} that do not fit within the names recognized by
+	\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,
@@ -236,13 +214,10 @@
 	For example, consider the sample file in \cref{lst:ifnextchar}, which has default
 	output in \cref{lst:ifnextchar-default}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/ifnextchar.tex}{\texttt{ifnextchar.tex}}{lst:ifnextchar}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/ifnextchar-default.tex}{\texttt{ifnextchar.tex} default output}{lst:ifnextchar-default}
-	\end{minipage}
+	\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
@@ -256,13 +231,10 @@
 	to indent its body successfully, because the \lstinline!\@ifnextchar[! command has not been
 	found.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/ifnextchar-off.tex}{\texttt{ifnextchar.tex} using \cref{lst:no-ifnextchar}}{lst:ifnextchar-off}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/no-ifnextchar.yaml}[yaml-TCB]{\texttt{no-ifnextchar.yaml}}{lst:no-ifnextchar}
-	\end{minipage}
+	\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

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-conflicting-poly-switches.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -8,13 +8,10 @@
 \end{commandshell}
 	is given in \cref{lst:mycom-mlb4}.
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/mycommand1-mlb4.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb4}}{lst:mycommand1-mlb4}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb4.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb4.yaml}}{lst:mycom-mlb4}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Studying \cref{lst:mycom-mlb4}, we see that the two poly-switches are at opposition with
 	one another:
@@ -35,13 +32,10 @@
 \end{commandshell}
 	we obtain the output given in \cref{lst:mycommand1-mlb5}.
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/mycommand1-mlb5.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb5}}{lst:mycommand1-mlb5}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb5.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb5.yaml}}{lst:mycom-mlb5}
-	\end{minipage}
+	\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
@@ -48,13 +42,10 @@
 	YAML settings in \cref{lst:mycom-mlb6}, which give associated output in
 	\cref{lst:mycommand1-mlb6}.
 
-	\begin{minipage}{.4\linewidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/mycommand1-mlb6.tex}{\texttt{mycommand1.tex} using \cref{lst:mycom-mlb6}}{lst:mycommand1-mlb6}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb6.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb6.yaml}}{lst:mycom-mlb6}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Note that a \lstinline!%! \emph{has} been added to the trailing
 	first \lstinline!}!; this is because:
@@ -78,16 +69,13 @@
 	command
 	\begin{commandshell}
 latexindent.pl -m -l=nested-env-mlb1.yaml nested-env.tex
-        \end{commandshell}
+\end{commandshell}
 	gives the output in \cref{lst:nested-env-mlb1}.
 
-	\begin{minipage}{.45\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb1.yaml}}{lst:nested-env-mlb1-yaml}
-	\end{minipage}
+	\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
@@ -146,16 +134,13 @@
 	running the command
 	\begin{commandshell}
 latexindent.pl -m -l=nested-env-mlb2.yaml nested-env.tex
-        \end{commandshell}
+\end{commandshell}
 	we obtain the output given in \cref{lst:nested-env-mlb2-output}.
 
-	\begin{minipage}{.45\linewidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/nested-env-mlb2.tex}{\texttt{nested-env.tex} using \cref{lst:nested-env-mlb2}}{lst:nested-env-mlb2-output}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/nested-env-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{nested-env-mlb2.yaml}}{lst:nested-env-mlb2}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	During Phase 1:
 	\begin{itemize}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-noAdditionalIndent-indentRules.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -3,7 +3,7 @@
 \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
+	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$};

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsec-partnering-poly-switches.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -19,33 +19,33 @@
 	beginning brace \lstinline!{! has had its leading line break removed, but that
 	the \emph{first} brace has not.
 
-	\begin{minipage}{.4\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb1.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb1.yaml}}{lst:mycom-mlb1}
-	\end{minipage}
+		\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{minipage}{.4\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb2.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb2.yaml}}{lst:mycom-mlb2}
-	\end{minipage}
+		\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{minipage}{.4\linewidth}
+	\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}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.55\linewidth}
-		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=\linewidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3}
-	\end{minipage}
+		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/mycom-mlb3.yaml}[MLB-TCB,width=.6\textwidth]{\texttt{mycom-mlb3.yaml}}{lst:mycom-mlb3}
+	\end{cmhtcbraster}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-commands-with-arguments.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -5,13 +5,10 @@
 	\cref{lst:mycommand-default}. \footnote{The command code blocks
 		have quite a few subtleties, described in \vref{subsec:commands-string-between}.}
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/mycommand.tex}{\texttt{mycommand.tex}}{lst:mycommand}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile{demonstrations/mycommand-default.tex}{\texttt{mycommand.tex} default output}{lst:mycommand-default}
-	\end{minipage}
+	\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

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-and-their-arguments.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -47,7 +47,11 @@
 	\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}. \cmhlistingsfromfile{demonstrations/myenvironment-args.tex}{\texttt{myenv-args.tex}}{lst:myenv-args} Upon running
+	in \cref{lst:myenv-args}.
+
+	\cmhlistingsfromfile{demonstrations/myenvironment-args.tex}{\texttt{myenv-args.tex}}{lst:myenv-args}
+
+	Upon running
 	\begin{commandshell}
 latexindent.pl -l=myenv-noAdd1.yaml myenv-args.tex  
 \end{commandshell}
@@ -92,13 +96,10 @@
 	We may also specify indentation rules for environment code blocks using the
 	\texttt{indentRules} field; see, for example, \cref{lst:myenv-rules1,lst:myenv-rules2}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/myenv-rules1.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules1.yaml}}{lst:myenv-rules1}
-	\end{minipage}
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/myenv-rules2.yaml}[width=.8\linewidth,before=\centering,yaml-TCB]{\texttt{myenv-rules2.yaml}}{lst:myenv-rules2}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	On applying either of the following commands,
 	\begin{commandshell}
@@ -206,8 +207,8 @@
 
 	we may run the commands
 	\begin{commandshell}
-latexindent.pl  myenv-args.tex -local opt-args-no-add-glob.yaml
-latexindent.pl  myenv-args.tex -local mand-args-no-add-glob.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
 	\cref{lst:myenv-args-no-add-opt} the \emph{optional} argument has not received any
@@ -232,8 +233,8 @@
 	\lstinline!" "!, and then run the following commands
 
 	\begin{commandshell}
-latexindent.pl  myenv-args.tex -l env-indentRules.yaml
-latexindent.pl  myenv-args.tex -l myenv-rules1.yaml,env-indentRules.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
@@ -263,8 +264,8 @@
 
 	Upon running the following commands
 	\begin{commandshell}
-latexindent.pl  myenv-args.tex -local opt-args-indent-rules-glob.yaml
-latexindent.pl  myenv-args.tex -local mand-args-indent-rules-glob.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

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-environments-with-items.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -11,13 +11,10 @@
 	the indentation that your \texttt{item} receives using \texttt{indentRules},
 	as in \cref{lst:item-rules1}
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-noAdd1.yaml}[yaml-TCB]{\texttt{item-noAdd1.yaml}}{lst:item-noAdd1}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/item-rules1.yaml}[yaml-TCB]{\texttt{item-rules1.yaml}}{lst:item-rules1}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Upon running the following commands
 	\begin{commandshell}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-headings.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -9,35 +9,29 @@
 	On using the YAML file in \cref{lst:headings3yaml} by running the command
 	\begin{commandshell}
 latexindent.pl headings2.tex -l headings3.yaml      
-    \end{commandshell}
+\end{commandshell}
 	we obtain the output in \cref{lst:headings2-mod3}. Note that the argument of
 	\texttt{paragraph} has received (default) indentation, and that the body after the
 	heading statement has received (default) indentation.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/headings2-mod3.tex}{\texttt{headings2.tex} using \cref{lst:headings3yaml}}{lst:headings2-mod3}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings3.yaml}[yaml-TCB]{\texttt{headings3.yaml}}{lst:headings3yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	If we specify \texttt{noAdditionalIndent} as in \cref{lst:headings4yaml} and run the command
 	\begin{commandshell}
 latexindent.pl headings2.tex -l headings4.yaml      
-    \end{commandshell}
+\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.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/headings2-mod4.tex}{\texttt{headings2.tex} using \cref{lst:headings4yaml}}{lst:headings2-mod4}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings4.yaml}[yaml-TCB]{\texttt{headings4.yaml}}{lst:headings4yaml}
-	\end{minipage}
+	\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
@@ -45,24 +39,21 @@
 	\emph{after the heading} of \texttt{paragraph} have \emph{all} received
 	three tabs worth of indentation.
 
-	\begin{minipage}{.55\textwidth}
+	\begin{cmhtcbraster}[raster force size=false,
+			raster column 1/.style={add to width=1cm},
+			raster column 2/.style={add to width=-1cm},
+		]
 		\cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod5.tex}{\texttt{headings2.tex} using \cref{lst:headings5yaml}}{lst:headings2-mod5}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.42\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings5.yaml}[yaml-TCB]{\texttt{headings5.yaml}}{lst:headings5yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	We may, instead, specify \texttt{noAdditionalIndent} in `field' form, as in
 	\cref{lst:headings6yaml} which gives the output in \cref{lst:headings2-mod6}.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/headings2-mod6.tex}{\texttt{headings2.tex} using \cref{lst:headings6yaml}}{lst:headings2-mod6}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings6.yaml}[yaml-TCB]{\texttt{headings6.yaml}}{lst:headings6yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
 	Analogously, we may specify \texttt{indentRules} as in \cref{lst:headings7yaml} which
 	gives the output in \cref{lst:headings2-mod7}; note that mandatory argument text has only
@@ -69,13 +60,10 @@
 	received a single space of indentation, while the body after the heading has received
 	three tabs worth of indentation.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[showtabs=true]{demonstrations/headings2-mod7.tex}{\texttt{headings2.tex} using \cref{lst:headings7yaml}}{lst:headings2-mod7}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings7.yaml}[yaml-TCB]{\texttt{headings7.yaml}}{lst:headings7yaml}
-	\end{minipage}
+	\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}.
@@ -86,18 +74,12 @@
 	(from the global rule specified in \cref{lst:headings9yaml}), and the remaining body after
 	\texttt{paragraph} has received just two spaces of indentation.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile{demonstrations/headings2-mod8.tex}{\texttt{headings2.tex} using \cref{lst:headings8yaml}}{lst:headings2-mod8}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings8.yaml}[yaml-TCB]{\texttt{headings8.yaml}}{lst:headings8yaml}
-	\end{minipage}
+	\end{cmhtcbraster}
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}
 		\cmhlistingsfromfile[showspaces=true,showtabs=true]{demonstrations/headings2-mod9.tex}{\texttt{headings2.tex} using \cref{lst:headings9yaml}}{lst:headings2-mod9}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.45\textwidth}
 		\cmhlistingsfromfile[style=yaml-LST]*{demonstrations/headings9.yaml}[yaml-TCB]{\texttt{headings9.yaml}}{lst:headings9yaml}
-	\end{minipage}
+	\end{cmhtcbraster}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-ifelsefi.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -60,7 +60,7 @@
 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}
+	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.
 
@@ -73,15 +73,12 @@
 	\end{minipage}
 
 	We can further explore the treatment of \texttt{ifElseFi} code
-	blocks%%%%
+	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.
 
-	\begin{minipage}{.45\textwidth}
+	\begin{cmhtcbraster}[raster column skip=.1\linewidth]
 		\cmhlistingsfromfile{demonstrations/ifelsefi2.tex}{\texttt{ifelsefi2.tex}}{lst:ifelsefi2}
-	\end{minipage}%
-	\hfill
-	\begin{minipage}{.54\textwidth}
 		\cmhlistingsfromfile{demonstrations/ifelsefi2-default.tex}{\texttt{ifelsefi2.tex} default output}{lst:ifelsefi2-default}
-	\end{minipage}
+	\end{cmhtcbraster}

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-no-add-remaining-code-blocks.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -9,12 +9,15 @@
 		\texttt{latexindent.pl} defines this type of code block by the following criteria:
 		\begin{itemize}
 			\item it must immediately follow either \lstinline!{! OR \lstinline![! OR
-			      \lstinline!,! with comments and blank lines allowed;
+			      \lstinline!,! with comments and blank lines allowed.
 			\item then it has a name made up of the characters detailed in \vref{tab:code-blocks};
 			\item then an $=$ symbol;
 			\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}%
+		\announce*{2019-07-13}{fine tuning: keyEqualsValuesBracesBrackets}
 
 		An example is shown in \cref{lst:pgfkeysbefore}, with the default output given in
 		\cref{lst:pgfkeys1:default}.
@@ -43,11 +46,15 @@
 		\begin{itemize}
 			\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!(!;
+			      \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}%
+		\announce*{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
+
 		A simple example is given in \cref{lst:child1}, with default output in
 		\cref{lst:child1:default}.
 
@@ -81,6 +88,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}%
+		\announce*{2019-07-13}{fine tuning: namedGroupingBracesBrackets}
 
 		An example is shown in \cref{lst:psforeach1} with default output give in
 		\cref{lst:psforeach:default}.

Modified: trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/subsubsec-special.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -50,7 +50,7 @@
 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}
+	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.
 

Modified: trunk/Master/texmf-dist/doc/support/latexindent/title.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/latexindent/title.tex	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/doc/support/latexindent/title.tex	2019-07-13 21:40:12 UTC (rev 51635)
@@ -8,7 +8,7 @@
 			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.6
+		\centering\ttfamily\bfseries latexindent.pl\\[1cm] Version 3.7
 	\end{tcolorbox}
 }
 \author{Chris Hughes \thanks{and contributors!
@@ -21,6 +21,7 @@
 	\texttt{latexindent.pl} is a \texttt{Perl} script that indents \texttt{.tex} (and other) files according to an indentation scheme that the user can modify to suit their taste.
 	Environments, including those with alignment delimiters (such as \texttt{tabular}), and commands, including those that can split braces and brackets across lines, are \emph{usually} handled correctly by the script.
 	Options for \texttt{verbatim}-like environments and commands, together with indentation after headings (such as \lstinline!chapter!, \lstinline!section!, etc) are also available.
-	The script also has the ability to modifiy line breaks, and add comment symbols.
-	All user options are customisable via the switches in the YAML interface; you can find a quick start guide in \vref{sec:quickstart}.
+	The script also has the ability to modify line breaks, and to add comment symbols and blank lines; furthermore, it permits string or
+	regex-based substitutions.
+	All user options are customisable via the switches and the YAML interface; you can find a quick start guide in \vref{sec:quickstart}.
 \end{adjustwidth}

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/AlignmentAtAmpersand.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/AlignmentAtAmpersand.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/AlignmentAtAmpersand.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -27,7 +27,7 @@
 use LatexIndent::Tokens qw/%tokens/;
 use LatexIndent::LogFile qw/$logger/;
 our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
-our @EXPORT_OK = qw/align_at_ampersand find_aligned_block/;
+our @EXPORT_OK = qw/align_at_ampersand find_aligned_block double_back_slash_else/;
 our $alignmentBlockCounter;
 
 sub find_aligned_block{
@@ -258,7 +258,7 @@
     }
 
     # output some of the info so far to the log file
-    $logger->trace("*Alignment at ampersand routine") if $is_t_switch_active;
+    $logger->trace("*Alignment at ampersand routine for ${$self}{name} (see lookForAlignDelims)") if $is_t_switch_active;
     $logger->trace("Maximum column sizes of horizontally stripped formatted block (${$self}{name}): @maximumColumnWidth") if $is_t_switch_active;
     $logger->trace("align at ampersand: ${$self}{lookForAlignDelims}") if $is_t_switch_active;
     $logger->trace("align at \\\\: ${$self}{alignDoubleBackSlash}") if $is_t_switch_active;
@@ -505,4 +505,21 @@
     ${$self}{body} =~ s/\h*\R$//s if !${$self}{linebreaksAtEnd}{body};
 }
 
+sub double_back_slash_else{
+    my $self = shift;
+
+    # check for existence of \\ statement, and associated line break information
+    $self->check_for_else_statement(
+              # else name regexp
+              elseNameRegExp=>qr/${${$masterSettings{fineTuning}}{modifyLineBreaks}}{doubleBackSlash}/,
+              # else statements name: note that DBS stands for 'Double Back Slash'
+              ElseStartsOnOwnLine=>"DBSStartsOnOwnLine",
+              # end statements
+              ElseFinishesWithLineBreak=>"DBSFinishesWithLineBreak",
+              # for the YAML settings storage
+              storageNameAppend=>"DBS",
+              # logfile information
+              logName=>"double-back-slash-block (for align at ampersand, see lookForAlignDelims)",
+        );
+}
 1;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Arguments.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -24,7 +24,7 @@
 use Data::Dumper;
 use Exporter qw/import/;
 our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
-our @EXPORT_OK = qw/get_arguments_regexp find_opt_mand_arguments get_numbered_arg_regexp construct_arguments_regexp $optAndMandRegExp/;
+our @EXPORT_OK = qw/get_arguments_regexp find_opt_mand_arguments construct_arguments_regexp $optAndMandRegExp comma_else/;
 our $ArgumentCounter;
 our $optAndMandRegExp; 
 our $optAndMandRegExpWithLineBreaks; 
@@ -222,13 +222,6 @@
     return;
 }
 
-sub get_numbered_arg_regexp{
-
-    # for example #1 #2, etc
-    my $numberedArgRegExp = qr/(?:#\d\h*;?,?\/?)+/;
-    return $numberedArgRegExp;
-}
-
 sub get_arguments_regexp{
 
     my $self = shift;
@@ -240,12 +233,10 @@
     # some calls to this routine need to account for the linebreaks at the end, some do not
     my $lineBreaksAtEnd = (defined ${input}{mode} and ${input}{mode} eq 'lineBreaksAtEnd')?'\R*':q();
 
-    # for example #1 #2, etc
-    my $numberedArgRegExp = $self->get_numbered_arg_regexp;
+    # arguments Before, by default, includes beamer special and numbered arguments, for example #1 #2, etc
+    my  $argumentsBefore = qr/${${$masterSettings{fineTuning}}{arguments}}{before}/;
+    my  $argumentsBetween = qr/${${$masterSettings{fineTuning}}{arguments}}{between}/;
 
-    # beamer special
-    my $beamerRegExp = qr/\<.*?\>/;
-
     # commands are allowed strings between arguments, e.g node, decoration, etc, specified in stringsAllowedBetweenArguments
     my $stringsBetweenArguments = q();
 
@@ -272,7 +263,7 @@
             return qr/
                                   (                          # capture into $1
                                      (?:                  
-                                        (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$numberedArgRegExp|$beamerRegExp|_|\^|$stringsBetweenArguments)* 
+                                        (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$argumentsBefore|$argumentsBetween|$stringsBetweenArguments)* 
                                         (?:
                                              (?:
                                                  \h*         # 0 or more spaces
@@ -332,7 +323,7 @@
                                      # NOT followed by
                                      (?!
                                        (?:
-                                           (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$numberedArgRegExp|$beamerRegExp|$stringsBetweenArguments)*  # 0 or more h-space, blanklines, trailing comments
+                                           (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$argumentsBefore|$stringsBetweenArguments)*  # 0 or more h-space, blanklines, trailing comments
                                            (?:
                                              (?:(?<!\\)\[)
                                              |
@@ -350,7 +341,7 @@
             return qr/
                                   (                          # capture into $1
                                      (?:                  
-                                        (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$numberedArgRegExp|$beamerRegExp|_|\^|$stringsBetweenArguments)* 
+                                        (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$argumentsBefore|$argumentsBetween|$stringsBetweenArguments)* 
                                         (?:
                                              (?:
                                                  \h*         # 0 or more spaces
@@ -383,7 +374,7 @@
                                      # NOT followed by
                                      (?!
                                        (?:
-                                           (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$numberedArgRegExp|$beamerRegExp)*  # 0 or more h-space, blanklines, trailing comments
+                                           (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$argumentsBefore)*  # 0 or more h-space, blanklines, trailing comments
                                            (?:
                                              (?:(?<!\\)\[)
                                              |
@@ -398,4 +389,21 @@
         }
 }
 
+sub comma_else{
+    my $self = shift;
+
+    # check for existence of \\ statement, and associated line break information
+    $self->check_for_else_statement(
+              # else name regexp
+              elseNameRegExp=>qr/${${$masterSettings{fineTuning}}{modifyLineBreaks}}{comma}/,
+              # else statements name
+              ElseStartsOnOwnLine=>"CommaStartsOnOwnLine",
+              # end statements
+              ElseFinishesWithLineBreak=>"CommaFinishesWithLineBreak",
+              # for the YAML settings storage
+              storageNameAppend=>"comma",
+              # logfile information
+              logName=>"comma block, see CommaStartsOnOwnLine and CommaFinishesWithLineBreak",
+        );
+}
 1;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Command.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -64,11 +64,14 @@
     # details to log file
     $logger->trace("*The special command names regexp is: $commandNameSpecialRegExp (see commandNameSpecial)") if $is_t_switch_active;
 
+    # read from fine tuning
+    my  $commandNameRegExp = qr/${${$masterSettings{fineTuning}}{commands}}{name}/;
+
     # construct the command regexp
     $commandRegExp = qr/
               (\\|\\@|@)   
               (
-               [+a-zA-Z@\*0-9_\:]+?|$commandNameSpecialRegExp      # lowercase|uppercase letters, @, *, numbers
+               $commandNameRegExp|$commandNameSpecialRegExp      # lowercase|uppercase letters, @, *, numbers
               )                
               (\h*)
               (\R*)?
@@ -203,4 +206,10 @@
     return;
 }
 
+sub double_back_slash_else{ 
+    # need an empty routine here for commands; see
+    # test-cases/alignment/command-align.tex for example
+    return;
+}
+
 1;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Document.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -21,8 +21,9 @@
 use open ':std', ':encoding(UTF-8)';
 
 # gain access to subroutines in the following modules
-use LatexIndent::Switches qw/storeSwitches %switches $is_m_switch_active $is_t_switch_active $is_tt_switch_active/;
+use LatexIndent::Switches qw/storeSwitches %switches $is_m_switch_active $is_t_switch_active $is_tt_switch_active $is_r_switch_active $is_rr_switch_active $is_rv_switch_active/;
 use LatexIndent::LogFile qw/processSwitches $logger/;
+use LatexIndent::Replacement qw/make_replacements/;
 use LatexIndent::GetYamlSettings qw/yaml_read_settings yaml_modify_line_breaks_settings yaml_get_indentation_settings_for_this_object yaml_poly_switch_get_every_or_custom_value yaml_get_indentation_information yaml_get_object_attribute_for_indentation_settings yaml_alignment_at_ampersand_settings yaml_get_textwrap_removeparagraphline_breaks %masterSettings yaml_get_columns/;
 use LatexIndent::FileExtension qw/file_extension_check/;
 use LatexIndent::BackUpFileProcedure qw/create_back_up_file/;
@@ -34,15 +35,15 @@
 use LatexIndent::Indent qw/indent wrap_up_statement determine_total_indentation indent_begin indent_body indent_end_statement final_indentation_check  get_surrounding_indentation indent_children_recursively check_for_blank_lines_at_beginning put_blank_lines_back_in_at_beginning add_surrounding_indentation_to_begin_statement post_indentation_check/;
 use LatexIndent::Tokens qw/token_check %tokens/;
 use LatexIndent::HiddenChildren qw/find_surrounding_indentation_for_children update_family_tree get_family_tree check_for_hidden_children/;
-use LatexIndent::AlignmentAtAmpersand qw/align_at_ampersand find_aligned_block/;
+use LatexIndent::AlignmentAtAmpersand qw/align_at_ampersand find_aligned_block double_back_slash_else/;
 use LatexIndent::DoubleBackSlash qw/dodge_double_backslash un_dodge_double_backslash/;
 
 # code blocks
 use LatexIndent::Verbatim qw/put_verbatim_back_in find_verbatim_environments find_noindent_block find_verbatim_commands  find_verbatim_special verbatim_common_tasks/;
-use LatexIndent::Environment qw/find_environments $environmentBasicRegExp/;
+use LatexIndent::Environment qw/find_environments $environmentBasicRegExp construct_environments_regexp/;
 use LatexIndent::IfElseFi qw/find_ifelsefi construct_ifelsefi_regexp $ifElseFiBasicRegExp/;
 use LatexIndent::Else qw/check_for_else_statement/;
-use LatexIndent::Arguments qw/get_arguments_regexp find_opt_mand_arguments get_numbered_arg_regexp construct_arguments_regexp/;
+use LatexIndent::Arguments qw/get_arguments_regexp find_opt_mand_arguments construct_arguments_regexp comma_else/;
 use LatexIndent::OptionalArgument qw/find_optional_arguments/;
 use LatexIndent::MandatoryArgument qw/find_mandatory_arguments get_mand_arg_reg_exp/;
 use LatexIndent::RoundBrackets qw/find_round_brackets/;
@@ -83,28 +84,34 @@
 
     $self->create_back_up_file;
     $self->token_check;
-    $self->construct_regular_expressions;
-    $self->find_noindent_block;
-    $self->find_verbatim_commands;
-    $self->find_aligned_block;
-    $self->remove_trailing_comments;
-    $self->find_verbatim_environments;
-    $self->find_verbatim_special;
-    $self->verbatim_modify_line_breaks if $is_m_switch_active; 
-    $self->text_wrap if ($is_m_switch_active and !${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{columns}>1);
-    $self->protect_blank_lines;
-    $self->remove_trailing_whitespace(when=>"before");
-    $self->find_file_contents_environments_and_preamble;
-    $self->dodge_double_backslash;
-    $self->remove_leading_space;
-    $self->process_body_of_text;
-    $self->remove_trailing_whitespace(when=>"after");
-    $self->condense_blank_lines;
-    $self->unprotect_blank_lines;
-    $self->un_dodge_double_backslash;
-    $self->put_verbatim_back_in (match=>"everything-except-commands");
-    $self->put_trailing_comments_back_in;
-    $self->put_verbatim_back_in (match=>"just-commands");
+    $self->make_replacements(when=>"before") if ($is_r_switch_active and !$is_rv_switch_active);
+    unless ($is_rr_switch_active){
+        $self->construct_regular_expressions;
+        $self->find_noindent_block;
+        $self->find_verbatim_commands;
+        $self->find_aligned_block;
+        $self->remove_trailing_comments;
+        $self->find_verbatim_environments;
+        $self->find_verbatim_special;
+        $self->verbatim_modify_line_breaks if $is_m_switch_active; 
+        $self->make_replacements(when=>"before") if $is_rv_switch_active;
+        $self->text_wrap if ($is_m_switch_active and !${$masterSettings{modifyLineBreaks}{textWrapOptions}}{perCodeBlockBasis} and ${$masterSettings{modifyLineBreaks}{textWrapOptions}}{columns}>1);
+        $self->protect_blank_lines;
+        $self->remove_trailing_whitespace(when=>"before");
+        $self->find_file_contents_environments_and_preamble;
+        $self->dodge_double_backslash;
+        $self->remove_leading_space;
+        $self->process_body_of_text;
+        $self->remove_trailing_whitespace(when=>"after");
+        $self->condense_blank_lines;
+        $self->unprotect_blank_lines;
+        $self->un_dodge_double_backslash;
+        $self->make_replacements(when=>"after") if $is_rv_switch_active;
+        $self->put_verbatim_back_in (match=>"everything-except-commands");
+        $self->put_trailing_comments_back_in;
+        $self->put_verbatim_back_in (match=>"just-commands");
+        $self->make_replacements(when=>"after") if ($is_r_switch_active and !$is_rv_switch_active);
+    }
     $self->output_indented_text;
     return
 }
@@ -112,6 +119,7 @@
 sub construct_regular_expressions{
     my $self = shift;
     $self->construct_trailing_comment_regexp;
+    $self->construct_environments_regexp;
     $self->construct_ifelsefi_regexp;
     $self->construct_list_of_items;
     $self->construct_special_begin;
@@ -335,7 +343,7 @@
     $self->adjust_replacement_text_line_breaks_at_end;
 
     # modify line breaks on body and end statements
-    $self->modify_line_breaks_body if $is_m_switch_active;
+    $self->modify_line_breaks_body if ($is_m_switch_active and defined ${$self}{BodyStartsOnOwnLine});
 
     # modify line breaks end statements
     $self->modify_line_breaks_end if $is_m_switch_active;
@@ -343,6 +351,8 @@
     # check the body for current children
     $self->check_for_hidden_children if ${$self}{body} =~ m/$tokens{beginOfToken}/;
 
+    # double back slash poly-switch check
+    $self->double_back_slash_else if ($is_m_switch_active and ${$self}{lookForAlignDelims});
     return;
 }
 

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Else.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -55,27 +55,32 @@
     while(${$self}{body} =~ m/$elseRegExp(\h*)($trailingCommentRegExp)?/){
         ${$self}{body} =~ s/$elseRegExp(\h*)($trailingCommentRegExp)?
                            /   
-                          # create a new IfElseFi object
+                          # create a new Else object
                           my $else = LatexIndent::Else->new(begin=>$1,
-                                                                  name=>${$self}{name},
-                                                                  storageNameAppend=>$input{storageNameAppend},
-                                                                  body=>$3,
-                                                                  end=>q(),
-                                                                  linebreaksAtEnd=>{
-                                                                    begin=>$2?1:0,
-                                                                    body=>0,
-                                                                    end=>0,
-                                                                  },
-                                                                  aliases=>{
-                                                                    # begin statements
-                                                                    BeginStartsOnOwnLine=>$input{ElseStartsOnOwnLine},
-                                                                    # end statements
-                                                                    BodyStartsOnOwnLine=>$input{ElseFinishesWithLineBreak},
-                                                                  },
-                                                                  modifyLineBreaksYamlName=>${$self}{modifyLineBreaksYamlName},
-                                                                  endImmediatelyFollowedByComment=>0,
-                                                                  horizontalTrailingSpace=>q(),
-                                                                );
+                                            name=>${$self}{name},
+                                            storageNameAppend=>$input{storageNameAppend},
+                                            body=>$3,
+                                            end=>q(),
+                                            linebreaksAtEnd=>{
+                                              begin=>$2?1:0,
+                                              body=>0,
+                                              end=>0,
+                                            },
+                                            aliases=>{
+                                              # begin statements
+                                              BeginStartsOnOwnLine=>$input{ElseStartsOnOwnLine},
+                                              # end statements
+                                              BodyStartsOnOwnLine=>$input{ElseFinishesWithLineBreak},
+                                            },
+                                            modifyLineBreaksYamlName=>${$self}{modifyLineBreaksYamlName},
+                                            endImmediatelyFollowedByComment=>0,
+                                            horizontalTrailingSpace=>q(),
+                                            # mandatory and optional arguments have a parent, which we need
+                                            # to detail for double back slash poly-switches 
+                                            # (see test-cases alignment command-align.tex, for example)
+                                            parent=>(${$self}{parent}?${$self}{parent}:"none"),
+                                          );
+
                           # log file output
                           $logger->trace("*$input{logName} found: ${$self}{name}")if $is_t_switch_active;
              

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Environment.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Environment.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Environment.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -28,35 +28,41 @@
 use Data::Dumper;
 use Exporter qw/import/;
 our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
-our @EXPORT_OK = qw/find_environments $environmentBasicRegExp/;
+our @EXPORT_OK = qw/find_environments $environmentBasicRegExp construct_environments_regexp/;
 our $environmentCounter;
 our $environmentBasicRegExp = qr/\\begin\{/;
+our $environmentRegExp;
 
 # store the regular expresssion for matching and replacing the \begin{}...\end{} statements
-our $environmentRegExp = qr/
-            (
-                \\begin\{
-                        (
-                         [a-zA-Z@\*0-9_\\]+ # lowercase|uppercase letters, @, *, numbers
-                        )                 # environment name captured into $2
-                       \}                 # \begin{<something>} statement
-                       \h*                # horizontal space
-                       (\R*)?             # possible line breaks (into $3)
-            )                             # begin statement captured into $1
-            (
-                (?:                       # cluster-only (), don't capture 
-                    (?!                   # don't include \begin in the body
-                        (?:\\begin)       # cluster-only (), don't capture
-                    ).                    # any character, but not \\begin
-                )*?                       # non-greedy
-                        (\R*)?            # possible line breaks (into $5)
-            )                             # environment body captured into $4
-            (
-                \\end\{\2\}               # \end{<something>} statement
-            )                             # captured into $6
-            (\h*)?                        # possibly followed by horizontal space
-            (\R)?                         # possibly followed by a line break 
-            /sx;
+sub construct_environments_regexp{
+  
+    # read from fine tuning
+    my  $environmentNameRegExp = qr/${${$masterSettings{fineTuning}}{environments}}{name}/;
+    $environmentRegExp = qr/
+                (
+                    \\begin\{
+                            (
+                             $environmentNameRegExp # lowercase|uppercase letters, @, *, numbers
+                            )                       # environment name captured into $2
+                           \}                       # \begin{<something>} statement
+                           \h*                      # horizontal space
+                           (\R*)?                   # possible line breaks (into $3)
+                )                                   # begin statement captured into $1
+                (
+                    (?:                             # cluster-only (), don't capture 
+                        (?!                         # don't include \begin in the body
+                            (?:\\begin)             # cluster-only (), don't capture
+                        ).                          # any character, but not \\begin
+                    )*?                             # non-greedy
+                            (\R*)?                  # possible line breaks (into $5)
+                )                                   # environment body captured into $4
+                (
+                    \\end\{\2\}                     # \end{<something>} statement
+                )                                   # captured into $6
+                (\h*)?                              # possibly followed by horizontal space
+                (\R)?                               # possibly followed by a line break 
+                /sx;
+}
 
 sub find_environments{
     my $self = shift;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/FileExtension.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -35,6 +35,9 @@
     # grab the filename
     my $fileName = ${$self}{fileName};
 
+    # see if an extension exists for the fileName
+    my ($name,$dir,$ext) = fileparse($fileName,qr/\..[^.]*$/);
+    
     # grab the file extension preferences
     my %fileExtensionPreference= %{$masterSettings{fileExtensionPreference}};
 
@@ -41,22 +44,14 @@
     # sort the file extensions by preference 
     my @fileExtensions = sort { $fileExtensionPreference{$a} <=> $fileExtensionPreference{$b} } keys(%fileExtensionPreference);
     
-    # get the base file name, allowing for different extensions (possibly no extension)
-    my ($name, $dir, $ext) = fileparse($fileName, @fileExtensions);
+    # store the base name
     ${$self}{baseName} = $name;
 
-    # check to make sure given file type is supported
-    if( -e $fileName  and !$ext ){
-        my $message = "The file $fileName exists , but the extension does not correspond to any given in fileExtensionPreference; consinder updating fileExtensionPreference.";
-        $logger->fatal("*$message");
-        die($message);
-    }
-
     # if no extension, search according to fileExtensionPreference
     if ($fileName ne "-"){
         if (!$ext) {
             $logger->info("*File extension work:");
-            $logger->info("latexindent called to act upon $fileName with a file extension;\nsearching for file with an extension in the following order (see fileExtensionPreference):");
+            $logger->info("latexindent called to act upon $fileName without a file extension;\nsearching for file with an extension in the following order (see fileExtensionPreference):");
             $logger->info(join("\n", at fileExtensions));
 
             my $fileFound = 0;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/GetYamlSettings.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -256,6 +256,23 @@
                                 }
                             }
                           }
+                      } elsif (ref($firstLevelValue) eq "ARRAY") {
+                            # update amalgamate in master settings
+                            if(ref(${$firstLevelValue}[0]) eq "HASH" and defined ${$firstLevelValue}[0]{amalgamate}){
+                               ${$masterSettings{$firstLevelKey}[0]}{amalgamate} = ${$firstLevelValue}[0]{amalgamate};
+                               shift @{$firstLevelValue} if ${$masterSettings{$firstLevelKey}[0]}{amalgamate};
+                            }
+
+                            # if amalgamate is set to 1, then append
+                            if(${$masterSettings{$firstLevelKey}[0]}{amalgamate}){
+                                # loop through the other settings
+                                foreach (@{$firstLevelValue}){
+                                    push (@{$masterSettings{$firstLevelKey}},$_);
+                                }
+                            } else {
+                                # otherwise overwrite
+                                $masterSettings{$firstLevelKey} = $firstLevelValue;
+                            }
                       } else {
                             $masterSettings{$firstLevelKey} = $firstLevelValue;
                       }
@@ -375,7 +392,7 @@
         # loop through each of the settings specified in the -y switch
         foreach(@yamlSettings){
             # split each value at semi-colon
-            my (@keysValues) = split(/(?<!\\):/,$_);
+            my (@keysValues) = split(/(?<!(?:\\|\[)):(?!\])/,$_);
 
             # $value will always be the last element
             my $value = $keysValues[-1];

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/IfElseFi.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,6 +17,7 @@
 use strict;
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
+use LatexIndent::GetYamlSettings qw/%masterSettings/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
 use LatexIndent::Switches qw/$is_m_switch_active $is_t_switch_active $is_tt_switch_active/;
 use LatexIndent::LogFile qw/$logger/;
@@ -33,10 +34,11 @@
 # note: we search for \else separately in an attempt to keep this regexp a little more managable
 
 sub construct_ifelsefi_regexp{
+    my $ifElseFiNameRegExp = qr/${${$masterSettings{fineTuning}}{ifElseFi}}{name}/;
     $ifElseFiRegExp = qr/
                 (
                     \\
-                        (@?if[a-zA-Z@]*?)
+                        ($ifElseFiNameRegExp)
                     \h*
                     (\R*)
                 )                           # begin statement, e.g \ifnum, \ifodd

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Indent.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Indent.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Indent.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -325,40 +325,57 @@
                 if(defined ${$child}{BeginStartsOnOwnLine}){
                     my $BeginStringLogFile = ${$child}{aliases}{BeginStartsOnOwnLine}||"BeginStartsOnOwnLine";
 
-                    # if the child ID is not the first character and BeginStartsOnOwnLine>=1 
-                    # then we will need to add a line break (==1), a comment (==2) or another blank line (==3)
-                    if(${$child}{BeginStartsOnOwnLine}>=1 and !$IDFirstNonWhiteSpaceCharacter){
-                        # by default, assume that no trailing comment token is needed
-                        my $trailingCharacterToken = q();
-                        if(${$child}{BeginStartsOnOwnLine}==2){
-                            $logger->trace("Removing space immediately before ${$child}{id}, in preparation for adding % ($BeginStringLogFile == 2)") if $is_t_switch_active;
-                            ${$self}{body} =~ s/\h*${$child}{idRegExp}/${$child}{id}/s;
-                            $logger->trace("Adding a % at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 2)") if $is_t_switch_active;
-                            $trailingCharacterToken = "%".$self->add_comment_symbol;
-                        } elsif (${$child}{BeginStartsOnOwnLine}==3){
-                            $logger->trace("Adding a blank line at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 3)") if $is_t_switch_active;
-                            $trailingCharacterToken = "\n".(${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:q());
-                        } else {
-                            $logger->trace("Adding a linebreak at the beginning of ${$child}{begin} (see $BeginStringLogFile)") if $is_t_switch_active;
-                        }
+                    # 
+                    # Blank line poly-switch notes (==4)
+                    #
+                    # when BeginStartsOnOwnLine=4 we adopt the following approach:
+                    #   temporarily change BeginStartsOnOwnLine to -1, make adjustments
+                    #   temporarily change BeginStartsOnOwnLine to 3, make adjustments
+                    #
+                    # we use an array, @polySwitchValues to facilitate this
+                    my @polySwitchValues = (${$child}{BeginStartsOnOwnLine}==4)?(-1,3):(${$child}{BeginStartsOnOwnLine});
 
-                        # the trailing comment/linebreak magic
-                        ${$child}{begin} = "$trailingCharacterToken\n".${$child}{begin};
-                        $child->add_surrounding_indentation_to_begin_statement;
+                    foreach(@polySwitchValues){
+                        # if BeginStartsOnOwnLine is 4, then we hack 
+                        #       $IDFirstNonWhiteSpaceCharacter 
+                        # to be 0 on the second time through (poly-switch set to 3)
+                        $IDFirstNonWhiteSpaceCharacter = 0 if (${$child}{BeginStartsOnOwnLine}==4 and $_==3);
 
-                        # remove surrounding indentation ahead of %
-                        ${$child}{begin} =~ s/^(\h*)%/%/ if(${$child}{BeginStartsOnOwnLine}==2);
-                    } elsif (${$child}{BeginStartsOnOwnLine}==-1 and $IDFirstNonWhiteSpaceCharacter){
-                        # finally, if BeginStartsOnOwnLine == -1 then we might need to *remove* a blank line(s)
-                        # important to check we don't move the begin statement next to a blank-line-token
-                        my $blankLineToken = $tokens{blanklines};
-                        if(${$self}{body} !~ m/$blankLineToken\R*\h*${$child}{idRegExp}/s){
-                            $logger->trace("Removing linebreak before ${$child}{begin} (see $BeginStringLogFile in ${$child}{modifyLineBreaksYamlName} YAML)") if $is_t_switch_active;
-                            ${$self}{body} =~ s/(\h*)(?:\R*|\h*)+${$child}{idRegExp}/$1${$child}{id}/s;
-                        } else {
-                            $logger->trace("Not removing linebreak ahead of ${$child}{begin}, as blank-line-token present (see preserveBlankLines)") if $is_t_switch_active;
+                        # if the child ID is not the first character and BeginStartsOnOwnLine>=1 
+                        # then we will need to add a line break (==1), a comment (==2) or another blank line (==3)
+                        if($_>=1 and !$IDFirstNonWhiteSpaceCharacter){
+                            # by default, assume that no trailing comment token is needed
+                            my $trailingCharacterToken = q();
+                            if($_==2){
+                                $logger->trace("Removing space immediately before ${$child}{id}, in preparation for adding % ($BeginStringLogFile == 2)") if $is_t_switch_active;
+                                ${$self}{body} =~ s/\h*${$child}{idRegExp}/${$child}{id}/s;
+                                $logger->trace("Adding a % at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 2)") if $is_t_switch_active;
+                                $trailingCharacterToken = "%".$self->add_comment_symbol;
+                            } elsif ($_==3){
+                                $logger->trace("Adding a blank line at the end of the line that ${$child}{begin} is on, then a linebreak ($BeginStringLogFile == 3)") if $is_t_switch_active;
+                                $trailingCharacterToken = "\n".(${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:q());
+                            } else {
+                                $logger->trace("Adding a linebreak at the beginning of ${$child}{begin} (see $BeginStringLogFile)") if $is_t_switch_active;
+                            }
+
+                            # the trailing comment/linebreak magic
+                            ${$child}{begin} = "$trailingCharacterToken\n".${$child}{begin};
+                            $child->add_surrounding_indentation_to_begin_statement;
+
+                            # remove surrounding indentation ahead of %
+                            ${$child}{begin} =~ s/^(\h*)%/%/ if($_==2);
+                        } elsif ($_==-1 and $IDFirstNonWhiteSpaceCharacter){
+                            # finally, if BeginStartsOnOwnLine == -1 then we might need to *remove* a blank line(s)
+                            # important to check we don't move the begin statement next to a blank-line-token
+                            my $blankLineToken = $tokens{blanklines};
+                            if(${$self}{body} !~ m/$blankLineToken\R*\h*${$child}{idRegExp}/s){
+                                $logger->trace("Removing linebreak before ${$child}{begin} (see $BeginStringLogFile in ${$child}{modifyLineBreaksYamlName} YAML)") if $is_t_switch_active;
+                                ${$self}{body} =~ s/(\h*)(?:\R*|\h*)+${$child}{idRegExp}/$1${$child}{id}/s;
+                            } else {
+                                $logger->trace("Not removing linebreak ahead of ${$child}{begin}, as blank-line-token present (see preserveBlankLines)") if $is_t_switch_active;
+                            }
                         }
-                    }
+                     }
                 }
 
                 $logger->trace(Dumper(\%{$child})) if($is_tt_switch_active);

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/KeyEqualsValuesBraces.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/KeyEqualsValuesBraces.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/KeyEqualsValuesBraces.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,6 +17,7 @@
 use strict;
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
+use LatexIndent::GetYamlSettings qw/%masterSettings/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
 use LatexIndent::Switches qw/$is_m_switch_active $is_t_switch_active $is_tt_switch_active/;
 use LatexIndent::LogFile qw/$logger/;
@@ -37,21 +38,19 @@
     # blank line token
     my $blankLineToken = $tokens{blanklines};
 
+    # read from fine tuning
+    my  $keyEqualsValuesBracesBrackets = qr/${${$masterSettings{fineTuning}}{keyEqualsValuesBracesBrackets}}{name}/;
+    my  $keyEqualsValuesBracesBracketsFollow = qr/${${$masterSettings{fineTuning}}{keyEqualsValuesBracesBrackets}}{follow}/;
+
     # store the regular expresssion for matching and replacing 
     $key_equals_values_bracesRegExp = qr/
                   (
-                    (?:
-                       (?:(?<!\\)\{)
-                           |
-                           ,
-                           |
-                       (?:(?<!\\)\[)
-                     )
+                     (?:$keyEqualsValuesBracesBracketsFollow)
                      (?:\h|\R|$blankLineToken|$trailingCommentRegExp)*
                   )                                                     # $1 pre-key bit: could be { OR , OR [                                 
                   (\\)?                                                 # $2 possible backslash
                   (
-                   [a-zA-Z@\*0-9_\/.\h\{\}:\#-]+?                               # lowercase|uppercase letters, @, *, numbers, forward slash, dots
+                   $keyEqualsValuesBracesBrackets?                      # lowercase|uppercase letters, @, *, numbers, forward slash, dots
                   )                                                     # $3 name
                   (
                     (?:\h|\R|$blankLineToken|$trailingCommentRegExp)*

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/LogFile.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -80,6 +80,15 @@
       -m, --modifylinebreaks
           modify linebreaks before, during, and at the end of code blocks; 
           trailing comments and blank lines can also be added using this feature
+      -r,--replacement
+          replacement mode, allows you to replace strings and regular expressions
+          verbatim blocks not respected
+      -rv,--replacementrespectverb
+          replacement mode, allows you to replace strings and regular expressions
+          while respecting verbatim code blocks
+      -rr,--onlyreplacement
+          *only* replacement mode, no indentation
+          verbatim blocks not respected
 ENDQUOTE
     ;
     exit(2);
@@ -182,6 +191,8 @@
     $logger->info("-m|--modifylinebreaks: modify line breaks") if($switches{modifyLineBreaks});
     $logger->info("-g|--logfile: logfile name") if($switches{logFileName});
     $logger->info("-c|--cruft: cruft directory") if($switches{cruftDirectory});
+    $logger->info("-r|--replacement: replacement mode") if($switches{replacement});
+    $logger->info("-rr|--onlyreplacement: *only* replacement mode, no indentation") if($switches{onlyreplacement});
 
     # check if overwrite and outputfile are active similtaneously
     if($switches{overwrite} and $switches{outputToFile}){

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/MandatoryArgument.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/MandatoryArgument.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/MandatoryArgument.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -18,7 +18,7 @@
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
-use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active/;
+use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active $is_m_switch_active /;
 use LatexIndent::LogFile qw/$logger/;
 use LatexIndent::IfElseFi qw/$ifElseFiBasicRegExp/;
 use LatexIndent::Special qw/$specialBeginBasicRegExp/;
@@ -128,6 +128,8 @@
     # search for special begin/end
     $self->find_special if ${$self}{body} =~ m/$specialBeginBasicRegExp/s;
 
+    # comma poly-switch check
+    $self->comma_else if $is_m_switch_active;
 }
 
 1;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/ModifyLineBreaks.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -28,27 +28,34 @@
 our @EXPORT_OK = qw/modify_line_breaks_body modify_line_breaks_end adjust_line_breaks_end_parent remove_line_breaks_begin text_wrap remove_paragraph_line_breaks construct_paragraph_reg_exp text_wrap_remove_paragraph_line_breaks verbatim_modify_line_breaks/;
 our $paragraphRegExp = q();
 
-
 sub modify_line_breaks_body{
     my $self = shift;
+    # 
+    # Blank line poly-switch notes (==4)
+    #
+    # when BodyStartsOnOwnLine=4 we adopt the following approach:
+    #   temporarily change BodyStartsOnOwnLine to -1, make adjustments
+    #   temporarily change BodyStartsOnOwnLine to 3, make adjustments
+    # switch BodyStartsOnOwnLine back to 4
     
     # add a line break after \begin{statement} if appropriate
-    if(defined ${$self}{BodyStartsOnOwnLine}){
+    my @polySwitchValues = (${$self}{BodyStartsOnOwnLine}==4)?(-1,3):(${$self}{BodyStartsOnOwnLine});
+    foreach(@polySwitchValues){
       my $BodyStringLogFile = ${$self}{aliases}{BodyStartsOnOwnLine}||"BodyStartsOnOwnLine";
-      if(${$self}{BodyStartsOnOwnLine}>=1 and !${$self}{linebreaksAtEnd}{begin}){
+      if($_>=1 and !${$self}{linebreaksAtEnd}{begin}){
           # if the <begin> statement doesn't finish with a line break, 
           # then we have different actions based upon the value of BodyStartsOnOwnLine:
           #     BodyStartsOnOwnLine == 1 just add a new line
           #     BodyStartsOnOwnLine == 2 add a comment, and then new line
           #     BodyStartsOnOwnLine == 3 add a blank line, and then new line
-          if(${$self}{BodyStartsOnOwnLine}==1){
+          if($_==1){
             # modify the begin statement
-            $logger->trace("Adding a linebreak at the end of begin, ${$self}{begin} (see $BodyStringLogFile)") if $is_t_switch_active;
+            $logger->trace("Adding a linebreak at the end of begin statement ${$self}{begin} (see $BodyStringLogFile)") if $is_t_switch_active;
             ${$self}{begin} .= "\n";       
             ${$self}{linebreaksAtEnd}{begin} = 1;
             $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") if $is_t_switch_active;
             ${$self}{body} =~ s/^\h*//;       
-          } elsif(${$self}{BodyStartsOnOwnLine}==2){
+          } elsif($_==2){
             # by default, assume that no trailing comment token is needed
             my $trailingCommentToken = q();
             if(${$self}{body} !~ m/^\h*$trailingCommentRegExp/s){
@@ -63,7 +70,7 @@
             } else {
                 $logger->trace("Even though $BodyStringLogFile == 2, ${$self}{begin} already finishes with a %, so not adding another.") if $is_t_switch_active;
             }
-          } elsif (${$self}{BodyStartsOnOwnLine}==3){
+          } elsif ($_==3){
             my $trailingCharacterToken = q();
             $logger->trace("Adding a blank line at the end of begin ${$self}{begin} followed by a linebreak ($BodyStringLogFile == 3)") if $is_t_switch_active;
             ${$self}{begin} =~ s/\h*$//;       
@@ -72,12 +79,12 @@
             $logger->trace("Removing leading space from body of ${$self}{name} (see $BodyStringLogFile)") if $is_t_switch_active;
             ${$self}{body} =~ s/^\h*//;       
           } 
-       } elsif (${$self}{BodyStartsOnOwnLine}==-1 and ${$self}{linebreaksAtEnd}{begin}){
+       } elsif ($_==-1 and ${$self}{linebreaksAtEnd}{begin}){
           # remove line break *after* begin, if appropriate
           $self->remove_line_breaks_begin;
        }
     }
-  }
+}
 
 sub remove_line_breaks_begin{
     my $self = shift;
@@ -90,86 +97,111 @@
 sub modify_line_breaks_end{
     my $self = shift;
 
-    # possibly modify line break *before* \end{statement}
-    if(defined ${$self}{EndStartsOnOwnLine}){
-          my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine}||"EndStartsOnOwnLine";
-          if(${$self}{EndStartsOnOwnLine}>=1 and !${$self}{linebreaksAtEnd}{body}){
-              # if the <body> statement doesn't finish with a line break, 
-              # then we have different actions based upon the value of EndStartsOnOwnLine:
-              #     EndStartsOnOwnLine == 1 just add a new line
-              #     EndStartsOnOwnLine == 2 add a comment, and then new line
-              #     EndStartsOnOwnLine == 3 add a blank line, and then new line
-              $logger->trace("Adding a linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active;
+    # 
+    # Blank line poly-switch notes (==4)
+    #
+    # when EndStartsOnOwnLine=4 we adopt the following approach:
+    #   temporarily change EndStartsOnOwnLine to -1, make adjustments
+    #   temporarily change EndStartsOnOwnLine to 3, make adjustments
+    # switch EndStartsOnOwnLine back to 4
+    #
+    
+    my @polySwitchValues =(defined ${$self}{EndStartsOnOwnLine} and ${$self}{EndStartsOnOwnLine}==4) ?(-1,3):(${$self}{EndStartsOnOwnLine});
+    foreach(@polySwitchValues){
+        # possibly modify line break *before* \end{statement}
+        if(defined ${$self}{EndStartsOnOwnLine}){
+              my $EndStringLogFile = ${$self}{aliases}{EndStartsOnOwnLine}||"EndStartsOnOwnLine";
+              if($_>=1 and !${$self}{linebreaksAtEnd}{body}){
+                  # if the <body> statement doesn't finish with a line break, 
+                  # then we have different actions based upon the value of EndStartsOnOwnLine:
+                  #     EndStartsOnOwnLine == 1 just add a new line
+                  #     EndStartsOnOwnLine == 2 add a comment, and then new line
+                  #     EndStartsOnOwnLine == 3 add a blank line, and then new line
+                  $logger->trace("Adding a linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active;
 
-              # by default, assume that no trailing character token is needed
-              my $trailingCharacterToken = q();
-              if(${$self}{EndStartsOnOwnLine}==2){
-                $logger->trace("Adding a % immediately after body of ${$self}{name} ($EndStringLogFile==2)") if $is_t_switch_active;
-                $trailingCharacterToken = "%".$self->add_comment_symbol;
-                ${$self}{body} =~ s/\h*$//s;
-              } elsif (${$self}{EndStartsOnOwnLine}==3) {
-                $logger->trace("Adding a blank line immediately after body of ${$self}{name} ($EndStringLogFile==3)") if $is_t_switch_active;
-                $trailingCharacterToken = "\n".(${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:q());
-                ${$self}{body} =~ s/\h*$//s;
-              }
-              
-              # modified end statement
-              if(${$self}{body} =~ m/^\h*$/s and ${$self}{BodyStartsOnOwnLine} >=1 ){
-                ${$self}{linebreaksAtEnd}{body} = 0;
-              } else {
-                ${$self}{body} .= "$trailingCharacterToken\n";
-                ${$self}{linebreaksAtEnd}{body} = 1;
-              }
-          } elsif (${$self}{EndStartsOnOwnLine}==-1 and ${$self}{linebreaksAtEnd}{body}){
-              # remove line break *after* body, if appropriate
+                  # by default, assume that no trailing character token is needed
+                  my $trailingCharacterToken = q();
+                  if($_==2){
+                    $logger->trace("Adding a % immediately after body of ${$self}{name} ($EndStringLogFile==2)") if $is_t_switch_active;
+                    $trailingCharacterToken = "%".$self->add_comment_symbol;
+                    ${$self}{body} =~ s/\h*$//s;
+                  } elsif ($_==3) {
+                    $logger->trace("Adding a blank line immediately after body of ${$self}{name} ($EndStringLogFile==3)") if $is_t_switch_active;
+                    $trailingCharacterToken = "\n".(${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:q());
+                    ${$self}{body} =~ s/\h*$//s;
+                  }
+                  
+                  # modified end statement
+                  if(${$self}{body} =~ m/^\h*$/s and (defined ${$self}{BodyStartsOnOwnLine}) and ${$self}{BodyStartsOnOwnLine} >=1 ){
+                    ${$self}{linebreaksAtEnd}{body} = 0;
+                  } else {
+                    ${$self}{body} .= "$trailingCharacterToken\n";
+                    ${$self}{linebreaksAtEnd}{body} = 1;
+                  }
+              } elsif ($_==-1 and ${$self}{linebreaksAtEnd}{body}){
+                  # remove line break *after* body, if appropriate
 
-              # check to see that body does *not* finish with blank-line-token, 
-              # if so, then don't remove that final line break
-              if(${$self}{body} !~ m/$tokens{blanklines}$/s){
-                $logger->trace("Removing linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active;
-                ${$self}{body} =~ s/\R*$//sx;
-                ${$self}{linebreaksAtEnd}{body} = 0;
-              } else {
-                $logger->trace("Blank line token found at end of body (${$self}{name}), see preserveBlankLines, not removing line break before ${$self}{end}") if $is_t_switch_active;
+                  # check to see that body does *not* finish with blank-line-token, 
+                  # if so, then don't remove that final line break
+                  if(${$self}{body} !~ m/$tokens{blanklines}$/s){
+                    $logger->trace("Removing linebreak at the end of body (see $EndStringLogFile)") if $is_t_switch_active;
+                    ${$self}{body} =~ s/\R*$//sx;
+                    ${$self}{linebreaksAtEnd}{body} = 0;
+                  } else {
+                    $logger->trace("Blank line token found at end of body (${$self}{name}), see preserveBlankLines, not removing line break before ${$self}{end}") if $is_t_switch_active;
+                  }
               }
-          }
+        }
     }
 
-    # possibly modify line break *after* \end{statement}
-    if(defined ${$self}{EndFinishesWithLineBreak}
-       and ${$self}{EndFinishesWithLineBreak}>=1 
-       and !${$self}{linebreaksAtEnd}{end}){
-              # if the <end> statement doesn't finish with a line break, 
-              # then we have different actions based upon the value of EndFinishesWithLineBreak:
-              #     EndFinishesWithLineBreak == 1 just add a new line
-              #     EndFinishesWithLineBreak == 2 add a comment, and then new line
-              #     EndFinishesWithLineBreak == 3 add a blank line, and then new line
-              my $EndStringLogFile = ${$self}{aliases}{EndFinishesWithLineBreak}||"EndFinishesWithLineBreak";
-              if(${$self}{EndFinishesWithLineBreak}==1){
-                $logger->trace("Adding a linebreak at the end of ${$self}{end} ($EndStringLogFile==1)") if $is_t_switch_active;
-                ${$self}{linebreaksAtEnd}{end} = 1;
+    # 
+    # Blank line poly-switch notes (==4)
+    #
+    # when EndFinishesWithLineBreak=4 we adopt the following approach:
+    #   temporarily change EndFinishesWithLineBreak to -1, make adjustments
+    #   temporarily change EndFinishesWithLineBreak to 3, make adjustments
+    # switch EndFinishesWithLineBreak back to 4
+    #
+    @polySwitchValues =(defined ${$self}{EndFinishesWithLineBreak} and ${$self}{EndFinishesWithLineBreak}==4) ?(-1,3):(${$self}{EndFinishesWithLineBreak});
+    foreach(@polySwitchValues){
+        last if !(defined $_);
+        ${$self}{linebreaksAtEnd}{end} = 0 if($_==3 and (defined ${$self}{EndFinishesWithLineBreak} and ${$self}{EndFinishesWithLineBreak}==4));
 
-                # modified end statement
-                ${$self}{replacementText} .= "\n";
-              } elsif(${$self}{EndFinishesWithLineBreak}==2){
-                if(${$self}{endImmediatelyFollowedByComment}){
-                  # no need to add a % if one already exists
-                  $logger->trace("Even though $EndStringLogFile == 2, ${$self}{end} is immediately followed by a %, so not adding another; not adding line break.") if $is_t_switch_active;
-                } else {
-                  # otherwise, create a trailing comment, and tack it on 
-                  $logger->trace("Adding a % immediately after, ${$self}{end} ($EndStringLogFile==2)") if $is_t_switch_active;
-                  my $trailingCommentToken = "%".$self->add_comment_symbol;
-                  ${$self}{end} =~ s/\h*$//s;
-                  ${$self}{replacementText} .= "$trailingCommentToken\n";
-                  ${$self}{linebreaksAtEnd}{end} = 1;
-                }
-              } elsif(${$self}{EndFinishesWithLineBreak}==3){
-                $logger->trace("Adding a blank line at the end of ${$self}{end} ($EndStringLogFile==3)") if $is_t_switch_active;
-                ${$self}{linebreaksAtEnd}{end} = 1;
+        # possibly modify line break *after* \end{statement}
+        if(defined $_ and $_>=1 
+           and !${$self}{linebreaksAtEnd}{end}){
+                  # if the <end> statement doesn't finish with a line break, 
+                  # then we have different actions based upon the value of EndFinishesWithLineBreak:
+                  #     EndFinishesWithLineBreak == 1 just add a new line
+                  #     EndFinishesWithLineBreak == 2 add a comment, and then new line
+                  #     EndFinishesWithLineBreak == 3 add a blank line, and then new line
+                  my $EndStringLogFile = ${$self}{aliases}{EndFinishesWithLineBreak}||"EndFinishesWithLineBreak";
+                  if($_==1){
+                    $logger->trace("Adding a linebreak at the end of ${$self}{end} ($EndStringLogFile==1)") if $is_t_switch_active;
+                    ${$self}{linebreaksAtEnd}{end} = 1;
 
-                # modified end statement
-                ${$self}{replacementText} .= (${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:"\n")."\n";
-              } 
+                    # modified end statement
+                    ${$self}{replacementText} .= "\n";
+                  } elsif($_==2){
+                    if(${$self}{endImmediatelyFollowedByComment}){
+                      # no need to add a % if one already exists
+                      $logger->trace("Even though $EndStringLogFile == 2, ${$self}{end} is immediately followed by a %, so not adding another; not adding line break.") if $is_t_switch_active;
+                    } else {
+                      # otherwise, create a trailing comment, and tack it on 
+                      $logger->trace("Adding a % immediately after, ${$self}{end} ($EndStringLogFile==2)") if $is_t_switch_active;
+                      my $trailingCommentToken = "%".$self->add_comment_symbol;
+                      ${$self}{end} =~ s/\h*$//s;
+                      ${$self}{replacementText} .= "$trailingCommentToken\n";
+                      ${$self}{linebreaksAtEnd}{end} = 1;
+                    }
+                  } elsif($_==3){
+                    $logger->trace("Adding a blank line at the end of ${$self}{end} ($EndStringLogFile==3)") if $is_t_switch_active;
+                    ${$self}{linebreaksAtEnd}{end} = 1;
+
+                    # modified end statement
+                    ${$self}{replacementText} .= (${$masterSettings{modifyLineBreaks}}{preserveBlankLines}?$tokens{blanklines}:"\n")."\n";
+                  } 
+        }
     }
 
 }

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,6 +17,7 @@
 use strict;
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
+use LatexIndent::GetYamlSettings qw/%masterSettings/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
 use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active/;
 use LatexIndent::LogFile qw/$logger/;
@@ -33,18 +34,22 @@
     # grab the arguments regexp
     my $optAndMandRegExp = $self->get_arguments_regexp;
 
+    # read from fine tuning
+    my $NamedGroupingBracesBracketsRegExp = qr/${${$masterSettings{fineTuning}}{NamedGroupingBracesBrackets}}{name}/;
+    my $NamedGroupingFollowRegExp = qr/${${$masterSettings{fineTuning}}{NamedGroupingBracesBrackets}}{follow}/;
+
     # store the regular expresssion for matching and replacing 
     $grouping_braces_regexp = qr/
                   (
-                     \h|\R|\{|\[|\$|\)|\(
+                     $NamedGroupingFollowRegExp
                   )
                   (
-                   [0-9\.a-zA-Z@\*><]+?  # lowercase|uppercase letters, @, *, numbers, forward slash, dots
-                  )                    # $2 name
-                  (\h*)                # $3 h-space
-                  (\R*)                # $4 linebreaks
-                  ($optAndMandRegExp)  # $5 mand|opt arguments (at least one)
-                  (\R)?                # $8 linebreak 
+                   $NamedGroupingBracesBracketsRegExp  # lowercase|uppercase letters, @, *, numbers, forward slash, dots
+                  )                                    # $2 name
+                  (\h*)                                # $3 h-space
+                  (\R*)                                # $4 linebreaks
+                  ($optAndMandRegExp)                  # $5 mand|opt arguments (at least one)
+                  (\R)?                                # $8 linebreak 
                 /sx;
 
     # something {value} grouping braces with trailing comment

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/OptionalArgument.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/OptionalArgument.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/OptionalArgument.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -18,7 +18,7 @@
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
-use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active/;
+use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active $is_m_switch_active /;
 use LatexIndent::LogFile qw/$logger/;
 use LatexIndent::IfElseFi qw/$ifElseFiBasicRegExp/;
 use LatexIndent::Special qw/$specialBeginBasicRegExp/;
@@ -113,6 +113,8 @@
     # search for special begin/end
     $self->find_special if ${$self}{body} =~ m/$specialBeginBasicRegExp/s;
 
+    # comma poly-switch check
+    $self->comma_else if $is_m_switch_active;
 }
 
 1;

Added: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Replacement.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Replacement.pm	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Replacement.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -0,0 +1,89 @@
+package LatexIndent::Replacement;
+#	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
+#	(at your option) any later version.
+#
+#	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
+#	GNU General Public License for more details.
+#
+#	See http://www.gnu.org/licenses/.
+#
+#	Chris Hughes, 2017
+#
+#	For all communication, please visit: https://github.com/cmhughes/latexindent.pl
+use strict;
+use warnings;
+use LatexIndent::Tokens qw/%tokens/;
+use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
+use LatexIndent::GetYamlSettings qw/%masterSettings/;
+use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active $is_rr_switch_active/;
+use LatexIndent::LogFile qw/$logger/;
+use Data::Dumper;
+use Exporter qw/import/;
+our @ISA = "LatexIndent::Document"; # class inheritance, Programming Perl, pg 321
+our @EXPORT_OK = qw/make_replacements/;
+
+sub make_replacements{
+    my $self = shift;
+    my %input = @_;
+    if ($is_t_switch_active and !$is_rr_switch_active){
+        $logger->trace("*Replacement mode *$input{when}* indentation: -r") ;
+    } elsif ($is_t_switch_active and $is_rr_switch_active) {
+      $logger->trace("*Replacement mode, -rr switch is active") if $is_t_switch_active ;
+    }
+
+	my @replacements = @{$masterSettings{replacements}};
+
+	foreach ( @replacements ){
+        next if !(${$_}{this} or ${$_}{substitution});
+        
+        # default value of "lookForThis" is 1
+        ${$_}{lookForThis} = 1 if( !(defined ${$_}{lookForThis})); 
+
+        # move on if this one shouldn't be looked for
+        next if(!${$_}{lookForThis});
+
+        # default value of "when" is before
+        ${$_}{when} = "before" if( !(defined ${$_}{when}) or $is_rr_switch_active); 
+        
+        # update to the logging file
+        if($is_t_switch_active and (${$_}{when} eq $input{when})){
+            $logger->trace("-");
+            $logger->trace("this: ${$_}{this}") if(${$_}{this});
+            $logger->trace("that: ${$_}{that}") if(${$_}{that});
+            $logger->trace("substitution: ${$_}{substitution}") if(${$_}{substitution});
+            $logger->trace("when: ${$_}{when}");
+        }
+
+        # perform the substitutions
+        if(${$_}{when} eq $input{when}){
+            $logger->warn("*You have specified both 'this' and 'substitution'; the 'substitution' field will be ignored") if(${$_}{this} and ${$_}{substitution});
+            if(${$_}{this}){
+                # *string* replacement
+                # *string* replacement
+                # *string* replacement
+	            my $this = qq{${$_}{this}};
+	            my $that = (defined ${$_}{that}) ? qq{${$_}{that}} : q();
+	            my $index_match = index(${$self}{body}, $this);
+	            while ( $index_match != -1 ) {
+	                  substr (${$self}{body}, $index_match, length($this), $that ); 
+	            	  $index_match = index(${$self}{body}, $this);
+	            }
+           } else {
+                # *regex* replacement
+                # *regex* replacement
+                # *regex* replacement
+                
+                # https://stackoverflow.com/questions/12423337/how-to-pass-a-replacing-regex-as-a-command-line-argument-to-a-perl-script
+                my $body = ${$self}{body}; 
+                eval("\$body =~ ${$_}{substitution}");
+                ${$self}{body} = $body ; 
+           }
+        }
+    }
+}
+
+1;


Property changes on: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Replacement.pm
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Sentence.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Sentence.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Sentence.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -129,7 +129,7 @@
                 $sentencesEndWithEachPart = qr/\./;
             } elsif($sentencesEndWithEachPart eq "betterFullStop"){
                 $logger->trace("sentence ENDS with *better* full stop (see oneSentencePerLine:sentencesEndWith:betterFullStop") if $is_t_switch_active;
-                $sentencesEndWithEachPart = qr/(?:\.\)(?!\h*[a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|~|\,|[0-9]))/;
+                $sentencesEndWithEachPart = qr/${${$masterSettings{fineTuning}}{modifyLineBreaks}}{betterFullStop}/;
             } elsif ($sentencesEndWithEachPart eq "exclamationMark"){
                 $logger->trace("sentence ENDS with exclamation mark (see oneSentencePerLine:sentencesEndWith:exclamationMark)") if $is_t_switch_active;
                 $sentencesEndWithEachPart = qr/!/;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Switches.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Switches.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Switches.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,11 +17,14 @@
 use strict;
 use warnings;
 use Exporter qw/import/;
-our @EXPORT_OK = qw/%switches storeSwitches $is_m_switch_active $is_t_switch_active $is_tt_switch_active/;
+our @EXPORT_OK = qw/%switches storeSwitches $is_m_switch_active $is_t_switch_active $is_tt_switch_active $is_r_switch_active $is_rr_switch_active $is_rv_switch_active/;
 our %switches;
 our $is_m_switch_active;
 our $is_t_switch_active;
 our $is_tt_switch_active;
+our $is_r_switch_active;
+our $is_rr_switch_active;
+our $is_rv_switch_active;
 
 sub storeSwitches{
     my $self = shift;
@@ -32,6 +35,10 @@
     $is_t_switch_active = defined $switches{trace}?$switches{trace}: 0;
     $is_tt_switch_active = defined $switches{ttrace}?$switches{ttrace}: 0;
     $is_t_switch_active = $is_tt_switch_active ? $is_tt_switch_active : $is_t_switch_active;
+    $is_r_switch_active = defined $switches{replacement}?$switches{replacement}: 0;
+    $is_rr_switch_active = defined $switches{onlyreplacement}?$switches{onlyreplacement}: 0;
+    $is_rv_switch_active = defined $switches{replacementRespectVerb}?$switches{replacementRespectVerb}: 0;
+    $is_r_switch_active = ($is_rr_switch_active|$is_rv_switch_active) ? ($is_rr_switch_active|$is_rv_switch_active) : $is_r_switch_active;
     delete ${$self}{switches};
   }
 1;

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -17,6 +17,7 @@
 use strict;
 use warnings;
 use LatexIndent::Tokens qw/%tokens/;
+use LatexIndent::GetYamlSettings qw/%masterSettings/;
 use LatexIndent::TrailingComments qw/$trailingCommentRegExp/;
 use LatexIndent::Switches qw/$is_t_switch_active $is_tt_switch_active/;
 use LatexIndent::LogFile qw/$logger/;
@@ -36,8 +37,9 @@
     # blank line token
     my $blankLineToken = $tokens{blanklines};
 
-    # for example #1 #2, etc
-    my $numberedArgRegExp = $self->get_numbered_arg_regexp;
+    # arguments Before, by default, includes beamer special and numbered arguments, for example #1 #2, etc
+    my $argumentsBefore = qr/${${$masterSettings{fineTuning}}{arguments}}{before}/;
+    my $UnNamedGroupingFollowRegExp = qr/${${$masterSettings{fineTuning}}{UnNamedGroupingBracesBrackets}}{follow}/;
 
     # store the regular expresssion for matching and replacing 
     $un_named_grouping_braces_RegExp = qr/
@@ -48,18 +50,18 @@
                         |
                         (?:(?<!\\)\}) 
                       )
-                      (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$numberedArgRegExp)*  # 0 or more h-space, blanklines, trailing comments
+                      (?:\h|\R|$blankLineToken|$trailingCommentRegExp|$argumentsBefore)*  # 0 or more h-space, blanklines, trailing comments
                   )
                   # END of NOT
                   (
                      (?:
-                        \{|\[|,|&|\)|\(|\$ # starting with { OR [ OR , OR & OR ) OR ( OR $
+                        $UnNamedGroupingFollowRegExp # starting with { OR [ OR , OR & OR ) OR ( OR $
                      )
                      \h*
-                  )                     # $1 into beginning bit
-                  (\R*)                 # $2 linebreaksAtEnd of begin
-                  ($optAndMandRegExp)   # $3 mand|opt arguments (at least one) stored into body
-                  (\R)?                 # $6 linebreak 
+                  )                                  # $1 into beginning bit
+                  (\R*)                              # $2 linebreaksAtEnd of begin
+                  ($optAndMandRegExp)                # $3 mand|opt arguments (at least one) stored into body
+                  (\R)?                              # $6 linebreak 
                 /sx;
 
     $un_named_grouping_braces_RegExp_trailing_comment = qr/$un_named_grouping_braces_RegExp(\h*)((?:$trailingCommentRegExp\h*)*)?/; 

Modified: trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/LatexIndent/Version.pm	2019-07-13 21:40:12 UTC (rev 51635)
@@ -19,6 +19,6 @@
 use Exporter qw/import/;
 our @EXPORT_OK = qw/$versionNumber $versionDate/;
 
-our $versionNumber = '3.6';
-our $versionDate = '2019-05-05';
+our $versionNumber = '3.7';
+our $versionDate = '2019-07-13';
 1

Modified: trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml
===================================================================
--- trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml	2019-07-13 21:39:36 UTC (rev 51634)
+++ trunk/Master/texmf-dist/scripts/latexindent/defaultSettings.yaml	2019-07-13 21:40:12 UTC (rev 51635)
@@ -1,4 +1,4 @@
-# defaultSettings.yaml for latexindent.pl, version 3.6, 2019-05-05
+# defaultSettings.yaml for latexindent.pl, version 3.7, 2019-07-13
 #                      a script that aims to
 #                      beautify .tex, .sty, .cls files
 #
@@ -21,15 +21,18 @@
 # For all communication, please visit: https://github.com/cmhughes/latexindent.pl
 
 
-# You're welcome to change anything you like in here, but 
+# 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
-# when you update your distribution. Please see the manual
-# for details of how to setup your own settings files.
+# when you update your tex distribution. Please see the manual linked from:
 #
-# Please read the manual first to understand what each switch does.
+#       https://github.com/cmhughes/latexindent.pl
+#
+# 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 without a file extension, 
+# latexindent can be called to act on a file without using the file's extension, 
 # e.g, simply
 #       latexindent myfile
 # in which case the choice of file extension is chosen
@@ -41,7 +44,7 @@
     .cls: 3
     .bib: 4
 
-# default file extension of backup file (if original is overwritten with -w switch)
+# default file extension of backup file (if -w switch is active)
 # for example, if your .tex file is called
 #       myfile.tex
 # and you specify the backupExtension as BACKUP.bak then your 
@@ -49,24 +52,27 @@
 #       myfileBACKUP.bak
 backupExtension: .bak
 
-# only one backup per file; if onlyOneBackUp is 0 then, as a safety measure, 
-# the number on the extension increments by 1 each time:
-#     myfile.bak0, myfile.bak1, myfile.bak2
+# only one backup per file: 
+#   - if onlyOneBackUp is 0 then, as a safety measure, 
+#     the number on the extension increments by 1 each time:
 #
-# if you set onlyOnebackUp to 1, then the backup file will
-# be overwritten each time (not recommended until you trust the script)
+#           myfile.bak0, myfile.bak1, myfile.bak2
+#   - if you set onlyOnebackUp to 1, then the backup file will
+#     be overwritten each time (not recommended until you trust the script)
 onlyOneBackUp: 0
 
-# some users may only want a set number of backup files, 
-# say at most 3; in which case, they can change this switch.
+# some users may want a finite number of backup files, 
+# say at most 3; in which case, they can change this maxNumberOfBackUps.
+#
 # If maxNumberOfBackUps is set to 0 (or less) then infinitely 
 # many backups are possible, unless onlyOneBackUp is switched on
 maxNumberOfBackUps: 0
 
-# some users may wish to cycle through back up files, for example, 
-# with maxNumberOfBackUps: 4, they may wish to delete the oldest
-# back up file, and keep only the most recent.
+# some users may wish to cycle through back up files. 
 #
+# for example, with maxNumberOfBackUps: 4, they may 
+# wish to delete the oldest back up file, and keep only the most recent.
+#
 #    copy myfile.bak1 to myfile.bak0
 #    copy myfile.bak2 to myfile.bak1
 #    copy myfile.bak3 to myfile.bak2
@@ -102,8 +108,7 @@
 
 #  no indent blocks (not necessarily verbatim 
 #  environments) which are marked as %\begin{noindent}
-#  or anything else that the user puts in this hash
-#  table
+#  or anything else that you detail in the following
 noIndentBlock:
     noindent: 1
     cmhtest: 1
@@ -136,7 +141,7 @@
 #    postfoothook=\end{mdframed},
 preambleCommandsBeforeEnvironments: 0
 
-# Default value of indentation
+# default value of indentation
 defaultIndent: "\t"
 
 # name of code blocks that should have their body aligned at ampersand delimiters
@@ -185,7 +190,7 @@
     description: 1
     list: 1
 
-# if you want to use other names for your items (such as, for example, part)
+# if you want to use other names for your items (for example, \part)
 # then populate them here; note that you can trick latexindent.pl
 # into indenting all kinds of commands (within environments specified in 
 # indentAfterItems) using this technique.
@@ -193,7 +198,7 @@
     item: 1
     myitem: 1
 
-# specialBeginEnd is mainly mathmode focus, although
+# specialBeginEnd is, by default, mathmode focus, although
 # there's no restrictions
 specialBeginEnd:
     displayMath:
@@ -248,10 +253,10 @@
 maximumIndentation: -1
 
 # if you don't want to have additional indentation 
-# in an environment put it in this hash table; note that
-# environments in this field will inherit 
+# in a code block, then add it to noAdditionalIndent; note that
+# code blocks in this field will inherit 
 # the *current* level of indentation they just won't
-# get any *additional*.
+# get any *additional* indentation
 noAdditionalIndent:
     myexample: 1
     mydefinition: 1
@@ -264,8 +269,8 @@
     document: 1
     frame: 0
 
-# if you have indent rules for particular environments
-# or commands, put them in here; for example, you might just want 
+# if you have indent rules for particular code blocks
+# then you can populate them in indentRules; for example, you might just want 
 # to use a space " " or maybe a double tab "\t\t"
 indentRules:
    myenvironment: "\t\t"
@@ -325,72 +330,114 @@
 
 # modifyLineBreaks will only be searched if the -m 
 # switch is active
-#    BeginStartsOnOwnLine: 1
-#       if a begin statement is not already on its own line,
-#       then, with -m active, it will be moved to its own line.
 #
+# poly-switch examples:
+#
+#    BeginStartsOnOwnLine: 
+#       modify line breaks before a begin statement
+#
+#       when set to -1, e.g 
+#               some text some text 
+#               \begin{myenvironment}
+#           will be changed to
+#               some text some text \begin{myenvironment}
+#       when set to 0, the switch is ignored
 #       when set to 1, e.g 
 #               some text some text \begin{myenvironment}
 #           will be changed to
 #               some text some text 
 #               \begin{myenvironment}
-#       when set to -1, e.g 
-#               some text some text 
+#       when set to 2, e.g 
+#               some text some text \begin{myenvironment}
+#           will be changed to
+#               some text some text%
 #               \begin{myenvironment}
+#       when set to 3, e.g 
+#               some text some text \begin{myenvironment}
 #           will be changed to
-#               some text some text \begin{myenvironment}
-#       when set to 0, the switch is ignored
+#               some text some text
 #
-#    BodyStartsOnOwnLine: 1
-#       if body does not already start on its own line, then with 
-#       -m active, it will be moved to its own line.
+#               \begin{myenvironment}
 #
+#    BodyStartsOnOwnLine: 
+#       modify line breaks before the beginning of the body
+#
+#       when set to -1, e.g 
+#               \begin{myenv}
+#                   body text body text
+#           will be changed to
+#               \begin{myenv}body text body text
+#       when set to 0, the switch is ignored
 #       when set to 1, e.g 
 #               \begin{myenv}body text body text
 #           will be changed to
 #               \begin{myenv}
 #                   body text body text
-#       when set to -1, e.g 
+#       when set to 2, e.g 
+#               \begin{myenv}body text body text
+#           will be changed to
+#               \begin{myenv}%
+#                   body text body text
+#       when set to 3, e.g 
+#               \begin{myenv}body text body text
+#           will be changed to
 #               \begin{myenv}
+#
 #                   body text body text
+#
+#    EndStartsOnOwnLine: 
+#       modify line breaks before the end statement
+#
+#       when set to -1, e.g 
+#               some text some text 
+#               \end{myenvironment}
 #           will be changed to
-#               \begin{myenv}body text body text
+#               some text some text \end{myenvironment}
 #       when set to 0, the switch is ignored
-#
-#    EndStartsOnOwnLine: 1
-#       if an end statement is not already on its own line,
-#       then, with -m active, it will be moved to its own line.
-#
 #       when set to 1, e.g 
 #               some text some text \end{myenvironment}
 #           will be changed to
 #               some text some text 
 #               \end{myenvironment}
+#       when set to 2, e.g 
+#               some text some text \end{myenvironment}
+#           will be changed to
+#               some text some text%
+#               \end{myenvironment}
+#       when set to 3, e.g 
+#               some text some text \end{myenvironment}
+#           will be changed to
+#               some text some text
+#
+#               \end{myenvironment}
+#
+#    EndFinishesWithLineBreak: 
+#       modify line breaks after the end statement
+#       
 #       when set to -1, e.g 
+#               \end{myenvironment}
 #               some text some text 
-#               \end{myenvironment}
 #           will be changed to
-#               some text some text \end{myenvironment}
+#                   \end{myenvironment}some text some text 
 #       when set to 0, the switch is ignored
-#
-#    EndFinishesWithLineBreak: 1
-#       this switch adjusts line breaks immmediately 
-#       after an end statement (with -m active)
-#       
 #       when set to 1, e.g 
 #               \end{myenvironment}some text some text 
 #           will be changed to
 #                   \end{myenvironment}
 #                   some text some text 
-#       when set to -1, e.g 
-#               \end{myenvironment}
-#               some text some text 
+#       when set to 2, e.g 
+#               \end{myenvironment}some text some text 
 #           will be changed to
-#                   \end{myenvironment}some text some text 
-#       when set to 0, the switch is ignored
+#                   \end{myenvironment}%
+#                   some text some text 
+#       when set to 3, e.g 
+#               \end{myenvironment}some text some text 
+#           will be changed to
+#                   \end{myenvironment}
 #
-# Naturally, you can specify settings for individual environments,
-# commands, headings, etc, populate as you wish.
+#                   some text some text 
+#
+# you can specify settings on a per-name basis
 modifyLineBreaks:
     preserveBlankLines: 1
     condenseMultipleBlankLinesInto: 1
@@ -519,3 +566,38 @@
     verbatim:
         VerbatimBeginStartsOnOwnLine: 0
         VerbatimEndFinishesWithLineBreak: 0
+
+# replacements, only active when either -r or -rr switches are active
+replacements:
+  - 
+    amalgamate: 1
+  -
+    this: 'latexindent.pl'
+    that: 'pl.latexindent'
+    lookForThis: 1
+    when: before
+
+# fineTuning allows you to tweak the internal pattern matching that 
+# is central to latexindent.pl
+fineTuning:
+    environments:
+      name: '[a-zA-Z@\*0-9_\\]+' 
+    ifElseFi:
+      name: '@?if[a-zA-Z@]*?' 
+    commands:
+      name: '[+a-zA-Z@\*0-9_\:]+?'
+    keyEqualsValuesBracesBrackets:
+      name: '[a-zA-Z@\*0-9_\/.\h\{\}:\#-]+?'
+      follow: '(?:(?<!\\)\{)|,|(?:(?<!\\)\[)'
+    NamedGroupingBracesBrackets:
+      name: '[0-9\.a-zA-Z@\*><]+?'
+      follow: '\h|\R|\{|\[|\$|\)|\('
+    UnNamedGroupingBracesBrackets: 
+      follow: '\{|\[|,|&|\)|\(|\$'
+    arguments:
+      before: '(?:#\d\h*;?,?\/?)+|\<.*?\>'
+      between: '_|\^|\*'
+    modifyLineBreaks:
+      betterFullStop: '(?:\.\)(?!\h*[a-z]))|(?:(?<!(?:(?:e\.g)|(?:i\.e)|(?:etc))))\.(?!(?:[a-z]|[A-Z]|\-|~|\,|[0-9]))'
+      doubleBackSlash: '\\\\(?:\h*\[\h*\d+\h*[a-zA-Z]+\h*\])?'
+      comma: ','

Modified: trunk/Master/texmf-dist/scripts/latexindent/latexindent.pl
===================================================================
(Binary files differ)



More information about the tex-live-commits mailing list