源代码边距注释

源代码边距注释

在 JR Heard 的论文《美丽的代码令人信服的证据》中——代码以特殊方式格式化,其中包括边注。我正在寻找一种方法来做到这一点,因为我认为这是一种以文学编程风格注释代码的非常清晰的方法。

答案1

正如评论中提到的,您可以使用(包)escapeinside选项在代码列表中执行自己的代码。还有和可以在这些标记之前和之后自动插入代码。lstlistinglistingsexecutebeginexecuteend

我的想法:* 使用minipages将列表限制为小于文本宽度,并使用一些水平空间将其向右移动。* 可以使用选项添加像链接论文中的分隔线。frame=l* 使用上述命令在代码行的开头添加注释。* 自动添加的代码将注释放在左侧,\llap{<content>\hspace{<distance>}}不占用任何官方空间。* 为了允许多行注释,minipage在注释周围添加了具有正确对齐方式的额外注释。

代码如下所示:(第一个列表仅支持单行注释,而第二个列表支持多行注释!)

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern} % better tt fonts!

\usepackage{xcolor}
\usepackage{listings}

\usepackage{lipsum}% dummy text

\makeatletter
\def\comsep{\dimexpr\lst@numbersep+\lst@frametextsep\relax}% most likely not correct!
\makeatother
\begin{document}

\lipsum

\begin{minipage}{\linewidth}
\hspace*{.3\linewidth}%
\begin{minipage}{.7\linewidth}
\begin{lstlisting}[frame=l,basicstyle=\ttfamily,language=C,
    escapeinside={(*@}{@*)},
    escapebegin={\begin{lrbox}{0}\normalfont\itshape\small\color{black!70}},
    escapeend={\end{lrbox}\llap{\box0\hspace{\comsep}}}
    ]
(*@ Declare it   @*) int i = 0;
(*@ useless!     @*) i + i;
(*@ increment    @*) i++:

(*@ now print it @*) print i;
\end{lstlisting}
\end{minipage}
\end{minipage}


\begin{minipage}{\linewidth}
\hspace*{.3\linewidth}%
\lstset{% set here because `\linewidth` has still its old value
    escapeinside={(*@}{@*)},
    escapebegin={\begin{lrbox}{0}\minipage[t]{.3\linewidth}\raggedleft\normalfont\itshape\small\leavevmode\color{black!70}\ignorespaces},
    escapeend={\endminipage\end{lrbox}\llap{\raisebox{0pt}[0pt][0pt]{\box0}\hspace{\comsep}}}
}%
\begin{minipage}{.7\linewidth}
\begin{lstlisting}[frame=l,basicstyle=\ttfamily,language=C]
(*@ Declare it   @*) int i = 0;
(*@ useless!     @*) i + i;
(*@ increment; more text more    @*) i++:

(*@ now print it @*) print i;
\end{lstlisting}
\end{minipage}
\end{minipage}



\end{document}

如下所示:

结果

如果使用频率较高,可以定义一个新的环境(\newlstenvironment)或者进行全局设置。

注意:理论上,可以对listings代码进行更深入的改造,以便将注释添加到末尾而不是开头。这将简化注释的添加,但编码难度会大大增加。

相关内容