% arara: pdflatex: { files: [latexindent]}
\section{The --lines switch}\label{sec:line-switch}
 \texttt{latexindent.pl}
 \announce{2021-09-16}{line switch demonstration} can
 operate on a \emph{selection} of lines of the file using the \texttt{--lines} or
 \texttt{-n} switch.

 \index{switches!-lines demonstration}

 The basic syntax is \texttt{--lines MIN-MAX}, so for example
 \begin{commandshell}
latexindent.pl --lines 3-7 myfile.tex
latexindent.pl -n 3-7 myfile.tex
\end{commandshell}
 will only operate upon lines 3 to 7 in \texttt{myfile.tex}. All of the other lines will
 \emph{not} be operated upon by \texttt{latexindent.pl}.

 The options for the \texttt{lines} switch are:
 \begin{itemize}
	 \item line range, as in \texttt{--lines 3-7}
	 \item single line, as in \texttt{--lines 5}
	 \item multiple line ranges separated by commas, as in \texttt{--lines 3-5,8-10}
	 \item negated line ranges, as in \texttt{--lines !3-5} which translates to \texttt{--lines
	       1-2,6-N}, where N is the number of lines in your file.
 \end{itemize}

 We demonstrate this feature, and the available variations in what follows. We will use
 the file in \cref{lst:myfile}.

 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile.tex}[tex-TCB]{\texttt{myfile.tex}}{lst:myfile}

 \begin{example}
	 We demonstrate the basic usage using the command
	 \begin{commandshell}
latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
\end{commandshell}
	 which instructs \texttt{latexindent.pl} to only operate on lines 3 to 7; the output is
	 given in \cref{lst:myfile-mod1}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod1.tex}[tex-TCB]{\texttt{myfile-mod1.tex}}{lst:myfile-mod1}

	 The following two calls to \texttt{latexindent.pl} are equivalent
	 \begin{commandshell}
latexindent.pl --lines 3-7 myfile.tex -o=+-mod1
latexindent.pl --lines 7-3 myfile.tex -o=+-mod1
\end{commandshell}
	 as \texttt{latexindent.pl} performs a check to put the lowest number first.
 \end{example}

 \begin{example}
	 You can call the \texttt{lines} switch with only \emph{one number} and in which case only
	 that line will be operated upon. For example
	 \begin{commandshell}
latexindent.pl --lines 5 myfile.tex -o=+-mod2
\end{commandshell}
	 instructs \texttt{latexindent.pl} to only operate on line 5; the output is given in
	 \cref{lst:myfile-mod2}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod2.tex}[tex-TCB]{\texttt{myfile-mod2.tex}}{lst:myfile-mod2}

	 The following two calls are equivalent:
	 \begin{commandshell}
latexindent.pl --lines 5 myfile.tex
latexindent.pl --lines 5-5 myfile.tex
\end{commandshell}
 \end{example}

 \begin{example}
	 If you specify a value outside of the line range of the file then \texttt{latexindent.pl}
	 will ignore the \texttt{lines} argument, detail as such in the log file, and proceed to
	 operate on the entire file.

	 For example, in the following call
	 \begin{commandshell}
latexindent.pl --lines 11-13 myfile.tex
  \end{commandshell}
	 \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because \cref{lst:myfile} only has 12 lines.

	 Similarly, in the call
	 \begin{commandshell}
latexindent.pl --lines -1-3 myfile.tex
  \end{commandshell}
	 \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the entire file} because we assume that negatively numbered
	 lines in a file do not exist.
 \end{example}

 \begin{example}
	 You can specify \emph{multiple line ranges} as in the following
	 \begin{commandshell}
latexindent.pl --lines 3-5,8-10 myfile.tex -o=+-mod3
\end{commandshell}
	 which instructs \texttt{latexindent.pl} to operate upon lines 3 to 5 and lines 8 to 10;
	 the output is given in \cref{lst:myfile-mod3}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod3.tex}[tex-TCB]{\texttt{myfile-mod3.tex}}{lst:myfile-mod3}

	 The following calls to \texttt{latexindent.pl} are all equivalent
	 \begin{commandshell}
