我目前正在写一些讨论 Python 脚本的文本。因此,文档中自然会有很多代码,看起来列表是默认的做法。
非等宽源代码!?WTF?(附带问题:或者真的有针对此的印刷“规则”?)
好的,快速阅读文档后我就可以解决这个问题\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}