在我的lstlisting
我想发表一个评论的形式
/*====== some section ====== */
但要让它居中,而不是像其他代码行那样左对齐。使用转义字符,然后
\begin{center}
...
\end{center}
不行,因为我想保持这种lstlisting
模式,
\centering
什么也没做。
有没有可以满足我的要求的解决方案?
答案1
插入您想要居中的代码\makebox[\linewidth]
:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\begin{document}
\begin{lstlisting}[basicstyle=\ttfamily,mathescape,frame=lr]
Here is some code
$\makebox[\linewidth]{/*~====~Some comment~====~*/}$
Here is some more code
\end{lstlisting}
\end{document}
\makebox
进入固定宽度的默认对齐方式c
。
为了获得与您的相关的适当的评论风格\lstset
,您可以使用
...
$\makeatletter%
\makebox[\linewidth]{\lst@commentstyle/*~====~Some comment~====~*/}%
\makeatother$
...
这会在数学下转义,但在打印实际评论之前插入评论样式\lst@commentstyle
。但是,这并不完美,因为转义似乎会删除某些字体设置。一种更强大(但麻烦)的方法是遵循 Martin 的建议:将评论的内容存储在一个框中外部列表,然后再次包含它:
\documentclass{article}
\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{language=C,basicstyle=\ttfamily}
\newsavebox{\lstsavebox}
\begin{document}
\begin{lrbox}{\lstsavebox}
\begin{lstlisting}
/* ==== Some comment ==== */
\end{lstlisting}
\end{lrbox}
\begin{lstlisting}[mathescape,frame=lr]
Here is some code
$\makeatletter%
\makebox[\linewidth]{\lst@commentstyle/*~====~Some comment~====~*/}%
\makeatother$
Here is some code
$\makebox[\linewidth]{\strut\smash{\usebox{\lstsavebox}}}$
\end{lstlisting}
\end{document}
\strut\smash{...}
在将框设置为“常规”高度之前,先移除框内包含的任何额外高度。