Perl script to add indentation (leading horizontal space) to LaTeX files. It can modify line breaks before, during and after code blocks; it can perform text wrapping and paragraph line break removal. It can also perform string-based and regex-based substitutions/replacements. The script is customisable through its YAML interface.
GPL-3.0 License
Bot releases are visible (Hide)
This pull request implements the following:
This also resolves https://github.com/cmhughes/latexindent.pl/issues/148, https://github.com/cmhughes/latexindent.pl/issues/160, https://github.com/cmhughes/latexindent.pl/issues/166 and a bug reported at https://github.com/cmhughes/latexindent.pl/issues/167.
From https://github.com/cmhughes/latexindent.pl/issues/106, we have new the following new poly-switches
DBSStartsOnOwnLine:
DBSFinishesWithLineBreak
CommaStartsOnOwnLine
CommaFinishesWithLineBreak
I was particularly happy to be able to employ the Else
object for each of these, because of which the overhead was manageable.
For example, starting with
\begin{pmatrix}
1 & 2 \\[2pt] 3 & 4 \\ [ 3 ex] 5&6\\[
\end{pmatrix}
and the YAML:
modifyLineBreaks:
environments:
DBSFinishesWithLineBreak: 1
and running
latexindent.pl -m pmatrix3.tex -l DBS3.yaml
gives
\begin{pmatrix}
1 & 2 \\[2pt]
3 & 4 \\ [ 3 ex]
5 & 6 \\[
4 pt
7 & 8
\end{pmatrix}
The example above is part of the documentation.
Starting with
\mycommand{ 1, 2, 3, 4, 5}[6, 7, 8, 9]
and running
latexindent.pl -m mycommand.tex -y="modifyLineBreaks:optionalArguments:CommaFinishesWithLineBreak:1,modifyLineBreaks:mandatoryArguments:CommaFinishesWithLineBreak:1"
gives
\mycommand{ 1,
2,
3,
4,
5}[6,
7,
8,
9]
From https://github.com/cmhughes/latexindent.pl/issues/113 we have:
# 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: ','
If you start with
\section{Introduction}
A sentence
and the YAML
:
tmp.yaml
modifyLineBreaks:
mandatoryArguments:
RCuBFinishesWithLineBreak: 4
and run
latexindent.pl -m section1.tex -l=tmp.yaml
then you receive
\section{Introduction}
A sentence
From https://github.com/cmhughes/latexindent.pl/issues/146 we have a new poly-swtich value
latexindent.pl can now be called on any file, regardless of if the extesion is within fileExtensionPrefrerences. If no extension is given, then fileExtensionPreferences must still be consulted.
Starting with the .tex file:
\begin{equation}
\ell
_{j}(x):= \prod
_{0 \leq m \leq k; \quad m \neq j}\frac{x - x_m}{x_j - x_m}= \frac
{x - x_0}{x_j - x_0}\cdots \frac
{x -
x_{j - 1}}{x_j -
x_{j - 1}}\frac
{x -
x_{j + 1}}{x_j -
x_{j + 1}}\cdots \frac
{x - x_k}{x_j - x_k}
\end{equation}
\begin{equation}
W =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & z_i & 0 & 1 & 0 & 0 \\ -z_i & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1
\end{bmatrix}
\end{equation}
\begin{itemize*}
\item dünne Platten, kleine Verformungen \item dünne Platten, große Verformungen \item dicke Platten
\end{itemize*}
and the following YAML
indentAfterItems:
itemize*: 1
modifyLineBreaks:
environments:
DBSFinishesWithLineBreak: 1
items:
ItemStartsOnOwnLine: 1
removeParagraphLineBreaks:
environments:
equation: 1
replacements:
-
substitution: s/\h*\R\h*_/_/sg
when: after
-
substitution: s/\h*_/_/sg
when: after
-
substitution: s/([a-zA-Z:\}])\h*(=|-)\h*/$1 $2 /sg
when: after
and running
latexindent.pl -m -r JHenneberg.tex -l=JH.yaml
gives the following
\begin{equation}
\ell_{j}(x): = \prod_{0 \leq m \leq k; \quad m \neq j}\frac{x - x_m}{x_j - x_m} = \frac {x - x_0}{x_j - x_0}\cdots \frac {x - x_{j - 1}}{x_j - x_{j - 1}}\frac {x - x_{j + 1}}{x_j - x_{j + 1}}\cdots \frac {x - x_k}{x_j - x_k}
\end{equation}
\begin{equation}
W =
\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 & 0 & 0 \\
0 & z_i & 0 & 1 & 0 & 0 \\
-z_i & 0 & 0 & 0 & 1 & 0 \\
0 & 0 & 0 & 0 & 0 & 1
\end{bmatrix}
\end{equation}
\begin{itemize*}
\item dünne Platten, kleine Verformungen
\item dünne Platten, große Verformungen
\item dicke Platten
\end{itemize*}
Pull request reference: https://github.com/cmhughes/latexindent.pl/pull/169
This implements a small upgrade to the text wrap routine to allow an option not to break words when text wrapping. Full details are given at https://github.com/cmhughes/latexindent.pl/pull/173
new features:
alignFinalDoubleBackSlash
for align-at-ampersand routine, https://github.com/cmhughes/latexindent.pl/issues/179
dontMeasure
for align-at-ampersand routine, https://github.com/cmhughes/latexindent.pl/issues/182
delimiterRegEx
for align-at-ampersand-routine, https://github.com/cmhughes/latexindent.pl/issues/187
documentation updates:
-c
switch, https://github.com/cmhughes/latexindent.pl/issues/180
STDIN
, https://github.com/cmhughes/latexindent.pl/issues/189
bug fixes:
A minor release to fix the AlignAtAmpersand.pm bug reported at https://github.com/cmhughes/latexindent.pl/issues/201