有没有办法突出显示差异文件的语法(即通过使用包listings
)?
答案1
您只需使用包即可完成此操作listings
,甚至不需要外部预处理器。listings
没有差异样式,但您可以像这样定义一个:
\lstdefinelanguage{diff}{
morecomment=[f][\color{blue}]{@@}, % group identifier
morecomment=[f][\color{red}]-, % deleted lines
morecomment=[f][\color{green}]+, % added lines
morecomment=[f][\color{magenta}]{---}, % Diff header lines (must appear after +,-)
morecomment=[f][\color{magenta}]{+++},
}
按通常方式使用它。例如,\lstinputlisting[language=diff]{myfile.diff}
。
更新:Diff 查看器通常会突出显示线条的背景,而不是为文本着色。这可以借助 Martin Scharrer 的lstlinebgrd
软件包添加,该软件包可在 CTAN 上找到,网址为lstaddons
捆绑包(或者从软件包主页)
答案2
答案3
我扩展了 alexis 的答案以涵盖更多格式:普通格式(diff
)、统一格式(diff -u
)、上下文格式(diff -c
)和来自 Git 的差异(git diff
):
\lstdefinelanguage{diff}{
sensitive=true,
% diff command line
morecomment=[f][\color{gray}][0]{diff},
% commit identifiers for git diff
morecomment=[f][\color{gray}][0]{index},
% hunk location/line numbers for unified format
morecomment=[f][\color{blue}][0]{@@},
% hunk location/line numbers for context format
morecomment=[f][\color{magenta}][0]{***},
% changed line for context format
morecomment=[f][\color{violet}][0]{!},
% deleted lines for unified format
morecomment=[f][\color{red!60!black}][0]-,
% added lines for unified format
morecomment=[f][\color{green!60!black}][0]+,
% file name and time stamp old file
morecomment=[f][\color{magenta}][0]{---},
% file name and time stamp new file
morecomment=[f][\color{magenta}][0]{+++},
% Binary files ... differ
morecomment=[f][\color{gray}][0]{Binary},
% Only in ...: file.txt
morecomment=[f][\color{gray}][0]{Only},
% old mode ...
morecomment=[f][\color{gray}][0]{old},
% new mode ...
morecomment=[f][\color{gray}][0]{new},
% rename from/to ...
morecomment=[f][\color{gray}][0]{rename},
% similarity index ...%
morecomment=[f][\color{gray}][0]{similarity},
% deleted file mode ...%
morecomment=[f][\color{gray}][0]{deleted},
% hunk separator for context format
morecomment=[f][\color{magenta}][0]{***************},
% deleted lines for normal format
morecomment=[f][\color{red!60!black}][0]<,
% added lines for normal format
morecomment=[f][\color{green!60!black}][0]>,
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{0},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{1},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{2},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{3},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{4},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{5},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{6},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{7},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{8},
% line number specifier for normal format
morecomment=[f][\color{blue}][0]{9},
}[comments]