在有关 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}