在列表中以数学转义模式获取正确的排版

在列表中以数学转义模式获取正确的排版

listings在我想要在 mathescape 中执行的环境中$\text{\ttfamily\_}$。想要这样做的原因是为了能够在执行某些伪代码样式时使用\left和。示例:\right

\documentclass{article}
\usepackage{listings}
\usepackage{amsmath}
\lstdefinestyle{mystyle}{
  basicstyle=\ttfamily,
  mathescape
}
\begin{document}
\bgroup
  \begin{lstlisting}[style=mystyle]
    $\displaystyle\left(\sum_i\text{\ttfamily my\_var}\right)$:
    $\texttt{my\_var}\neq$ my_var because $\texttt\_\neq$_
  \end{lstlisting}
\egroup
\end{document}

结果: 示例代码的输出

在上面的输出中,字母之间的字距和下划线粗细都不正确。我可以接受字距,但我需要修复下划线。有什么建议吗?

感谢:D

答案1

对于下划线,请使用 T1 编码。列表中的间距由列表设置/添加,因此您需要进行调整。

\documentclass{article}
\usepackage{listings}
\usepackage{amsmath}
\lstdefinestyle{mystyle}{
  basicstyle=\ttfamily,
  mathescape
}
\usepackage[T1]{fontenc}
\begin{document}
\bgroup
  \begin{lstlisting}[style=mystyle]
    $\displaystyle\left(\sum_i\text{\ttfamily my\_var}\right)$:
    $\texttt{my\_var}\neq$ my_var because $\texttt\_\neq$_
  \end{lstlisting}
\egroup
\end{document}

在此处输入图片描述

答案2

如果有人决定忽视为何应使用 \usepackage[T1]{fontenc}并且只是想要一个肮脏的修复来使用fontenc列表中的:

\documentclass{article}
\usepackage{listings}
\usepackage{amsmath}
\lstdefinestyle{mystyle}{
  basicstyle=\ttfamily,
  mathescape,
  columns=fullflexible%<- Letter kerning fix from @egreg's comment
}
\begin{document}
\bgroup
  \fontencoding{T1}%<- Temporary change font encoding (not recommended)
  \begin{lstlisting}[style=mystyle]
    $\displaystyle\left(\sum_i\text{\ttfamily my\_var}\right)$:
    $\texttt{my\_var}=$ my_var because $\texttt\_=$_
  \end{lstlisting}
\egroup
\end{document}

相关内容