我正在写一篇论文,并整理了一份“漂亮”的清单。我正在考虑为代码视图设置一个小字体样式。我这里有:
\usepackage{listings}
\lstset{language=C,
numberstyle=\footnotesize,
basicstyle=\footnotesize,
numbers=left,
stepnumber=1,
frame=shadowbox,
breaklines=true}
%\usepackage[subsection]{placeins}
\usepackage{float}
但这是以典型的字距调整字体显示的,而我正在寻找较小的等宽字体,例如 10 点左右。
答案1
使用默认
basicstyle=\footnotesize\ttfamily,...
或更好的包microtype
\usepackage[T1]{fontenc}
\usepackage[scaled]{beramono}
\newcommand\Small{\fontsize{9}{9.2}\selectfont}
\newcommand*\LSTfont{\Small\ttfamily\SetTracking{encoding=*}{-60}\lsstyle}
...
\begin{lstlisting}[basicstyle=\LSTfont,...]
...
这会带来更好的结果。
答案2
\ttfamily
您在 中缺少basicstyle
。如果这不能提供您想要的大小,请尝试\scriptsize
或 甚至\tiny
代替\footnotesize
。您不需要numberstyle
再次为 增加相同的大小,因为basicstyle
默认用于所有内容。
\documentclass{article}
\usepackage{listings}
\lstset{language=C,
numberstyle=\footnotesize,
basicstyle=\ttfamily\footnotesize,
numbers=left,
stepnumber=1,
frame=shadowbox,
breaklines=true}
\begin{document}
Normal text
\begin{lstlisting}
int a, b, c;
b = 2;
c = b++;
a = b + c;
\end{lstlisting}
Normal text
\end{document}
答案3
“kerned” 外观源自包的默认设置listings
。
默认设置basicstyle=\ttfamily
包默认listings
使用columns=fixed
。它提供了最佳的垂直对齐方式,您可以在源代码编辑器中看到等宽字体的代码。设置意味着,字符被放置在宽度为的框中0.6em
:
\documentclass{article}
% Quick alignment test:
% MMMM a
% iiii a
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
% basewidth = {.5em,0.5em},
% columns = flexible,
% columns = fullflexible,
}
% \usepackage[T1]{fontenc}
% \usepackage[variablett]{lmodern}
\begin{document}
\lstinputlisting[
language={[LaTeX]{TeX}},
]{\jobname.tex}
\end{document}
优化basewidth
固定列的宽度0.6em
考虑到较宽的字符也应适合框而不与相邻字符重叠。但是等宽字体的所有字符已经有固定的宽度。字符的宽度通常为0.5em
,其中字体设计者已经压缩了较宽的字形。因此,我们可以将 其basewidth
从减少0.6em,0.45em
到0.5em,0.5em
。第二个值用于columns=flexible
。此模式不对齐所有字符,而是对齐单词。单词通常具有较窄和较宽的字符,因此平均值小于最宽字符的宽度。但这对等宽字体没有意义。小于字形宽度的值只会扰乱垂直对齐。
\documentclass{article}
% Quick alignment test:
% MMMM a
% iiii a
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
basewidth = {.5em,0.5em},
% columns = flexible,
% columns = fullflexible,
}
% \usepackage[T1]{fontenc}
% \usepackage[variablett]{lmodern}
\begin{document}
\lstinputlisting[
language={[LaTeX]{TeX}},
]{\jobname.tex}
\end{document}
可变宽度打字机字体
如果垂直对齐不是太重要(如\lstset
示例中的行),则可以使用可变宽度的打字机字体。拉丁现代字体(计算机现代字体的进一步发展)提供了这种字体,可以通过variablett
包的选项启用lmodern
。(也\fontfamily{lmvtt}\selectfont
可以使用。)
因为在固定列中设置可变宽度字体看起来比使用等宽字体更丑陋,所以示例中使用了columns=flexible
。此外,basewidth
将缩减为0.4em
(默认会0.45em
留下太多间隙)。
\documentclass{article}
% Quick alignment test:
% MMMM a
% iiii a
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
basewidth = {.5em,0.4em},
columns = flexible,
% columns = fullflexible,
}
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
\begin{document}
\lstinputlisting[
language={[LaTeX]{TeX}},
]{\jobname.tex}
\end{document}
- 灵活的列设置有一个缺点,即行内的垂直对齐可能会丢失。不过,行缩进可以正常工作。
- 作为额外的优势,拉丁现代字体提供了粗体版本(也有等宽变体)。
具有完全灵活列的可变宽度打字机字体
现在来看设置示例columns=fullflexible
:
\documentclass{article}
% Quick alignment test:
% MMMM a
% iiii a
\usepackage{listings}
\lstset{
basicstyle = \ttfamily,
basewidth = {.5em,0.4em},
% columns = flexible,
columns = fullflexible,
}
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
\begin{document}
\lstinputlisting[
language={[LaTeX]{TeX}},
]{\jobname.tex}
\end{document}
概括
我会使用拉丁现代字体而不是计算机现代字体,因为它们提供更多字体变体,包括粗体。
如果源代码包含某种表格,并且垂直对齐很重要,则
basewidth
可以使用调整后的等宽字体:\lstset{ basicstyle=\ttfamily, basewidth={0.5em,0.5em}, } \usepackage[T1]{fontenc} \usepackage{lmodern}
如果源代码仅要求缩进行作为垂直对齐,则可以使用可变宽度的打字机字体:
\lstset{ basicstyle=\ttfamily, % basewidth={0.5em,0.4em}, % for other columns settings columns=fullflexible, } \usepackage[T1]{fontenc} \usepackage[variablett]{lmodern}
如果代码包含许多无法容纳在行的可用空间中的长行,这也会减少行的长度,这是一个优势。