仅将一行代码居中(例如注释)

仅将一行代码居中(例如注释)

在我的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{...}在将框设置为“常规”高度之前,先移除框内包含的任何额外高度。

相关内容