我可以只为 lstlisting 更改字体吗?

我可以只为 lstlisting 更改字体吗?

我想保持文档的所有字体相同,只将 llstststing 环境的字体更改为合理的字体,例如IBM Plex 单声道Adobe 源代码专业版, 或者诺托无单色。这可能吗?如何可能?

梅威瑟:

\documentclass{article}

\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{plex-mono}

\usepackage[table,xcdraw]{xcolor}
\definecolor{backcolour}{rgb}{0.98,0.98,0.95}

\usepackage{listings}
\lstdefinestyle{prettycode}{
    backgroundcolor=\color{backcolour},
    aboveskip={0.9\baselineskip},               
    keepspaces=true,
}
\lstset{style=prettycode}

\begin{document}
    \section{Section One}
    \blindtext

\begin{lstlisting}[language=c, caption=Hello world program., label=listing:hello_world]
#include <stdio.h>

int main()
{
    
    // prints hello world
    printf("Hello World");
    
    return 0;
}
\end{lstlisting}
\subsection{Subsection}
    \blindtext
\end{document}

相关,但解决方案似乎会改变整个文档的打字机字体:设置 lstlisting 的字体系列

答案1

我不会对同一文档的不同部分使用不同的等宽字体。

然而,只要你深入研究一下字体包,你就可以做你想做的事。

IBM Plex Mono
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[table,xcdraw]{xcolor}
\usepackage{listings}

\definecolor{backcolour}{rgb}{0.98,0.98,0.95}

\newcommand{\listingsttfamily}{\fontfamily{IBMPlexMono-TLF}\small}

\lstdefinestyle{prettycode}{
  basicstyle=\listingsttfamily,
  backgroundcolor=\color{backcolour},
  aboveskip={0.9\baselineskip},               
  keepspaces=true,
}
\lstset{style=prettycode}

\begin{document}

\section{Section One}

Some text with a \texttt{monospaced} insert.

\begin{lstlisting}[language=c, caption=Hello world program., label=listing:hello_world]
#include <stdio.h>

int main()
{
    
    // prints hello world
    printf("Hello World");
    
    return 0;
}
\end{lstlisting}

\end{document}

在此处输入图片描述

源代码专业版

\listingsttfamily用以下行替换

\newcommand{\listingsttfamily}{\fontfamily{SourceCodePro-TLF}\small}

在此处输入图片描述

诺托无单色

用以下行替换

\newcommand{\listingsttfamily}{\fontfamily{NotoSansMono-TLF}\small}

但请注意,这没有斜体也没有倾斜的形状。

在此处输入图片描述

相关内容