我尝试listings
使用 FiraCode 在我的框架中设置蓝色,但有时我需要在lstlisting
环境中使用另一种颜色。我通过定义另一个字体系列来实现这一点。它们*
不在同一个位置,我不知道为什么……我的代码有什么问题?
在这里我提供一个平均能量损失
\documentclass{beamer}
\usepackage{fontspec}
\usepackage{listings}
\setmonofont{Fira Code}[Color=blue]
\newfontfamily{\lstcolor}{Fira Code}[Color=red]
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}[language=R, basicstyle=\ttfamily]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\begin{lstlisting}[language=R, basicstyle=\ttfamily\lstcolor]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\end{frame}
\end{document}
答案1
列表根据字体使用不同的符号定义:它会尝试检测是否使用了 \ttdefault。
你可以统一这两个定义:
\documentclass{beamer}
\usepackage{fontspec}
\usepackage{listings}
\setmonofont{Fira Code}[Color=blue]
\newfontfamily{\lstcolor}{Fira Code}[Color=red]
\makeatletter
\lst@CCPutMacro
\lst@ProcessOther {"2A}{%
\lst@ttfamily
{*}% used with ttfamily
{*}}% used with other fonts
\@empty\z@\@empty
\makeatother
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}[language=R, basicstyle=\ttfamily]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\begin{lstlisting}[language=R, basicstyle=\ttfamily\lstcolor]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\end{frame}
\end{document}
答案2
您可以通过颜色命令正常设置颜色来避免整个问题,而不是滥用单独的字体命令来设置不同的颜色:
\documentclass{beamer}
\usepackage{fontspec}
\usepackage{listings}
\setmonofont{Fira Code}
\begin{document}
\begin{frame}[fragile]
\begin{lstlisting}[language=R, basicstyle=\ttfamily\color{blue}]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\begin{lstlisting}[language=R, basicstyle=\ttfamily\color{red}]
> 5!=5*4*3*2*1
[1] TRUE
\end{lstlisting}
\end{frame}
\end{document}