latexindent.pl

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

Downloads
462
Stars
833
Committers
38

Bot releases are hidden (Show)

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

This pull request implements the following:

  1. new feature new double-back-slash and comma poly-switches: https://github.com/cmhughes/latexindent.pl/issues/106
  2. new feature fine tuning: https://github.com/cmhughes/latexindent.pl/issues/113
  3. new feature new poly-switch value for blank lines: https://github.com/cmhughes/latexindent.pl/issues/146
  4. update better file extension handling: https://github.com/cmhughes/latexindent.pl/issues/154
  5. new feature replacement mode switches: https://github.com/cmhughes/latexindent.pl/issues/155

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.

New features

  1. summary of new poly-switches

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.

double back slash poly-switch

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.

comma poly-switch

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]
  1. fine tuning

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: ','
  1. blank-line poly-switch

If you start with

section1.tex

\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

  1. file extension

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.

  1. replacement switches

Starting with the .tex file:

JHenneberg.tex

\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

JH.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

output

\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

latexindent.pl -

Published by cmhughes over 4 years ago

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

latexindent.pl -

Published by cmhughes over 4 years ago

new features:

documentation updates:

bug fixes:

latexindent.pl -

Published by cmhughes over 4 years ago

latexindent.pl -

Published by cmhughes over 4 years ago

A minor release to fix the AlignAtAmpersand.pm bug reported at https://github.com/cmhughes/latexindent.pl/issues/201

latexindent.pl -

Published by cmhughes over 4 years ago