我想让代码片段 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
我建议你不要在内联代码中间使用连字符,因为这可能会让读者感到困惑。如果我是你,我会稍微重新组织一下文本,以确保内联代码不会超出右侧边距。
如果你无论如何都想这么做,我不会采用你的方法;这是一种迂回的做法。一种更简单的方法可能是
- 完全避开
\lstinline
和literate
关键, 使用应用与列表中相同的强调样式的自定义宏:
\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}