是否有现成的解决方案来排版差异文件?

是否有现成的解决方案来排版差异文件?

在有关 Git 的文本中,我想要排版类似于以下可视化的差异: GitHub 上的提交详细信息

在此处输入图片描述

有没有现成的解决方案可以解决这个问题,特别是差异线的颜色?(在其他提交中,甚至可能会使用不同的背景颜色额外突出显示实际更改的行部分。

当然,我可以“自己做”,但不想重新发明轮子。

(搜索LaTeX似乎diff仅是数学符号或如何区分 LaTeX 文档......)

答案1

您也可以使用listings。您必须定义自己的语言和自己的颜色设置。带有特殊字符的行在此处定义为注释行:

\documentclass{article}

\usepackage[svgnames]{xcolor}
  \definecolor{diffstart}{named}{Grey}
  \definecolor{diffincl}{named}{Green}
  \definecolor{diffrem}{named}{OrangeRed}

\usepackage{listings}
  \lstdefinelanguage{diff}{
    basicstyle=\ttfamily\small,
    morecomment=[f][\color{diffstart}]{@@},
    morecomment=[f][\color{diffincl}]{+\ },
    morecomment=[f][\color{diffrem}]{-\ },
  }

\begin{document}

\begin{lstlisting}[language=diff]
@@ -85,8 +85,8 @@
\newcommand{\doctitleifsub}[2]{%
  \thispagestyle{empty}
  \begin{center}
-    \sffamily This document is part of the documentation of \openlilylib%
-    \footnote{\url{https://github.com/openlilylib/openLilyLib}},\\
+    \sffamily This document is part of \textbf{\openlilylib}%
+    \footnote{\url{http://www.openlilylib.org}},\\
    a collection of resources for the LilyPond notation software%
    \footnote{\url{http://www.lilypond.org}}\\
    and the \LaTeX{} typesetting system.
\end{lstlisting}

\end{document}

示例输出

答案2

使用该verbatim包,您可以轻松地将格式应用于每一行,因此这只提取第一个字符并将其用作用于突出显示的颜色名称的一部分。

在此处输入图片描述

\documentclass{article}
\usepackage{verbatim,color}
\makeatletter

\long\def\diffcolor#1#2\@nil{color\string#1diff}

\def\verbatim@processline{%
\nointerlineskip\noindent\rlap{%
\colorbox{\expandafter\diffcolor\next..\@nil}{%
\the\verbatim@line}}\par}
\makeatother

\definecolor{color diff}{rgb}{1,1,1}
\definecolor{color-diff}{rgb}{1,.5,.5}
\definecolor{color+diff}{rgb}{.5,1,.5}

\begin{document}



\verbatiminput{diffex.diff}

\end{document}

答案3

vimConTeXt 模块使用 VIM 编辑器对文件进行语法高亮。因此,它支持 VIM 支持的所有文件类型(数量很多)的所有语法高亮。例如,要高亮 diff 文件,您可以使用:

\usemodule[vim]

\definevimtyping[DIFFtyping][syntax=diff]

\starttext
\startDIFFtyping
@@ -85,8 +85,8 @@
 \newcommand{\doctitleifsub}[2]{%
   \thispagestyle{empty}
   \begin{center}
-    \sffamily This document is part of the documentation of \openlilylib%
-    \footnote{\url{https://github.com/openlilylib/openLilyLib}},\\
+    \sffamily This document is part of \textbf{\openlilylib}%
+    \footnote{\url{http://www.openlilylib.org}},\\
     a collection of resources for the LilyPond notation software%
     \footnote{\url{http://www.lilypond.org}}\\
     and the \LaTeX{} typesetting system. 
\stopDIFFtyping
\stoptext

这使

在此处输入图片描述

全面披露:我是 vim 模块的作者。

答案4

我采取了回答并答案是获得listings更接近 git diff 可视化的环境,使用彩色线条背景而不是彩色文本。

输出

\documentclass{article}

\usepackage{xcolor}

\usepackage{listings}

\newcommand{\lstbg}[3][0pt]{{\fboxsep#1\colorbox{#2}{\strut #3}}}
\lstdefinelanguage{diff}{
  basicstyle=\ttfamily\small,
  morecomment=[f][\lstbg{red!20}]-,
  morecomment=[f][\lstbg{green!20}]+,
  morecomment=[f][\textit]{@@},
  %morecomment=[f][\textit]{---},
  %morecomment=[f][\textit]{+++},
}

\begin{document}

\begin{lstlisting}[language=diff]
@@ -85,8 +85,8 @@
\newcommand{\doctitleifsub}[2]{%
  \thispagestyle{empty}
  \begin{center}
-    \sffamily This document is part of the documentation of \openlilylib%
-    \footnote{\url{https://github.com/openlilylib/openLilyLib}},\
+    \sffamily This document is part of \textbf{\openlilylib}%
+    \footnote{\url{http://www.openlilylib.org}},\
     a collection of resources for the LilyPond notation software%
     \footnote{\url{http://www.lilypond.org}}\
     and the \LaTeX{} typesetting system.
\end{lstlisting}

\end{document}

相关内容