我使用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}
在上面的例子中(请注意listings
的mathescape
选项已激活)将第一个注释设置在特定位置,并使用 保存该位置\SP
。后续水平对齐是使用 实现的\UP
。
该解决方案至少需要两次编译,因为它使用\label
类似\ref
系统的从文件中读取.aux
。