#
# latexindent.pl, version 3.24.1, 2024-05-12
#
# defaultSettings.yaml, the default settings for latexindent.pl
#
# a script that aims to beautify .tex, .sty, .cls files
#
# (or latexindent.exe if you're on Windows)
#
#---------------------------------------------------------------------------------------
# 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
#
#---------------------------------------------------------------------------------------
# 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 tex distribution. Please see the manual linked from:
#
#       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 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
# according to the choices made in fileExtensionPreference
# Other file extensions can be added.
fileExtensionPreference:
  .tex: 1
  .sty: 2
  .cls: 3
  .bib: 4

# 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
# backup file will be
#       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
#   - 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 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.
#
#    copy myfile.bak1 to myfile.bak0
#    copy myfile.bak2 to myfile.bak1
#    copy myfile.bak3 to myfile.bak2
#    copy myfile.bak4 to myfile.bak3
#
# the back up will be written to myfile.bak4
cycleThroughBackUps: 0

# preferences for information displayed in the log file
logFilePreferences:
  showEveryYamlRead: 1
  showAmalgamatedSettings: 0
  showDecorationStartCodeBlockTrace: 0
  showDecorationFinishCodeBlockTrace: 0
  endLogFileWith: '--------------'
  showGitHubInfoFooter: 1
  Dumper:
    Terse: 1
    Indent: 1
    Useqq: 1
    Deparse: 1
    Quotekeys: 0
    Sortkeys: 1
    Pair: " => "

# verbatim environments specified
# in this field will not be changed at all!
verbatimEnvironments:
  verbatim: 1
  lstlisting: 1
  minted: 1

# verbatim commands such as \verb! body !, \lstinline$something else$
verbatimCommands:
  verb: 1
  lstinline: 1

# no indent blocks (not necessarily verbatim
# environments) which are marked as %\begin{noindent}
# or anything else that you detail in the following
noIndentBlock:
  noindent: 1
  cmhtest: 1

# \begin{document} and \end{document} are treated differently
# by latexindent within filecontents environments
fileContentsEnvironments:
  filecontents: 1
  filecontents*: 1

# indent preamble
indentPreamble: 0

# assume no preamble in cls, sty, by default
lookForPreamble:
  .tex: 1
  .sty: 0
  .cls: 0
  .bib: 0
  STDIN: 1

# some preambles can contain \begin and \end statements
# that are not in their 'standard environment block', for example,
# consider the following key = values:
#    preheadhook={\begin{mdframed}[style=myframedstyle]},
#    postfoothook=\end{mdframed},
preambleCommandsBeforeEnvironments: 0

# default value of indentation
defaultIndent: "\t"

# remove trailing whitespace from all lines
removeTrailingWhitespace:
  beforeProcessing: 0
  afterProcessing: 1

# name of code blocks that should have their body aligned at ampersand delimiters
lookForAlignDelims:
  tabular:
    delims: 1
    alignDoubleBackSlash: 1
    spacesBeforeDoubleBackSlash: 1
    multiColumnGrouping: 0
    alignRowsWithoutMaxDelims: 1
    spacesBeforeAmpersand: 1
    spacesAfterAmpersand: 1
    justification: left
    alignFinalDoubleBackSlash: 0
    dontMeasure: 0
    delimiterRegEx: (?<!\\)(&)
    delimiterJustification: left
    lookForChildCodeBlocks: 1
    alignContentAfterDoubleBackSlash: 0
    spacesAfterDoubleBackSlash: 1
  tabularx:
    delims: 1
  longtable: 1
  tabu: 1
  array: 1
  matrix: 1
  listabla: 1
  # amsmath
  align: 1
  align*: 1
  alignat: 1
  alignat*: 1
  aligned: 1
  alignedat: 1
  bmatrix: 1
  Bmatrix: 1
  cases: 1
  flalign: 1
  flalign*: 1
  pmatrix: 1
  split: 1
  vmatrix: 1
  Vmatrix: 1
  # mathtools
  cases*: 1
  dcases: 1
  dcases*: 1
  rcases: 1
  rcases*: 1
  drcases: 1
  drcases*: 1
  # nicematrix
  NiceTabular: 1
  NiceMatrix: 1
  pNiceMatrix: 1
  bNiceMatrix: 1
  BNiceMatrix: 1
  vNiceMatrix: 1
  VNiceMatrix: 1
  NiceArray: 1
  pNiceArrayC: 1
  bNiceArrayC: 1
  BNiceArrayC: 1
  vNiceArrayC: 1
  VNiceArrayC: 1
  NiceArrayCwithDelims: 1
  pNiceArrayRC: 1
  bNiceArrayRC: 1
  BNiceArrayRC: 1
  vNiceArrayRC: 1
  VNiceArrayRC: 1
  NiceArrayRCwithDelims: 1
  # tabularray
  tblr: 1
  longtblr: 1
  talltblr: 1
  spreadtab: 1

