# defaultSettings.yaml for latexindent.pl, version 3.19.1, 2022-12-04
#                      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: 1

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

# 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: "    "

# 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
   tabularx:
      delims: 1
   longtable: 1
   tabu: 1
   array: 1
   matrix: 1
   listabla: 1
   # amsmath
   align: 1
   align*: 1
   alignat: 1
   alignat*: 1
   aligned: 1
   bmatrix: 1
   Bmatrix: 1
   cases: 1
   flalign: 1
   flalign*: 1
   pmatrix: 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

# 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: '\\\['
        end: '\\\]'
        lookForThis: 1
    inlineMath:
        begin: '(?<!\$)(?<!\\)\$(?!\$)'
        end: '(?<!\\)\$(?!\$)'
        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: 0
    mydefinition: 0
    problem: 0
    exercises: 0
    mysolution: 0
    foreach: 0
    widepage: 0
    comment: 0
    document: 0
    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 "        "
indentRules:
   myenvironment: "        "
   anotherenvironment: "                "
   chapter: " "
   section: " "
   item: "      "
   myitem: "        "

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

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

# 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: 1

# 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
    condenseMultipleBlankLinesInto: 1
    oneSentencePerLine:
        manipulateSentences: 0
        removeSentenceLineBreaks: 1
        multipleSpacesToSingle: 1
        textWrapSentences: 0   # setting to 1 disables main textWrap routine
        sentenceIndent: ""
        sentencesFollow:
            par: 1
            blankLine: 1
            fullStop: 1
            exclamationMark: 1
            questionMark: 1
            rightBrace: 1
            commentOnPreviousLine: 1
            other: 0
        sentencesBeginWith:
            A-Z: 1
            a-z: 0
            other: 0
        sentencesEndWith:
            basicFullStop: 0
            betterFullStop: 1
            exclamationMark: 1
            questionMark: 1
            other: 0
    textWrapOptions:
        columns: 0
        multipleSpacesToSingle: 1
        removeBlockLineBreaks: 1
        blocksFollow:
           headings: 1
           commentOnPreviousLine: 1
           par: 1
           blankLine: 1
           verbatim: 1
           filecontents: 1
           other: '\\\]|\\item(?:\h|\[)'      # regex
        blocksBeginWith:
           A-Z: 1
           a-z: 1
           0-9: 0
           other: 0                           # regex
        blocksEndBefore:
           commentOnOwnLine: 1
           verbatim: 1
           filecontents: 1
           other: '\\begin\{|\\\[|\\end\{'    # regex
        huge: overflow                        # forbid mid-word line breaks
        separator: ""
    # poly-switches below here
    environments:
        BeginStartsOnOwnLine: 0
        BodyStartsOnOwnLine: 0
        EndStartsOnOwnLine: 0
        EndFinishesWithLineBreak: 0
        equation*:
            BeginStartsOnOwnLine: 0
            BodyStartsOnOwnLine: 0
            EndStartsOnOwnLine: 0
            EndFinishesWithLineBreak: 0
    ifElseFi:
        IfStartsOnOwnLine: 0
        BodyStartsOnOwnLine: 0
        OrStartsOnOwnLine: 0
        OrFinishesWithLineBreak: 0
        ElseStartsOnOwnLine: 0
        ElseFinishesWithLineBreak: 0
        FiStartsOnOwnLine: 0
        FiFinishesWithLineBreak: 0
        ifnum:
            IfStartsOnOwnLine: 0
            BodyStartsOnOwnLine: 0
            OrStartsOnOwnLine: 0
            OrFinishesWithLineBreak: 0
            ElseStartsOnOwnLine: 0
            ElseFinishesWithLineBreak: 0
            FiStartsOnOwnLine: 0
            FiFinishesWithLineBreak: 0
    commands:
        CommandStartsOnOwnLine: 0
        CommandNameFinishesWithLineBreak: 0
    optionalArguments:
        LSqBStartsOnOwnLine: 0
        OptArgBodyStartsOnOwnLine: 0
        RSqBStartsOnOwnLine: 0
        RSqBFinishesWithLineBreak: 0
    mandatoryArguments:
        LCuBStartsOnOwnLine: 0
        MandArgBodyStartsOnOwnLine: 0
        RCuBStartsOnOwnLine: 0
        RCuBFinishesWithLineBreak: 0
    keyEqualsValuesBracesBrackets:
        KeyStartsOnOwnLine: 0
        EqualsStartsOnOwnLine: 0
        EqualsFinishesWithLineBreak: 0
    items:
        ItemStartsOnOwnLine: 0
        ItemFinishesWithLineBreak: 0
    namedGroupingBracesBrackets:
        NameStartsOnOwnLine: 0
        NameFinishesWithLineBreak: 0
    specialBeginEnd:
        SpecialBeginStartsOnOwnLine: 0
        SpecialBodyStartsOnOwnLine: 0
        SpecialEndStartsOnOwnLine: 0
        SpecialEndFinishesWithLineBreak: 0
    verbatim:
        VerbatimBeginStartsOnOwnLine: 0
        VerbatimEndFinishesWithLineBreak: 0

# 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: '(?<!\\)'
    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 *preceeded 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
            )                               #
          )                                 #
        )                                   #
        \.                                  # .
        (?!                                 # not *followed by*
          (?:                               #
            [a-zA-Z0-9-~,]                  #
            |                               #
            \),                             # ),
            |                               #
            \)\.                            # ).
          )                                 #
        )                                   #