![列表字体大小适合 80 列吗?](https://linux22.com/image/278440/%E5%88%97%E8%A1%A8%E5%AD%97%E4%BD%93%E5%A4%A7%E5%B0%8F%E9%80%82%E5%90%88%2080%20%E5%88%97%E5%90%97%EF%BC%9F.png)
我想使用 listing 包将代码包含在我的 LaTeX 文档中。
我在谷歌上搜索没有找到任何字体大小的配置,实际上可以适合文档宽度的大约 80 列。
我见过的大多数示例都使用预定义的尺寸:
\lstset{
basicstyle=\ttfamily\footnotesize,
...
}
到目前为止,我发现的所有的都太大(\small
,\footnotesize
,\scriptsize
)或太小(\tiny
)。
有没有办法手动配置字体的大小(可能不会弄乱所有其他字体配置),或者至少有一个接近 80 列的预配置设置?
我意识到利润率可能会有所不同等等,但到目前为止,我所看到的所有利润率都相差甚远。
答案1
由于使用了离散步骤,因此可能会有点短。我尝试了各种字体大小,直到适合八十列。使用可自由缩放的字体很重要,否则长度会更短(由您决定),因此要么使用fix-cm
PostScriptlmodern
字体,要么使用打字机字体。
\documentclass[11pt]{article}
% freely scalable fonts
\usepackage{fix-cm}
\usepackage{listings}
\usepackage{lipsum} % for the example
\newlength{\eightytt}
\newcommand{\testthewidth}{%
\fontsize{\dimen0}{0}\selectfont
\settowidth{\dimen2}{x}%
\ifdim 80\dimen2>\textwidth
\advance\dimen0 by -.1pt
\expandafter\testthewidth
\else
\global\eightytt\dimen0
\fi
}
\AtBeginDocument{%
\dimen0=\csname f@size\endcsname pt
\begingroup
\ttfamily
\testthewidth
\endgroup
\lstset{
columns=fullflexible,
basicstyle=\fontsize{\eightytt}{1.2\eightytt}\ttfamily
}%
}
\begin{document}
\lipsum[2]
\begin{lstlisting}
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
\end{lstlisting}
\end{document}
如果需要非灵活的列,我们可以考虑到当前字体中单元格宽度的默认值为 0.6em:
\documentclass[11pt]{article}
% freely scalable fonts
\usepackage{fix-cm}
\usepackage{listings}
\usepackage{lipsum} % for the example
\newlength{\eightytt}
\newcommand{\testthewidth}{%
\fontsize{\dimen0}{0}\selectfont
\sbox0{x\global\dimen1=0.6em}%
\ifdim 80\dimen1>\textwidth
\advance\dimen0 by -.1pt
\expandafter\testthewidth
\else
\global\eightytt\dimen0
\fi
}
\AtBeginDocument{%
\dimen0=\csname f@size\endcsname pt
\begingroup
\ttfamily
\testthewidth
\endgroup
\lstset{
basicstyle=\fontsize{\eightytt}{1.2\eightytt}\ttfamily
}%
}
\begin{document}
\lipsum[2]
\begin{lstlisting}
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
\end{lstlisting}
\end{document}