我正在为氧合剂工具。我需要创建一组新关键字。当我尝试在其中一个关键字中使用逗号时,它不会突出显示。我用反斜杠保护逗号,但似乎没用。
有人知道如何在新关键词中使用逗号吗?
这是我尝试过的。
\lstdefinelanguage{doxygen}%
{
alsoletter={\\,[,],/,*,\,},%
morekeywords=[2]{/**,*/,///,\\brief,\\author,\\date,%
\\return,\\param[in,out],\\param[in],\\param[out],%
\\pre,\\post},%
otherkeywords={},%
morestring=[b]"
}
问题出在\param[in,out]
关键字上。
[编辑] 这是一个最小的例子
% !TEX TS-program = pdflatex
\documentclass[11pt]{article}
\usepackage[dvipsnames,usenames]{xcolor}
\usepackage{courier}
\usepackage{listings}
\lstdefinelanguage{doxygen}%
{
alsoletter={\\,[,],/,*,\,},%
morekeywords=[2]{/**,*/,\\brief,%
\\return,\\param[in,out],\\param[in],\\param[out]}
}
\lstdefinestyle{basic}{
basicstyle={\small \ttfamily},
keywordstyle={\bfseries\color{black}},
linewidth={\textwidth}
}
\begin{document}
\begin{lstlisting}[language=doxygen,style=basic]
/**
\brief compute the gcd
\param[in] n the first number
\param[in,out] m the second number and
and gcd after the function returns
\return terminaison code
*/
\end{lstlisting}
\end{document}
谢谢。
答案1
在我看来,问题不在于您希望\param[in,out]
— 以及\param[in]
和\param[out]
— 成为关键字;问题在于您希望方括号中的参数以与关键字相同的方式排版。您可以通过定义一种特殊的“注释”(实际上只是一段字符)来实现这一点,该注释由[
和分隔]
,并且其排版方式与关键字相同。
使用相同的前言和示例:
\newcommand\keywordstyle{\bfseries\color{black}}
\lstdefinelanguage{doxygen}{
alsoletter={\\,/,*},
morekeywords=[2]{/**,*/,\\brief,\\return,\\param},
morecomment=[n][\keywordstyle]{[}{]}
}
\lstdefinestyle{basic}{
basicstyle={\small\ttfamily},
keywordstyle={\keywordstyle},
linewidth={\textwidth}
}
结果:
由于我已经定义了块的样式[...]
,它将正确地突出显示嵌套的括号对 - 无论它们出现在哪里,这可能是也可能不是你想要的 doxygen(我不熟悉)。
答案2
你需要重新定义,
被对待的方式listings
通过实验文学编程功能。这将使用literate[*]<replacement>...<replacement>
宏。
\lstdefinelanguage{doxygen}%
{
alsoletter={\\,/,*,[,]},%
morekeywords=[2]{/**,*/,\\brief,%
\\return,,\\param[in,out],\\param[in],\\param[out]},
literate=*{|}{,}{1}
}
以上确实不是定义,
为alsoletter
。但是,替换宽度的literate=*{|}{,}{1}
出现。注意星号,这是|
,
1
*
包装文档:
可选星号表示不应在字符串、注释和其他分隔文本中进行文字替换
替换后,\param[in|out]
变成\param[in,out]
,被识别为中的关键字\morekeywords[2]{...,\\param[in,out],...}
。
您的代码段现在具有以下形式:
\begin{lstlisting}[language=doxygen,style=basic]
/**
\brief compute the gcd
\param[in] n the first number
\param[in|out] m the second number and
and gcd after the function returns
\return termination code
*/
\end{lstlisting}
一个简单的解决方法就是仅仅使用;
而不是(当然,,
将其添加到alsoletter
或)。alsodigit