我正在用 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}