如何在列表关键字中使用逗号?

如何在列表关键字中使用逗号?

我正在为氧合剂工具。我需要创建一组新关键字。当我尝试在其中一个关键字中使用逗号时,它不会突出显示。我用反斜杠保护逗号,但似乎没用。

有人知道如何在新关键词中使用逗号吗?

这是我尝试过的。

\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

相关内容