16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

latexindentの設定をカスタマイズして使う

Posted at

#はじめに
latexindentというLaTeXのソースを自動で成形してくれるツールがある。
設定の仕方を毎回忘れるのでここに書き留めておく。

#前提
TeX Liveをインストールした状態のWindowsもしくはLinux

##Windows
本来latexindentはPerlで書かれているのでPerl環境が必要だが、TeX Liveにバイナリが同梱されているのでPerl環境なしで動く。
LaTeX-Workshopを使っていたらVSCode上で shift+alt+F すると成形される。

##Linux
Linuxではバイナリが同梱されてないのでPerl環境が必要になる。
# pacman -S perl perl-CPAN
などでインストールする。

この状態で
# latexindent
とするとライブラリがないと怒られるので足りないライブラリを
# cpan Log::Log4perl
などでCPANからライブラリを導入していく。
これに関してはこの記事が詳しい。

#設定
latexindentはデフォルトの設定だとぐちゃぐちゃなインデントをしてしまうので、設定を変更する。
latexindentの設定はdefaultSettings.yamlというファイルで行う。

##ファイルの場所

###Windows
Windowsでの場合、たいてい設定ファイルは以下の場所にある。
texlive\2020\texmf-dist\scripts\latexindent\defaultSettings.yaml
この場所にない場合、Linuxの項目に示した方法でパスを調べる。

###Linux
Linuxの場合、ディストリビューションによって生成される場所が異なるので
# latexindent
を実行すると作業ディレクトリに生成されるindent.logを参照してdefaultSetting.yamlのファイルパスを確認する。

indent.log
...
INFO: YAML settings read: defaultSettings.yaml
      Reading defaultSettings.yaml from /usr/share/texmf-dist/scripts/latexindent/defaultSettings.yaml
...

##defaultSettings.yaml
使いそうな設定項目を取り上げていく。
ごく一部しか取り上げられていないので、詳細は以下のドキュメントを参照してほしい。
https://latexindentpl.readthedocs.io/en/latest/sec-default-user-local.html

###バックアップファイルに関する設定
latexindentは実行するたびmyfile.bak0 myfile.bak1 myfile.bak2のようにバックアップファイルが生成されるが、
下記の設定項目を1にすると、一つのバックアップファイルを上書きしていくようになる。

defaultSettings.yaml
# 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: 1

0にしておいたほうが安全は安全だが慣れてくると邪魔になるので1にする。

###図表環境におけるインデントの設定
tabularなどでのインデントに関する設定は下記の項目で行う。

defaultSettings.yaml
# name of code blocks that should have their body aligned at ampersand delimiters
lookForAlignDelims:
   tabular: 
      delims: 1
      alignDoubleBackSlash: 1
      spacesBeforeDoubleBackSlash: 2        #変えた
      multiColumnGrouping: 0
      alignRowsWithoutMaxDelims: 1
      spacesBeforeAmpersand: 2              #変えた
      spacesAfterAmpersand: 1
      justification: left
      alignFinalDoubleBackSlash: 0
      dontMeasure: 0
      delimiterRegEx: '(?<!\\)(&)'
      delimiterJustification: left
   tabularx:
      delims: 1
   longtable: 1
   tabu: 1
   array: 1
   matrix: 1
   bmatrix: 1
   Bmatrix: 1
   pmatrix: 1
   vmatrix: 1
   Vmatrix: 1
   align: 1
   align*: 1
   alignat: 1
   alignat*: 1
   aligned: 1
   cases: 1
   dcases: 1
   listabla: 1

セル間のスペースと最後の\\とのスペースを1から2にしている。1

###itemize環境などにおけるインデントの設定
\itemなどの後にインデントがいらない場合は0に設定する。

defaultSettings.yaml
# 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
    enumerate: 1
    description: 1
    list: 1

###章・段落の後のインデントの設定
\sectionなどのあとにインデントをするかを設定する。

defaultSettings.yaml
# 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: 1        #変えた
       level: 1
    chapter: 
       indentAfterThisHeading: 1        #変えた
       level: 2
    section:
       indentAfterThisHeading: 1        #変えた
       level: 3
    subsection:
       indentAfterThisHeading: 1        #変えた
       level: 4
    subsection*:
       indentAfterThisHeading: 1        #変えた
       level: 4
    subsubsection:
       indentAfterThisHeading: 1        #変えた
       level: 5
    paragraph:
       indentAfterThisHeading: 1        #変えた
       level: 6
    subparagraph:
       indentAfterThisHeading: 1        #変えた
       level: 7

デフォルトだと0だが1にすると圧倒的に見やすい。

また、インデントを何で行うか以下の項目で設定する。
"\t"だとタブでインデントが行われる。スペースを使いたい場合は" "のようにする。

defaultSettings.yaml
# 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: "\t"                        #変えた
   section: "\t"                        #変えた
   item: "\t"                           #変えた
   myitem: "\t"                         #変えた

#おわりに
設定できる項目はこんなものじゃないので
https://latexindentpl.readthedocs.io/en/latest/sec-default-user-local.html
をみて各個人の最高の設定を作り出して最高のLaTeXライフを送りましょう。

  1. しかし日本語文字が含まれていると設定しても結局インデントがずれる

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?