我正在尝试创建一些代码文件列表,这些文件的最大行长度各不相同。有没有办法确保所有列表的宽度都是 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}
原始 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 规则在列表上方引入了一些垂直间距,我无法摆脱它。