latexindent.pl --lines 3-5,8-10 myfile.tex
latexindent.pl --lines 8-10,3-5 myfile.tex
latexindent.pl --lines 10-8,3-5 myfile.tex
latexindent.pl --lines 10-8,5-3 myfile.tex
\end{commandshell}
	 as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
	 within each line range, it puts the lowest number first.
 \end{example}

 \begin{example}
	 There's no limit to the number of line ranges that you can specify, they just need to be
	 separated by commas. For example
	 \begin{commandshell}
latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex -o=+-mod4
\end{commandshell}
	 has four line ranges: lines 1 to 2, lines 4 to 5, lines 9 to 10 and line 12. The output
	 is given in \cref{lst:myfile-mod4}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod4.tex}[tex-TCB]{\texttt{myfile-mod4.tex}}{lst:myfile-mod4}

	 As previously, the ordering does not matter, and the following calls to
	 \texttt{latexindent.pl} are all equivalent
	 \begin{commandshell}
latexindent.pl --lines 1-2,4-5,9-10,12 myfile.tex
latexindent.pl --lines 2-1,4-5,9-10,12 myfile.tex
latexindent.pl --lines 4-5,1-2,9-10,12 myfile.tex
latexindent.pl --lines 12,4-5,1-2,9-10 myfile.tex
\end{commandshell}
	 as \texttt{latexindent.pl} performs a check to put the lowest line ranges first, and
	 within each line range, it puts the lowest number first.
 \end{example}

 \begin{example}
	 \index{switches!-lines demonstration, negation}
	 You can specify \emph{negated line ranges} by using \texttt{!} as in
	 \begin{commandshell}
latexindent.pl --lines !5-7 myfile.tex -o=+-mod5
\end{commandshell}
	 which instructs \texttt{latexindent.pl} to operate upon all of the lines \emph{except}
	 lines 5 to 7.

	 In other words, \texttt{latexindent.pl} \emph{will} operate on lines 1 to 4, and 8 to 12,
	 so the following two calls are equivalent:
	 \begin{commandshell}
latexindent.pl --lines !5-7 myfile.tex 
latexindent.pl --lines 1-4,8-12 myfile.tex 
\end{commandshell}
	 The output is given in \cref{lst:myfile-mod5}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod5.tex}[tex-TCB]{\texttt{myfile-mod5.tex}}{lst:myfile-mod5}

 \end{example}

 \begin{example}
	 \index{switches!-lines demonstration, negation}
	 You can specify \emph{multiple negated line ranges} such as
	 \begin{commandshell}
latexindent.pl --lines !5-7,!9-10 myfile.tex -o=+-mod6
   \end{commandshell}
	 which is equivalent to:
	 \begin{commandshell}
latexindent.pl --lines 1-4,8,11-12 myfile.tex -o=+-mod6
   \end{commandshell}
	 The output is given in \cref{lst:myfile-mod6}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile-mod6.tex}[tex-TCB]{\texttt{myfile-mod6.tex}}{lst:myfile-mod6}
 \end{example}

 \begin{example}
	 If you specify a line range with anything other than an integer, then
	 \texttt{latexindent.pl} will ignore the \texttt{lines} argument, and \emph{operate on the
	 entire file}.

	 Sample calls that result in the \texttt{lines} argument being ignored include the
	 following:
	 \begin{commandshell}
latexindent.pl --lines 1-x myfile.tex 
latexindent.pl --lines !y-3 myfile.tex 
     \end{commandshell}
 \end{example}

 \begin{example}
	 We can, of course, use the \texttt{lines} switch in combination with other switches.

	 For example, let's use with the file in \cref{lst:myfile1}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1.tex}[tex-TCB]{\texttt{myfile1.tex}}{lst:myfile1}

	 We can demonstrate interaction with the \texttt{-m} switch (see
	 \vref{sec:modifylinebreaks}); in particular, if we use \vref{lst:mlb2},
	 \vref{lst:env-mlb7} and \vref{lst:env-mlb8} and run
	 \begin{widepage}
		 \begin{commandshell}
latexindent.pl --lines 6 myfile1.tex -o=+-mod1 -m -l env-mlb2,env-mlb7,env-mlb8 -o=+-mod1
     \end{commandshell}
	 \end{widepage}
	 then we receive the output in \cref{lst:myfile1-mod1}.

	 \cmhlistingsfromfile[style=lineNumbersTeX]{demonstrations/myfile1-mod1.tex}[tex-TCB]{\texttt{myfile1-mod1.tex}}{lst:myfile1-mod1}
 \end{example}