# if you want the script to look for \item commands
# and format it, as follows (for example),
#       \begin{itemize}
#           \item content here
#                 next line is indented
#                 next line is indented
#           \item another item
#       \end{itemize}
# then populate indentAfterItems. See also itemNames
indentAfterItems:
  itemize: 1
  itemize*: 1
  enumerate: 1
  enumerate*: 1
  description: 1
  description*: 1
  list: 1

# 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.
itemNames:
  item: 1
  myitem: 1

# specialBeginEnd is, by default, mathmode focus, although
# there's no restrictions
specialBeginEnd:
  displayMath:
    begin: (?<!\\)\\\[            # \[ but *not* \\[
    end: \\\]                     # \]
    lookForThis: 1
  inlineMath:
    begin: (?<!\$)(?<!\\)\$(?!\$) # $ but *not* \$ or $$
    body: [^$]*?                  # anything *except* $
    end: (?<!\\)\$(?!\$)          # $ but *not* \$ or $$
    lookForThis: 1
  displayMathTeX:
    begin: \$\$                   # $$
    end: \$\$                     # $$
    lookForThis: 1
  specialBeforeCommand: 0

# if you want to add indentation after
# a heading, such as \part, \chapter, etc
# then populate it in here - you can add
# an indent rule to indentRules if you would
# like something other than defaultIndent
#
# you can also change the level if you like,
# or add your own title command
indentAfterHeadings:
  part:
    indentAfterThisHeading: 0
    level: 1
  chapter:
    indentAfterThisHeading: 0
    level: 2
  section:
    indentAfterThisHeading: 0
    level: 3
  subsection:
    indentAfterThisHeading: 0
    level: 4
  subsection*:
    indentAfterThisHeading: 0
    level: 4
  subsubsection:
    indentAfterThisHeading: 0
    level: 5
  paragraph:
    indentAfterThisHeading: 0
    level: 6
  subparagraph:
    indentAfterThisHeading: 0
    level: 7

# maximum indentation, off by default
maximumIndentation: -1

# if you don't want to have additional indentation
# 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* indentation
noAdditionalIndent:
  myexample: 1
  mydefinition: 1
  problem: 1
  exercises: 1
  mysolution: 1
  foreach: 0
  widepage: 1
  comment: 1
  document: 1
  frame: 0

# 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"
  anotherenvironment: "\t\t\t\t"
  chapter: " "
  section: " "
  item: "      "
  myitem: "        "

# set noAdditionalIndent globally for codeblocks
noAdditionalIndentGlobal:
  environments: 0                   # 0/1
  commands: 1                       # 0/1
  optionalArguments: 0              # 0/1
  mandatoryArguments: 0             # 0/1
  ifElseFi: 0                       # 0/1
  items: 0                          # 0/1
  keyEqualsValuesBracesBrackets: 0  # 0/1
  namedGroupingBracesBrackets: 0    # 0/1
  UnNamedGroupingBracesBrackets: 0  # 0/1
  specialBeginEnd: 0                # 0/1
  afterHeading: 0                   # 0/1
  filecontents: 0                   # 0/1

# set indentRules globally for codeblocks; these need
# to be horizontal spaces, if they are to be used
indentRulesGlobal:
  environments: 0                   # 0/h-space
  commands: 0                       # 0/h-space
  optionalArguments: 0              # 0/h-space
  mandatoryArguments: 0             # 0/h-space
  ifElseFi: 0                       # 0/h-space
  items: 0                          # 0/h-space
  keyEqualsValuesBracesBrackets: 0  # 0/h-space
  namedGroupingBracesBrackets: 0    # 0/h-space
  UnNamedGroupingBracesBrackets: 0  # 0/h-space
  specialBeginEnd: 0                # 0/h-space
  afterHeading: 0                   # 0/h-space
  filecontents: 0                   # 0/h-space

# command code block details
commandCodeBlocks:
  roundParenthesesAllowed: 1
  stringsAllowedBetweenArguments:
    - amalgamate: 1
    - node
    - at
    - to
    - decoration
    - \+\+
    - \-\-
    - \#\#\d
  commandNameSpecial:
    - amalgamate: 1
    - '@ifnextchar\['

# change dos line breaks into unix
dos2unixlinebreaks: 0

