如何使用 breaklines=true 对齐 lstlisting 中的列?

如何使用 breaklines=true 对齐 lstlisting 中的列?

该问题在下图中以红色标出。

在此处输入图片描述

我可以猜出其中的正确缩进breakindentpt但肯定有更好的方法。

\documentclass{article}
\usepackage{listings}

\lstset{basicstyle=\ttfamily,
  breaklines=true,
  breakatwhitespace=true,
  columns=flexible,
  keepspaces=true,
  %breakindent=20.9pt,
}

\begin{document}
\begin{lstlisting}
IIII IIII IIII IIII IIII IIII
IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII
    IIIIII IIIIII IIIIII
\end{lstlisting}
\end{document}

答案1

我会使用以“em”为单位表示的值:该单位与大写字母“M”的宽度直接相关(至少在理论上如此),并且由于 listings 使用等宽字体,因此这也是“I”(+ 字母间距)的宽度。(另一种定义是 1em 等于字体大小,但在这两种情况下,您都有一个随所选字体大小而变化的单位)。

答案2

在此处输入图片描述

\documentclass{article}
\usepackage{listings}

\settowidth{\dimen0}{\ttfamily I}%
\lstset{basicstyle=\ttfamily,
  breaklines=true,
  breakatwhitespace=true,
  breakindent=4\dimen0,
  columns=flexible,
  keepspaces=true,
}

\begin{document}
\begin{lstlisting}
IIII IIII IIII IIII IIII IIII
IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII IIIII
    IIIIII IIIIII IIIIII
\end{lstlisting}
\end{document}

假设您希望缩进 4 个“空格”。如果您使用列表样式,情况会有所不同\small,那么您需要重新计算 tt“I”的宽度\small

相关内容