列表和颜色改变角色的位置

列表和颜色改变角色的位置

我尝试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}

在此处输入图片描述

相关内容