内联代码中的换行符会破坏语法高亮。有什么解决方法吗?

内联代码中的换行符会破坏语法高亮。有什么解决方法吗?

我想让代码片段 ABC 和 ABC_DEF 都变成红色(在这两种情况下,只有 ABC 是红色的)。如果我删除文字行,它就可以正常工作,但我还想在下划线处自动换行。我该如何实现这两个目标?

\documentclass{article}

\usepackage{listings}
\lstset{
    emph={ABC, ABC_DEF},
    emphstyle={\color{red}},
    literate={\_}{}{0\discretionary{\_}{}{\_}} % line breaks at underlines
}
\usepackage[colorlinks=true]{hyperref}


\begin{document}
\lstinline{ABC}
\lstinline{ABC_DEF}
\end{document}

答案1

我建议你不要在内联代码中间使用连字符,因为这可能会让读者感到困惑。如果我是你,我会稍微重新组织一下文本,以确保内联代码不会超出右侧边距。

如果你无论如何都想这么做,我不会采用你的方法;这是一种迂回的做法。一种更简单的方法可能是

  • 完全避开\lstinlineliterate关键,
  • 使用应用与列表中相同的强调样式的自定义宏:

    \makeatletter
    \newcommand\inlinecode[1]{{\lst@basicstyle\lst@emphstyle #1}}
    \makeatother
    
  • 加载underscore包(有关详细信息,请参阅这个答案由 diabonas 编写),以便在下划线字符后使用连字符:

    \usepackage{underscore}
    

在此处输入图片描述

\documentclass{article}

\usepackage[textwidth=1.5cm,showframe]{geometry}  % only for illustration purposes, here

\usepackage{xcolor}
\usepackage{listings}
\usepackage{underscore} % allows hyphenation after \_

\makeatletter
\newcommand\inlinecode[1]{{\lst@basicstyle\lst@emphstyle #1}}
\makeatother

\lstset{
    basicstyle=\ttfamily,
    emph={ABC, ABC_DEF},
    emphstyle={\color{red}},
}

\setlength{\parindent}{0pt}    


\begin{document}

\verb|\lstinline|:
\lstinline|ABC|
\lstinline|ABC_DEF|

\verb|\inlinecode|:
\inlinecode{ABC}
\inlinecode{ABC\_DEF}

\end{document}

相关内容