在 lstlisting 环境中划下划线

在 lstlisting 环境中划下划线

我希望获得与在环境\underline中获得的相同的结果lstlisting

我几乎确信我是通过这种方式得到它的:

\documentclass{article}

\usepackage{listings}
\usepackage{upquote}

\lstdefinestyle{myStyle}{
  language=SQL,
  basicstyle=\small\ttfamily,
  moredelim=[is][\underbar]{_}{_},
  keepspaces=true
}

\begin{document}

\begin{lstlisting}[style=myStyle]
SELECT * FROM usr WHERE _id = 7_
\end{lstlisting}

\end{document}

但是当我使用_之间的分隔符时''它不起作用:

\documentclass{article}

\usepackage{listings}
\usepackage{upquote}

\lstdefinestyle{myStyle}{
  language=SQL,
  basicstyle=\small\ttfamily,
  moredelim=[is][\underbar]{_}{_},
  keepspaces=true
}

\begin{document}

\begin{lstlisting}[style=myStyle]
SELECT * FROM usr WHERE id ='_7_'
\end{lstlisting}

\end{document}

结果

我怎么解决这个问题?

答案1

可能有更简单的方法,但由于lstlisting是逐字环境,因此\underline无法以这种方式工作(因为任何其他命令也会失败)。必须使用用户定义的 escapechar 转义到 LaTeX,我%为此选择了

\documentclass{article}

\usepackage{listings}
\usepackage{upquote}

\lstdefinestyle{myStyle}{
  language=SQL,
  basicstyle=\small\ttfamily,
  moredelim=[is][\underbar]{_}{_},
  keepspaces=true
}

\begin{document}

\begin{lstlisting}[style=myStyle,escapechar=\%]
SELECT * FROM usr WHERE %\underline{id} = \underline{7}%
\end{lstlisting}

\end{document}

在此处输入图片描述

相关内容