设置列表中的最小宽度

设置列表中的最小宽度

我正在尝试创建一些代码文件列表,这些文件的最大行长度各不相同。有没有办法确保所有列表的宽度都是 63 个字符,而不管最长的一行有多长?我尝试使用该linewidth选项,但似乎不起作用,而且我必须给它一个长度,而不是我希望行长度的字符数。

有没有像这样简单的选项setminimumwidth=63?我试过文档,但linewidth我只找到了其中的一小部分。

编辑:这是 Zxcvasdf 答案的修改代码,适用于standalone-class 文档。它适用于少于 64 个字符的行,但当standalone行长超过 63 个字符时, 的裁剪会在右侧添加额外的空间。

\documentclass[10pt,tikz,
margin={6mm 0 0 2mm} % left bottom right up
]{standalone}

\usepackage{listings}

\lstset{
    basicstyle=\small\ttfamily,
    frame=tb,
    basewidth=4.5pt, % half of small font size
    breaklines,
    linewidth=283.5pt, % number of cols * basewidth = 63 * 4.5 pt
    numbers = left
}

\begin{document}

\begin{tikzpicture}
% hack: ensure the listing is 63-chars long
\draw (283.5pt,0) circle [radius=0mm];

\node at (0,0) {
\begin{lstlisting}
some
code
\end{lstlisting}
};
\end{tikzpicture}

\end{document}

输出看起来与 63 个或更少的字符行一致 输出看起来与 63 个或更少的字符行一致

原始 MWE:

\documentclass[tikz,dvipsnames,margin={0.8cm 0 0 0}]{standalone}

\usepackage{listings}

\lstset{
  basicstyle=\small\ttfamily,
  linewidth=20em} % How to set a minimum char-based width?

\begin{document}
\begin{tikzpicture}

\node at (0,0) {
    \begin{lstlisting}
    some
    code
    \end{lstlisting}
};
\end{tikzpicture}
\end{document}

答案1

这取决于您的文档字体大小。如果您使用 10pt 普通字体,则\small使用 9pt。与basewidth选项一起,您可以设置字符限制。

l在下面的清单中,短语中的字母l ong在第 63 列结束,并且根据需要,代码在这里换行。

\documentclass[10pt]{article}

\usepackage{listings}
\usepackage{tikz}

\lstset{
    basicstyle=\small\ttfamily,
    frame=tb,
    basewidth=4.5pt, % half of small font size
    breaklines,
    linewidth=283.5pt, % number of cols * basewidth = 63 * 4.5 pt
} % How to set a minimum char-based width?

\begin{document}
\begin{tikzpicture}
    
\node at (0,0) {
\begin{lstlisting}
some
code
A long long long long long long long long long long long long l ong long line
\end{lstlisting}
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

编辑

事实证明,如果你移除tikzpicture环境,那么varwidth选项standalone就会处理好一切。

\documentclass[varwidth,border=5pt]{standalone}

\usepackage{listings}

\lstset{
    basicstyle=\small\ttfamily,
    frame=tb,
    basewidth=4.5pt, % half of small font size
    breaklines,
    postbreak={\space\space\space},
    linewidth=283.5pt, % number of cols * basewidth = 63 * 4.5 pt
} % How to set a minimum char-based width?

\begin{document}
\begin{lstlisting}
some
code
A long long long long long long long long long long long long l ong long line
\end{lstlisting}
\end{document}

在此处输入图片描述

编辑2

如果您希望较短的代码保留相同的长度,这是另一种不使用 tikz 的技巧。

\documentclass[varwidth,border=5pt]{standalone}

\usepackage{listings}

\lstset{
    basicstyle=\small\ttfamily,
    frame=tb,
    basewidth=4.5pt, % half of small font size
    breaklines,
    postbreak={\space\space\space},
    linewidth=283.5pt, % number of cols * basewidth = 63 * 4.5 pt
} % How to set a minimum char-based width?

\begin{document}
\rule{283.5pt}{0pt}
\begin{lstlisting}
some
code
A long long long long long long long long long long long long l ong long line
\end{lstlisting}
\end{document}

短代码输出: 在此处输入图片描述

长代码输出: 在此处输入图片描述

您可能注意到,0pt 规则在列表上方引入了一些垂直间距,我无法摆脱它。

相关内容