gitでlatex管理

# はじめに
指導教官から論文指導を受ける際に前回からの修正を明らかにするために、latexdiffを使用していた。

```
latexdiff old.tex new.tex > diff.tex
```
こんな感じで古いファイルと新しいファイルの差分をとると

![qiita.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582711/889b7aab-0b2c-194e-3f90-7eb6398153e6.png)

このように一目で何がどう変わったかわかるので指導する側からしてもやりやすいと思われる。しかし、差分をとるためには古いtexファイルを保存しておく必要があるため、フォルダの中が過去のファイルで大量になってしまい煩わしい。そこでgitによるバージョン管理を導入する。

# gitとは
筆者もきちんと理解していないが、プログラムなどを作成する際に複数の人が同時に作業を行うことを可能にする、誰がいつ編集したかを明らかにする、バグや問題が発生した際に原因を特定するために前のバージョンに戻す、などが可能なサービス？ソフト？システムである。

今回は後述するコミットでバージョン管理を行う。本来はリモートリポジトリを作成して複数の人がアクセスする環境を構築することが多いようだが今回は完全な個人利用である。なお、論文を共著する際にも有用だと考えられるが現在その予定はない。

# 準備編
gitを使う際にコマンドプロンプト,git bashなどでコマンドを打つ必要がある。この辺も素人なので完全に理解していないが、おまじない程度に考える。きちんと理解するより道具的に使えるようになることが最優先である。私自身コマンドを打つことに慣れてなかったので初心者向けに書いていく。

### ダウンロード
まず、ご自身の環境に合わせて[Git](https://git-scm.com/)から最新版をダウンロードする。

### リポジトリの作成
次に論文を格納するフォルダを決め、そこをgitで管理するように設定する。
まずコマンドで格納するフォルダに移動する。
```
cd ./username/hoge/hogehoge
```
リポジトリを作成
```
$ git init
```

### 補助ファイルを無視するためのファイル
.gitignoreを下記のように編集して補助ファイルを無視するように設定する。
（現在はVS Codeのほうでコンパイル後にsyncさせる補助ファイル以外を削除する設定を導入している。）
```
## addition
*.docx

## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb

## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf

## Generated if empty string is given at "Please type another file name for output:"
*.pdf

## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml

## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync

## Build tool directories for auxiliary files
# latexrun
latex.out/

## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa

# achemso
acs-*.bib

# amsthm
*.thm

# beamer
*.nav
*.pre
*.snm
*.vrb

# changes
*.soc

# cprotect
*.cpt

# elsarticle (documentclass of Elsevier journals)
*.spl

# endnotes
*.ent

# fixme
*.lox

# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm

#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R

# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs

# gnuplottex
*-gnuplottex-*

# gregoriotex
*.gaux
*.gtex

# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref

# hyperref
*.brf

# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary

# listings
*.lol

# makeidx
*.idx
*.ilg
*.ind
*.ist

# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*

# minted
_minted*
*.pyg

# morewrites
*.mw

# nomencl
*.nlg
*.nlo
*.nls

# pax
*.pax

# pdfpcnotes
*.pdfpc

# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd

# scrwfile
*.wrt

# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/

# pdfcomment
*.upa
*.upb

# pythontex
*.pytxcode
pythontex-files-*/

# thmtools
*.loe

# TikZ & PGF
*.dpth
*.md5
*.auxlock

# todonotes
*.tdo

# easy-todo
*.lod

# xmpincl
*.xmpi

# xindy
*.xdy

# xypic precompiled matrices
*.xyc

# endfloat
*.ttt
*.fff

# Latexian
TSWLatexianTemp*

## Editors:
# WinEdt
*.bak
*.sav

# Texpad
.texpadtmp

# Kile
*.backup

# KBibTeX
*~[0-9]*

# auto folder when using emacs and auctex
./auto/*
*.el

# expex forward references with \gathertags
*-tags.tex

# standalone packages
*.sta

# generated if using elsarticle.cls
*.spl
```
# 実行編
### 日々の執筆時のコマンド
文章を編集する前にbranch(その日の分岐）を作成する。編集を加えたらaddして適宜commit（その時点での記録みたいなもの）。その日の終わりにbranchをmasterにmergeする（分かれていた分岐を本家と合体させる）。
```
$ git checkout -b branchname 
$ git add filename.tex　
$ git commit -m 'hogehoge'
$ git checkout master
$ git merge branchname
```
ちなみにaddとcommitを同時にすることもできる。
```
$ git commit -am "hogehoge"
```
### 差分ファイル生成のコマンド
差分ファイルを生成する。
```
latexdiff-vc --git -d diff -r [ブランチ名] filename.tex
--または--
latexdiff-vc --git -d diff -r [コミットの番号7桁] filename.tex
```
diffと名前の付いたフォルダに差分の.texファイルが生成される。
どのコミットと差分をとるか指定できる。
### 例えば
4/1 コメントもらう＋修正する。
4/2 追加で修正する。
4/3 見てもらう。
このとき取りたい差分は4/1の見てもらったファイルと現在のファイルであり、4/2との差分ではないので
4/1の見てもらった時点のコミットと現在との差分ファイルを作成する。

過去のログや現在のファイルの状態を明らかにするコマンドとして以下を残しておく。
```
$ git log
$ git status
```
### 終わりに
丁寧に書くつもりが思ったより雑になってしまったので適宜編集していく。
各コマンドには便利なオプションがあるのでそれも適宜調べて追記する。

### 追記（22/11/22)
日付でブランチ名をつけていたため22/11/22のようにしていたが、これでコンパイルするとディレクトリを指定しなかった際にスラッシュに応じてフォルダが生成されてしまう。
そこでブランチ名を22-11-22に変更してコンパイルすると元のファイルと同じ場所に"filename-diff22-11-22.tex"が生成されていつとの差分がわかりやすい差分ファイルを生成できる。
念のため、ブランチを後から変更するコマンドを書き残す。
```
git checkout 22/11/22
git branch -m new-branch-name
```
過去のブランチに飛んで二行目で新しい名前を付ける。

### 追記（24/03/22)
デフォルトだと変更前の文書が赤で表示されていたが，これが煩わしいと感じたので表示しない方法を調べた．
preambleに出てくる
```
\providecommand{\DIFdeltex}[1]{{\protect\color{red}\sout{#1}}}
```
のカッコ内を消すことでも表示は消えるが空白がどうしても残ってしまい，構成が崩れる．
そこで以下を発見した．
```
latexdiff-vc --git -d diff --no-del -r [ブランチ名] filename.tex
```
--no-delを追加してやればよい．
ただ，これをこのまま実行した際にエラーを吐いたので下記を参照した．
https://qiita.com/take_me/items/e49c544f9298f936b8fd

### 追記（24/04/29)
改行の関係で形が崩れるのを防ぐオプションを書き残す．
```
-t CFONT
```
また，日本語でlatexdiffをする場合
```
-e utf8
```
をオプションに入れるとよい．
私の環境では，これでも大量の警告が出るか出力自体には成功している．

参考：https://qiita.com/S_Kagami/items/9f5afcb76d4dfc2971fc

### 参考
https://mash810r.hatenablog.com/entry/2018/06/06/234541
https://seiya2130.hatenablog.com/entry/2019/10/08/074903