% arara: pdflatex: { files: [latexindent]} \subsection{Combining removeParagraphLineBreaks and textWrapOptions}\label{subsec:removeparagraphlinebreaks:and:textwrap} The% \announce{2018-08-13}{combine text wrap and remove paragraph line breaks} text wrapping routine (\vref{subsec:textwrapping}) and remove paragraph line breaks routine (\vref{subsec:removeparagraphlinebreaks}) can be combined. We motivate this feature with the code given in \cref{lst:textwrap7}. \cmhlistingsfromfile{demonstrations/textwrap7.tex}{\texttt{textwrap7.tex}}{lst:textwrap7} Applying the text wrap routine from \vref{subsec:textwrapping} with, for example, \vref{lst:textwrap3-yaml} gives the output in \cref{lst:textwrap7-mod3}. \cmhlistingsfromfile{demonstrations/textwrap7-mod3.tex}{\texttt{textwrap7.tex} using \cref{lst:textwrap3-yaml}}{lst:textwrap7-mod3} The text wrapping routine has behaved as expected, but it may be desired to remove paragraph line breaks \emph{before} performing the text wrapping routine. The desired behaviour can be achieved by employing the \texttt{beforeTextWrap} switch. Explicitly, using the settings in \cref{lst:textwrap12-yaml} and running the command \index{switches!-l demonstration} \index{switches!-m demonstration} \index{switches!-o demonstration} \begin{commandshell} latexindent.pl -m textwrap7.tex -l=textwrap12.yaml -o=+-mod12 \end{commandshell} we obtain the output in \cref{lst:textwrap7-mod12}. \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/textwrap7-mod12.tex}{\texttt{textwrap7-mod12.tex}}{lst:textwrap7-mod12} \cmhlistingsfromfile{demonstrations/textwrap12.yaml}[MLB-TCB]{\texttt{textwrap12.yaml}}{lst:textwrap12-yaml} \end{cmhtcbraster} In \cref{lst:textwrap7-mod12} the paragraph line breaks have first been removed from \cref{lst:textwrap7}, and then the text wrapping routine has been applied. It is envisaged that variants of \cref{lst:textwrap12-yaml} will be among the most useful settings for these two features. \subsubsection{text wrapping beforeFindingChildCodeBlocks}\label{subsubsec:text-wrap-remove-para-bfccb} \index{text wrap!recommended starting point} I% \announce{2021-07-31}{textWrapOptions new feature: beforeFindingChildCodeBlocks} think it likely that most users will wish to employ the \texttt{beforeFindingChildCodeBlocks} option for the text wrap routine. To motivate its use, we begin with the file in \cref{lst:textwrap-bfccb}. \cmhlistingsfromfile{demonstrations/textwrap-bfccb.tex}{\texttt{textwrap-bfccb.tex}}{lst:textwrap-bfccb} Using the settings in \cref{lst:textwrap12-yaml} and running \begin{commandshell} latexindent.pl -m textwrap-bfccb.tex -l=textwrap12.yaml -o=+-mod12 \end{commandshell} gives the output in \cref{lst:textwrap-bfccb-mod12} \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod12.tex}{\texttt{textwrap-bfccb-mod12.tex}}{lst:textwrap-bfccb-mod12} Note that we have added a `ruler' to \cref{lst:textwrap-bfccb-mod12} to assist with measuring. The output in \cref{lst:textwrap-bfccb-mod12} is not ideal, but it is \emph{expected}. The reasoning is as follows: \begin{itemize} \item \texttt{latexindent.pl} first of all searches for code blocks (see \vref{tab:code-blocks}); \item it replaces each code block with a unique identifying string; \item with the settings of \cref{lst:textwrap12-yaml} in place, it performs the paragraph line break removal, and then the text wrapping routine first of all on the \texttt{text} command, and then on the surrounding text; \item the surrounding text does not know that \texttt{text} is a command. \end{itemize} We can instruct \texttt{latexindent.pl} to perform text wrapping \emph{before searching for child code blocks} by using the \texttt{beforeFindingChildCodeBlocks} field. We save the \emph{quick-start} settings from \cref{lst:textwrap-qs-yaml} into \cref{lst:textwrap13-yaml} and change the value of \texttt{columns} for demonstration. Upon running the command \begin{commandshell} latexindent.pl -m textwrap-bfccb.tex -l=textwrap13.yaml -o=+-mod13 \end{commandshell} we receive the output in \cref{lst:textwrap-bfccb-mod13}. \cmhlistingsfromfile{demonstrations/textwrap13.yaml}[MLB-TCB,width=\linewidth]{\texttt{textwrap13.yaml} (tweaked quick start)}{lst:textwrap13-yaml} \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod13.tex}{\texttt{textwrap-bfccb-mod13.tex}}{lst:textwrap-bfccb-mod13} This output is different from \cref{lst:textwrap-bfccb-mod12}, but is still not ideal, as the \texttt{test} command has indented its mandatory argument. We can employ \texttt{noAdditionalIndent} from \vref{sec:noadd-indent-rules} in \cref{lst:textwrap14-yaml} and run the command \begin{commandshell} latexindent.pl -m textwrap-bfccb.tex -l=textwrap14.yaml -o=+-mod14 \end{commandshell} to receive the output in \cref{lst:textwrap-bfccb-mod14}. \begin{widepage} \begin{cmhtcbraster} \cmhlistingsfromfile{demonstrations/textwrap-bfccb-mod14.tex}{\texttt{textwrap-bfccb-mod14.tex}}{lst:textwrap-bfccb-mod14} \cmhlistingsfromfile{demonstrations/textwrap14.yaml}[MLB-TCB]{\texttt{textwrap14.yaml}}{lst:textwrap14-yaml} \end{cmhtcbraster} \end{widepage} For reference, let's say that we had started from \cref{lst:textwrap12-yaml}, which instructs \texttt{latexindent.pl} to apply the text-wrapping and paragraph-line-break-removal routines to \emph{all} code blocks. In order to achieve the output in \cref{lst:textwrap-bfccb-mod14}, then we would need to employ an exception, which we demonstrate in \cref{lst:textwrap15-yaml}. \cmhlistingsfromfile{demonstrations/textwrap15.yaml}[MLB-TCB]{\texttt{textwrap15.yaml}}{lst:textwrap15-yaml}