如何将评论与列表对齐?

如何将评论与列表对齐?

我使用listings以下设置:

\lstset{language=C++,basicstyle=\small\sffamily,
  numbers=none,
  frame=tb,
  columns=fullflexible,
  showstringspaces=false
}

我喜欢按比例设置的字体,但我希望能够对齐不同行的注释。是否可以在环境中进行某种制表lstlisting

\begin{lstlisting}
  float f;  // A float
  int anAptlyNamedInteger;  // An integer
\end{lstlisting}

我希望这两条评论水平对齐。

答案1

如果您愿意更改代码,那么您可以定义一个escapechar=\&,它允许您输入&以退出到 LaTeX 并执行宏。然后将注释包装成如下内容:

\newcommand*{\Comment}[1]{\hfill\makebox[3.0cm][l]{#1}}%

获得你想要的对齐方式:

在此处输入图片描述

\documentclass{article}
\usepackage{listings}

\newcommand*{\Comment}[1]{\hfill\makebox[3.0cm][l]{#1}}%
\lstset{language=C++,basicstyle=\small\sffamily,
  numbers=none,
  frame=tb,
  columns=fullflexible,
  showstringspaces=false,
  escapechar=\&% char to escape out of listings and back to LaTeX
}

\begin{document}
\begin{lstlisting}
  float f;  &\Comment{// A float}&
  int anAptlyNamedInteger;  &\Comment{// An integer}&
\end{lstlisting}
\end{document}

答案2

这使用来自的代码我想将下一行缩进指定的位置保存注释的位置(使用\SP)并在以后重新使用该位置(使用\UP)。它使用savepos来自的模块zref

在此处输入图片描述

\documentclass{article}
\usepackage{zref-savepos}% http://ctan.org/pkg/zref
\makeatletter
% Taken from: https://tex.stackexchange.com/a/69076/5764
% \zsaveposx is defined since 2011/12/05 v2.23 of zref-savepos
\@ifundefined{zsaveposx}{\let\zsaveposx\zsavepos}{}
\makeatother
\newcounter{hposcnt}
\renewcommand*{\thehposcnt}{hpos\number\value{hposcnt}}
\newcommand*{\SP}{% set position
  \stepcounter{hposcnt}%
  \zsaveposx{\thehposcnt s}%
}
\makeatletter
\newcommand*{\UP}{% use previous position
  \zsaveposx{\thehposcnt u}%
  \zref@refused{\thehposcnt s}%
  \zref@refused{\thehposcnt u}%
  \kern\zposx{\thehposcnt s}sp\relax
  \kern-\zposx{\thehposcnt u}sp\relax
}
\makeatother

\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{language=C++,basicstyle=\small\sffamily,
  numbers=none,
  frame=tb,
  columns=fullflexible,
  showstringspaces=false,
  mathescape
}
\begin{document}

\begin{lstlisting}
  float f; $\hspace{250pt}\SP$// A float
  int anAptlyNamedInteger;  $\UP$// An integer
\end{lstlisting}

\end{document}

在上面的例子中(请注意listingsmathescape选项已激活)将第一个注释设置在特定位置,并使用 保存该位置\SP。后续水平对齐是使用 实现的\UP

该解决方案至少需要两次编译,因为它使用\label类似\ref系统的从文件中读取.aux

相关内容