# modifyLineBreaks will only be searched if the -m
# switch is active
#
# 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 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}
#
#    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 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
#               some text some text \end{myenvironment}
#       when set to 0, the switch is ignored
#       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
#           will be changed to
#                   \end{myenvironment}some text some text
#       when set to 0, the switch is ignored
#       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 2, e.g
#               \end{myenvironment}some text some text
#           will be changed to
#                   \end{myenvironment}%
#                   some text some text
#       when set to 3, e.g
#               \end{myenvironment}some text some text
#           will be changed to
#                   \end{myenvironment}
#
#                   some text some text
#
# you can specify settings on a per-name basis
modifyLineBreaks:
  preserveBlankLines: 1                 # 0/1
  condenseMultipleBlankLinesInto: 1     # 0/1
  oneSentencePerLine:
    manipulateSentences: 0              # 0/1
    removeSentenceLineBreaks: 1         # 0/1
    multipleSpacesToSingle: 1           # 0/1
    textWrapSentences: 0                # 1 disables main textWrap
    sentenceIndent: ""
    sentencesFollow:
      par: 1                            # 0/1
      blankLine: 1                      # 0/1
      fullStop: 1                       # 0/1
      exclamationMark: 1                # 0/1
      questionMark: 1                   # 0/1
      rightBrace: 1                     # 0/1
      commentOnPreviousLine: 1          # 0/1
      other: 0                          # regex
    sentencesBeginWith:
      A-Z: 1                            # 0/1
      a-z: 0                            # 0/1
      other: 0                          # regex
    sentencesEndWith:
      basicFullStop: 0                  # 0/1
      betterFullStop: 1                 # 0/1
      exclamationMark: 1                # 0/1
      questionMark: 1                   # 0/1
      other: 0                          # regex
    sentencesDoNOTcontain:
      other: \\begin                    # regex
  textWrapOptions:
    columns: 0
    multipleSpacesToSingle: 1
    removeBlockLineBreaks: 1
    when: before                        # before/after
    comments:
      wrap: 0                           # 0/1
      inheritLeadingSpace: 0            # 0/1
    blocksFollow:
      headings: 1                       # 0/1
      commentOnPreviousLine: 1          # 0/1
      par: 1                            # 0/1
      blankLine: 1                      # 0/1
      verbatim: 1                       # 0/1
      filecontents: 1                   # 0/1
      other: \\\]|\\item(?:\h|\[)       # regex
    blocksBeginWith:
      A-Z: 1                            # 0/1
      a-z: 1                            # 0/1
      0-9: 0                            # 0/1
      other: 0                          # regex
    blocksEndBefore:
      commentOnOwnLine: 1               # 0/1
      verbatim: 1                       # 0/1
      filecontents: 1                   # 0/1
      other: \\begin\{|\\\[|\\end\{     # regex
    huge: overflow                      # forbid mid-word line breaks
    separator: ""
  # poly-switches below here              # -1: remove, 0: off, 1: add, 2: comment+add, 3: add blank line, 4: add blank line
  environments:
    BeginStartsOnOwnLine: 0             # -1,0,1,2,3,4
    BodyStartsOnOwnLine: 0              # -1,0,1,2,3,4
    EndStartsOnOwnLine: 0               # -1,0,1,2,3,4
    EndFinishesWithLineBreak: 0         # -1,0,1,2,3,4
    # equation*:
    #     BeginStartsOnOwnLine: 0         # -1,0,1,2,3,4
    #     BodyStartsOnOwnLine: 0          # -1,0,1,2,3,4
    #     EndStartsOnOwnLine: 0           # -1,0,1,2,3,4
    #     EndFinishesWithLineBreak: 0     # -1,0,1,2,3,4
  ifElseFi:
    IfStartsOnOwnLine: 0                # -1,0,1,2,3,4
    BodyStartsOnOwnLine: 0              # -1,0,1,2,3,4
    OrStartsOnOwnLine: 0                # -1,0,1,2,3,4
    OrFinishesWithLineBreak: 0          # -1,0,1,2,3,4
    ElseStartsOnOwnLine: 0              # -1,0,1,2,3,4
    ElseFinishesWithLineBreak: 0        # -1,0,1,2,3,4
    FiStartsOnOwnLine: 0                # -1,0,1,2,3,4
    FiFinishesWithLineBreak: 0          # -1,0,1,2,3,4
    # ifnum:
    #     IfStartsOnOwnLine: 0            # -1,0,1,2,3,4
    #     BodyStartsOnOwnLine: 0          # -1,0,1,2,3,4
    #     OrStartsOnOwnLine: 0            # -1,0,1,2,3,4
    #     OrFinishesWithLineBreak: 0      # -1,0,1,2,3,4
    #     ElseStartsOnOwnLine: 0          # -1,0,1,2,3,4
    #     ElseFinishesWithLineBreak: 0    # -1,0,1,2,3,4
    #     FiStartsOnOwnLine: 0            # -1,0,1,2,3,4
    #     FiFinishesWithLineBreak: 0      # -1,0,1,2,3,4
  commands:
    CommandStartsOnOwnLine: 0
    CommandNameFinishesWithLineBreak: 0
  optionalArguments:
    LSqBStartsOnOwnLine: 0              # -1,0,1,2,3,4
    OptArgBodyStartsOnOwnLine: 0        # -1,0,1,2,3,4
    RSqBStartsOnOwnLine: 0              # -1,0,1,2,3,4
    RSqBFinishesWithLineBreak: 0        # -1,0,1,2,3,4
  mandatoryArguments:
    LCuBStartsOnOwnLine: 0              # -1,0,1,2,3,4
    MandArgBodyStartsOnOwnLine: 0       # -1,0,1,2,3,4
    RCuBStartsOnOwnLine: 0              # -1,0,1,2,3,4
    RCuBFinishesWithLineBreak: 0        # -1,0,1,2,3,4
  keyEqualsValuesBracesBrackets:
    KeyStartsOnOwnLine: 0               # -1,0,1,2,3,4
    EqualsStartsOnOwnLine: 0            # -1,0,1,2,3,4
    EqualsFinishesWithLineBreak: 0      # -1,0,1,2,3,4
  items:
    ItemStartsOnOwnLine: 0              # -1,0,1,2,3,4
    ItemFinishesWithLineBreak: 0        # -1,0,1,2,3,4
  namedGroupingBracesBrackets:
    NameStartsOnOwnLine: 0              # -1,0,1,2,3,4
    NameFinishesWithLineBreak: 0        # -1,0,1,2,3,4
  specialBeginEnd:
    SpecialBeginStartsOnOwnLine: 0      # -1,0,1,2,3,4
    SpecialBodyStartsOnOwnLine: 0       # -1,0,1,2,3,4
    SpecialEndStartsOnOwnLine: 0        # -1,0,1,2,3,4
    SpecialEndFinishesWithLineBreak: 0  # -1,0,1,2,3,4
  verbatim:
    VerbatimBeginStartsOnOwnLine: 0     # -1,0,1,2,3,4
    VerbatimEndFinishesWithLineBreak: 0 # -1,0,1,2,3,4

# replacements, only active when either -r or -rr switches are active
replacements:
  - amalgamate: 1
  - this: latexindent.pl
    that: pl.latexindent
    lookForThis: 0
    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@]*?\{)@?if[a-zA-Z@]*?
  commands:
    name: [+a-zA-Z@\*0-9_\:]+?
  items:
    canBeFollowedBy: (?:\[[^]]*?\])|(?:<[^>]*?>)
  keyEqualsValuesBracesBrackets:
    name: [a-zA-Z@\*0-9_\/.:\#-]+[a-zA-Z@\*0-9_\/.\h\{\}:\#-]*?
    follow: (?:(?<!\\)\{)|,|(?:(?<!\\)\[)
  namedGroupingBracesBrackets:
    name: [0-9\.a-zA-Z@\*><]+?
    follow: \h|\R|\{|\[|\$|\)|\(
  UnNamedGroupingBracesBrackets:
    follow: \{|\[|,|&|\)|\(|\$
  arguments:
    before: (?:#\d\h*;?,?\/?)+|\<.*?\>
    between: _|\^|\*
  trailingComments:
    notPreceededBy: (?<!\\)
    afterComment: .*?
  modifyLineBreaks:
    doubleBackSlash: \\\\(?:\h*\[\h*\d+\h*[a-zA-Z]+\h*\])?
    comma: ','
    betterFullStop: |-
      (?x)                                # ignore spaces in the below
      (?:                                 #
        \.\)                              # .) 
        (?!\h*[a-z])                      # not *followed by* a-z
      )                                   #
      |                                   # OR
      (?:                                 #
        (?<!                              # not *preceded by*
          (?:                             #
            (?:[eE]\.[gG])                # e.g OR E.g OR e.G OR E.G
            |                             #
            (?:[iI]\.[eE])                # i.e OR I.e OR i.E OR I.E
            |                             #
            (?:etc)                       # etc
            |                             #
            (?:[wW]\.[rR]\.[tT])          # w.r.t OR W.r.t OR w.R.t OR w.r.T OR W.R.t OR W.r.T OR w.R.T OR W.R.T
          )                               #
        )                                 #
      )                                   # 
      \.                                  # .
      (?!                                 # not *followed by*
        (?:                               #
          [a-zA-Z0-9-~,]                  #
          |                               #
          \),                             # ),
          |                               #
          \)\.                            # ).
        )                                 #
      )                                   #
