卒論・修論の時期ですね
学生がなぜか,今年はみんな原稿をLaTeXで書いてきました。環境構築は大変なので,cloudLaTeXを使ったみたいです。
それはいいんですが,
- cloudlatexだとコンパイル通るのに,自分のローカル環境だとできない
- latexdiffがうまくいかない
とかあったので,設定を見直しました。ちなみに自分のローカル環境はMacなので,Mac前提です。TexLive2024です。
日本語のファイル名 (コンパイラの設定)
まあみんな日本語で原稿かいてますが,長らく日本語で長文のLaTeX原稿書いてないことを思い出しました。それがそもそもの原因なんですが。。。
ある学生さんの原稿の図のファイル名が日本語でした。で,自分のローカル環境だとビルドできない。日本語のファイル名をアルファベット表記にしたらコンパイルできる。なんでだろう。。。
結論
ptex2pdfを使いましょう。もしくはuplatex+dvipdfmxを使いましょう。
TeXshopの設定もYaTeXの設定も数年前から変えてなかったのがよくなかったです。YaTeXのほうはTeXshopのplate2pdf-utf8だったのですが,これだと日本語ファイル名が通りません。
YaTeXの設定(Emacsのinit.el中の設定)を以下のようにしました。
(setq tex-command "ptex2pdf -u -l -ot -synctex=1 -file-line-error")
TeXshopもpTeX用のptex2pdfの設定でした。これも日本語ファイル名が通りません。 upTex (ptex2pdf) の設定に変更したら,日本語ファイル名が使えるようになりました。
ptex2pdfはあいまいな認識だったのが下記ページをみて,勉強しなおしました。
https://texwiki.texjp.org/?ptex2pdf
備考
couldlatexでもコンパイラはplatexだと日本語ファイル名で失敗します。uplatexにしないと日本語ファイル名は通りません。
改めてlatexdiffの設定を見直した
卒論・修論にコメント書いて,次に修正してもらった原稿の確認だと,変更点だけチェックしたくなります。LaTeXならlatexdiffを使えば,新旧のTeXファイルから差分をとって,変更点がわかりやすくなった原稿が作れます。
一番オーソドックスに変更点を書いたTeXのソースファイル(ここではdiff.tex)を作る方法が以下のコマンド。-eはエンコードの指定,--flattenはソースファイルをinclude等で分割している場合のオプションです。latexdiffだけ実行すると,TeXのソースファイルの情報だけで出てくるので,それをリダイレクトしてファイルに保存します。
latexdiff -e utf8 --flatten mainold.tex mainnew.tex > diff.tex
上の例で差分を出した例が以下。青い部分が追加した部分で,赤い部分が削除した部分です。
画像見てもらうと分かりますが,変更箇所が長いと改行されずに右のほうに突き出します。日本語だと起きる問題です。英語だとこうはなりません。普段英語の投稿論文の改訂原稿作るときにしか使ってなかったので今回初めて知りました。ちなみに原因は下線の処理にulemを使っているからです。
これを検索すると -t CFONTオプション をつければいいとでてきます。
latexdiff -e utf8 --flatten -t CFONT mainold.tex mainnew.tex > diff.tex
こんなかんじのコマンドを実行。(これでdiff.texをコンパイルしなおすときは一旦aux等の中間ファイルを消したほうが良いです。)このときの差分が以下。ちょっとわかりにくいですが,赤字の削除した部分が改行されてます。
青字の部分はフォントが微妙に変わって,赤字部分は小さくなっていますが,これは仕様です。実際どうなってるかはdiff.texを見ると分かります。
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} %DIF PREAMBLE
\providecommand{\DIFaddtex}[1]{{\protect\color{blue} \sf #1}} %DIF PREAMBLE
\providecommand{\DIFdeltex}[1]{{\protect\color{red} \scriptsize #1}} %DIF PREAMBLE
追加部分はsans serifの青字になって,削除部分はscriptsizeの赤字になります。
-tはmarkupstyleを決めるオプションです。CFONTは色とフォントで差分を表すためのオプションです。(colorとfontなんですね)デフォルトはUNDERLINEで色と下線で差分を表すようになっています。
日本語の場合,区切りを入れないので,変更点が長いと改行されずに表示されます。日本語の場合は,-t CFONTにするのが無難かと思います。
備考
- 卒論・修論だとソースファイルは分割するのが普通だと思うので,--flattenのオプションは必須かと思います。
- 画像ファイルもフォルダ分けて保存するのが普通だとおもいます。diff.texと同じ階層に図のファイルを入れたフォルダをおくのがおすすめです。latexdiffはファイルのパス名に日本語があるとエラーします。フォルダ名は全部英数字で書かれたフォルダにファイル一式置く必要があります。
備考2
ちなみにlatexdiff自体はperlのスクリプトです。大元のスクリプトみると,markupstyleに
UNDERLINE CTRADITIONAL TRADITIONAL CFONT FONTSTRIKE INVISIBLE CHANGEBAR CCHANGEBAR CULINECHBAR CFONTCHBAR BOLD PDFCOMMENT
ってのがあるらしいです。BOLDは変更したところが太字になります。
そのままだとコンパイルできないのもいくつかあったので,CFONTあたりが使いやすいと思います。
備考3
gitとかで原稿のバージョン管理している場合にはlatexdiff-vcを使うほうがいいです。latexdiff-vcでもlatexdiffのオプション使えるので,-t CFONTが使えます。
使うとしたらこんな感じ。--forceは差分用のTeXファイルを強制的に上書き,--gitはバージョン管理がgit,-rはリビジョンの指定です。
latexdiff-vc -e utf8 --flatten -t CFONT --force --git -r febxx main.tex