我想比较两个版本的程序,并在它们之间添加垂直线。如何使用 LaTeX 实现此目的?
答案1
一种方法是使用两个minipage
s 和包裹listings
:
在此过程中,您还可以添加一些语法高亮,并导入包含您想要显示的源代码的外部文件:
笔记:
- 包裹
filecontents
在这里仅仅用来包装平均能量损失合并到一个文件中。实际使用时不需要。
代码:基本
\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{minipage}[t]{0.45\linewidth}
\begin{lstlisting}[language=c++]
// before refactoring
class A {
public int f;
void m (int i) {
f = i + f;
}
}
\end{lstlisting}
\end{minipage}%
\hfill\vrule\hfill
\begin{minipage}[t]{0.45\linewidth}
\begin{lstlisting}[language=c++]
// after refactoring
class A {
private int f;
void m(int i) {
setF(i * getF()();
}
public int getF() {
return this.F;
}
public void setF(int f) {
this.f = f;
}
}
\end{lstlisting}
\end{minipage}%
\end{document}
代号:Fancy
\documentclass{article}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{filecontents}
\begin{filecontents*}{before.c}
// before refactoring
class A {
public int f;
void m (int i) {
f = i + f;
}
}
\end{filecontents*}
\begin{filecontents*}{after.c}
// after refactoring
class A {
private int f;
void m(int i) {
setF(i * getF()();
}
public int getF() {
return this.F;
}
public void setF(int f) {
this.f = f;
}
}
\end{filecontents*}
\lstdefinestyle{MyStyle}{ %
language=C++,
backgroundcolor=\color{gray!10},
basicstyle=\small,
basicstyle=\small\ttfamily,
keywordstyle=\color{red}
}
\begin{document}
\begin{minipage}[t]{0.45\linewidth}
\lstinputlisting[style=MyStyle]{before.c}
\end{minipage}%
\hfill\vrule\hfill
\begin{minipage}[t]{0.45\linewidth}
\lstinputlisting[style=MyStyle]{after.c}
\end{minipage}
\end{document}
答案2
使用简单的表格环境:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xcolor,listings,beramono}
\lstset{basicstyle=\ttfamily\small,
keywordstyle=\color{blue}}
\begin{document}
\begin{tabular}{@{}p{\dimexpr0.4\linewidth-\tabcolsep}% can be up to 0.5\linewidth
| p{\dimexpr0.5\linewidth-\tabcolsep}@{}}
\begin{lstlisting}[language=c++]
// before refactoring
class A {
public int f;
void m (int i) {
f = i + f;
}
}
\end{lstlisting}
&
\begin{lstlisting}[language=c++]
// after refactoring
class A {
private int f;
void m(int i) {
setF(i * getF()();
}
public int getF() {
return this.F;
}
public void setF(int f) {
this.f = f;
}
}
\end{lstlisting}
\end{tabular}
\end{document}