将带点的后缀视为列表中的关键字

将带点的后缀视为列表中的关键字

我正在用 latex 编写 C++ 代码列表

我正在努力列表将后缀识别.t() 为关键字(这意味着矩阵转置犰狳C++ 库)。

我试图让.()识别为字母(如列表手册和这里) alsoletter={.,(,)}同时添加.t()为关键字,但是没有起到作用。

我也看到了一个办法其中涉及将关键字定义为注释,但我不想这样做,因为我需要出于不同目的的注释。

以下是一个最小的可重现示例:

\documentclass[10pt,a4paper,]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,dvipsnames]{xcolor}

\usepackage{listings}

\lstnewenvironment{Cppinput}[1][]{
 \lstset{%
   language={C++},
   alsoletter={.,(,)}, % I also tried {.t()}
   morekeywords={mat, .t() , ones},
   morecomment=[l]//,
   basicstyle= \ttfamily,
   keywordstyle= \color{BrickRed},  
   frame=single, 
   #1
 }
}{}


\begin{document}

\begin{Cppinput}
using namespace arma; 

mat A;
mat B;
mat C,

A = B + ones<mat>(n,1) + C.t();
// the ".t()" should be highlited as a keyword.
\end{Cppinput}

\end{document}

我有预感解决方案可能涉及alsoother=(),但我无法从手册中理解它的语法,并且在我的例子中它没有这样写alsoother=(.t())

答案1

您可以使用otherkeywords您的特殊字符串;来自listings以下文档otherkeywords

定义包含其他字符或以数字开头的关键字。每个给定的“关键字”都以关键字样式打印,但不改变字符的“字母”、“数字”和“其他”状态。此键用于定义诸如 、=>->-->--::关键字。

\documentclass[10pt,a4paper,]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings}

\lstnewenvironment{Cppinput}[1][]{
 \lstset{%
   language={C++},
   otherkeywords={.t()},
   morekeywords={mat,ones},
   morecomment=[l]//,
   basicstyle= \ttfamily,
   keywordstyle= \color{BrickRed},  
   frame=single, 
   #1
 }
}{}

\begin{document}

\begin{Cppinput}
using namespace arma; 

mat A;
mat B;
mat C,

A = B + ones<mat>(n,1) + C.t();
// the ".t( )" is highlited as a keyword.
\end{Cppinput}

\end{document}

在此处输入图片描述

相关内容