文档中的源代码应使用什么字体?

文档中的源代码应使用什么字体?

我目前正在写一些讨论 Python 脚本的文本。因此,文档中自然会有很多代码,看起来列表是默认的做法。

但是,与我使用乳胶时习惯的不同,默认设置看起来很糟糕! 默认

非等宽源代码!?WTF?(附带问题:或者真的有针对此的印刷“规则”?)

好的,快速阅读文档后我就可以解决这个问题\ttfamily

ttfamily 版本

但这仍然很奇怪,主要是注释的斜体部分。在我看来,这完全不对劲。

这是因为我恰好习惯了编辑器中的奇怪字体(Monospace Regular我猜不是太奇怪)并且这是正常的和印刷上合理的,还是有更好的选择?

如果是这样,那该选择是什么?我宁愿不使用我个人喜欢的随机字体,但这些字体客观上很糟糕,尤其是与我的文本默认字体(全部来自 Komas scrbook)结合使用时。

编辑:

显然,我可以使用“随机”等宽/打字机字体,但我主要担心的是,我会选择一种与文档主体的默认计算机现代字体(印刷上)不兼容的字体。因此,该字体不仅应作为可读源代码的等宽字体,还应与计算机现代字体放在一起看起来不“不合适”。因此,某种网站列表font X is compatible with font Y可能是最有用的,但我还没有找到。

另一处编辑:

我无法接受答案,因为我觉得使用 latex 时上述内容确实很重要。引用我自己对 @egreg 答案的评论:

但是,Latex 背后的整个理念难道不是脱离个人品味,转而使用“专业”判断吗?否则,我就会像其他人一样使用 Times New Roman 和 Comic Sans 字体的 Word……

但是,似乎大家都和我一样认为默认设置不是最佳的,所以我要更改它们。根据期望的结果,我认为 @egreg 和 @Thruston 的答案是不错的选择。第一个允许斜体注释,但与计算机现代相比,字体似乎不对,而第二个不能使用斜体,但字体合适。commentstyle=\color{gray}@Thruston 的答案的设置对我来说最有效,因为它可以经受黑白打印,也遵循我认为大多数编辑器中可接受的默认设置。除此之外,我不会为颜色烦恼,因为这似乎极具争议。论坛上一直有关于浅色与深色背景、日光浴主题与黑客绿的争论……所以我只坚持使用黑白(和灰色……)。

梅威瑟:

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{listings}
\lstset{language=Python, numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt, tabsize=4}%, basicstyle=\ttfamily}

\begin{document}

This is some other text.

\begin{lstlisting}
    for i in list:
        print i
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

答案1

在我看来,默认设置lstlisting非常奇怪,但驯服它们并不难。这是您的示例,带有一些额外的键和一些颜色。

在此处输入图片描述

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\definecolor{textblue}{rgb}{.2,.2,.7}
\definecolor{textred}{rgb}{0.54,0,0}
\definecolor{textgreen}{rgb}{0,0.43,0}
\usepackage{listings}
\lstset{language=Python, 
numbers=left, 
numberstyle=\tiny, 
stepnumber=1,
numbersep=5pt, 
tabsize=4,
basicstyle=\ttfamily,
keywordstyle=\color{textblue},
commentstyle=\color{textred},   
stringstyle=\color{textgreen},
frame=none,                    
columns=fullflexible,
keepspaces=true,
xleftmargin=\parindent,
showstringspaces=false}
\begin{document}

This is some other text.

\begin{lstlisting}
    for i in list:
        print i, "OK"
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

如果您想要用斜体表示注释,那么只需将其添加到以下commentstyle行:

...
commentstyle=\color{textred}\itshape,   
...

结果是:

在此处输入图片描述

欲了解更多详情,请texdoc listings...

如果你不喜欢默认的外观ttfamily,那么尝试一些不同的。您可能还需要更改正文字体以匹配单字体,当然,默认字体可能不是您想要的,但至少它们可以很好地搭配在一起。

答案2

让列表变得糟糕的不仅仅是衬线字体:主要是字体不是等宽的,因此字符看起来就像是随机地扔在页面上的。

您可以为列表添加颜色:适合屏幕阅读,不太适合打印纸。

否则,您可以寻找不同的等宽字体(我也不喜欢斜体的默认打字机类型)。

这里尝试使用 SourceCode Pro,只是为了看看结果是否更好。

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{listings}

\lstset{
  language=Python,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  numbersep=5pt,
  tabsize=4,
  basicstyle=\ttfamily,
  columns=fullflexible,
  keepspaces,
}

\begin{document}

This is some other text.

\begin{lstlisting}
    for i in list:
        print i
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

This is some other text.

% roughly emulate \usepackage{sourcecodepro}
\lstset{
  basicstyle=\fontfamily{SourceCodePro-TLF}\selectfont
}

\begin{lstlisting}
    for i in list:
        print i
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

在此处输入图片描述

好吧,我们假设你喜欢它。但它确实太大了:我们可以修复它。

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\usepackage[scale=0.85]{sourcecodepro}

\lstset{
  language=Python,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  numbersep=5pt,
  tabsize=4,
  basicstyle=\ttfamily,
  columns=fullflexible,
  keepspaces,
}

\begin{document}

This is some other text.

\begin{lstlisting}
    for i in list:
        print i
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

在此处输入图片描述

还有几种其他等宽字体可用,请参阅LaTeX 字体目录

另一个选择可能是 LuxiMono:

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings}

\usepackage[scaled=0.85]{luximono}

\lstset{
  language=Python,
  numbers=left,
  numberstyle=\tiny,
  stepnumber=1,
  numbersep=5pt,
  tabsize=4,
  basicstyle=\ttfamily,
  columns=fullflexible,
  keepspaces,
}

\begin{document}

This is some other text.

\begin{lstlisting}
    for i in list:
        print i0123
        # prints every entry in a list
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

在此处输入图片描述

答案3

个人认为,对于listing来说,根本的标准就是0和O不一样,inconsolata字体就完美了。

不幸的

\documentclass[a4paper,11pt, headings=normal, toc=bibliography, toc=listof]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage{listings}
\lstset{language=Python, numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt, tabsize=4, basicstyle=\ttfamily}
\usepackage{inconsolata}
\begin{document}

This is some other text.

the 0 is not crossed out like the letter O

\begin{lstlisting}
    for i in list:
        print i
        # prints every entry in a list
        #  the 0 is crossed out unlike the letter O
\end{lstlisting}

This here is also non, sourcecode text.

\end{document}

相关内容