![サブファイルを含むLatexdiff](https://rvso.com/image/286963/%E3%82%B5%E3%83%96%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%90%AB%E3%82%80Latexdiff.png)
「subfiles」パッケージでlatexdiffを動作させる方法はありますか?
サブファイルを使用して、異なる .tex ファイルからのドキュメントの一部を含めます。Latexdiff はサブファイルの変更をマークしないようです。
--flatten オプションは役に立ちません。Latexdiff のバージョンは 1.0.2 です。
例 :
メイン.tex
\documentclass[10pt]{article}
\usepackage{subfiles}
\begin{document}
\subfile{includeme.tex}
\end{document}
含める
\documentclass[main.tex]{subfiles}
\begin{document}
Text!
\end{document}
ランニング
latexdiff d1/main.tex d2/main.tex --flatten > mydiff.tex
結果のドキュメントにはサブファイルの内容が含まれなくなります。
マイディフ.tex
\documentclass[10pt]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF (...)
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
\begin{document}
\subfile{includeme.tex}
\end{document}
つまり、問題はフラット化されたパイプライン/ワークフローにあり、\subfile{includeme.tex} インクルードでは動作するようには設計されていないようです。
答え1
以下は完全な解決策ではなく、回避策であることに注意してください。
latexdiff --append-safecmd=subfile d1/main.tex d2/main.tex --flatten > mydiff.tex
\subfile コマンドがファイルに追加または削除され、ブロック全体がマークアップされている場合 (MWE でのみテストされており、より長いインクルード マテリアルについては確認が必要です)、またはインクルード ファイルのファイル名が変更された場合に対処します。インクルード ファイルを、差分ファイルが生成されるディレクトリ (MWE の現在のディレクトリ) にコピーする必要があります。
サブファイルの内容の変更を強調するには、各ファイルを個別に処理します。
cat /dev/null > null latexdiff -pnull d1/includeme.tex d2/includeme.tex > includeme.tex
-p オプションは、latexdiff が \begin{document} を見つけたときに通常自動的に挿入するプリアンブル コマンドを省略するように強制します (latexdiff のバグにより -p/dev/null が認識されないため、補助ファイル "null" が必要です)。
残っているのは、これを自動化することだけです。次の行は、概念実証として自動化を実現するためのハッキーな方法ですが、実際には、より堅牢で柔軟な小さなシェル スクリプトに拡張する必要があります。
grep -v '^%' main.tex | grep subfile\{ | sed 's/^.*subfile{\(.*\)}.*$/\1/' \ | awk '{ print "latexdiff -pnull d1/" $1, "d2/" $1,">", $1 }' | sh
答え2
質問されてから 2 年後、私は Windows 環境でこの問題を解決するためのバッチ ファイルを作成しました。
@echo off
setlocal
set "old_path=..\..\tags\old_version\my_folder\"
set "new_path=..\..\..\trunk\my_folder\"
set "doc_name=my_file.tex"
latexdiff --flatten %doc_name% %doc_name% > flat.tex
cd %old_path%
latexdiff --flatten %doc_name% %doc_name% > flat.tex
cd %new_path%
latexdiff --flatten %old_path%flat.tex flat.tex > diff.tex
rm flat.tex
rm %old_path%flat.tex
答え3
上の投稿リンク非常に役に立ちましたが、皆さんが使用できるように修正したバージョンを作成しました。
@echo off
setlocal
set "old_path=..\documentation\"
set "new_path=..\documentation_old\"
set "doc_name_filename=main"
echo Generate %doc_name_filename%_flat.tex for %new_path%
cd %new_path%
latexpand %doc_name_filename%.tex > %doc_name_filename%_flat.tex
echo Generate %doc_name_filename%_flat.tex for %old_path%
cd %old_path%
latexpand %doc_name_filename%.tex > %doc_name_filename%_flat.tex
echo Generate diff
cd %new_path%
latexdiff %old_path%%doc_name_filename%_flat.tex %doc_name_filename%_flat.tex > diff.tex
pdflatex --max-print-line=10000 -shell-escape -synctex=1 -interaction=nonstopmode -file-line-error -recorder diff.tex 2>&1 > NUL
echo PDF generated in case of problems see diff.log
echo Cleaning up
del %doc_name_filename%_flat.tex
del %old_path%%doc_name_filename%_flat.tex
pause