将数学放入逐字环境中而不改变格式

将数学放入逐字环境中而不改变格式

在逐字代码列表中,我想在注释中使用内联数学,格式与正文中的内联数学相同。我可以使用数学环境,但间距很奇怪。在此示例中,尖括号内和逗号后有大量空格。

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}

\begin{Verbatim}[commandchars=\\\{\},codes={\catcode`^=7}]
# visit each \(\langle x, y \rangle \in s^2\)
for x in s:
  for y in s:
    foo(x, y)
\end{Verbatim}

\end{document}

有没有办法获得正常间距?

有关的:如何在逐字模式下使用数学符号?

答案1

在逐字模式下,空格会被遵守,当在输入中找到空格时,Verbatim将使用(反斜杠空格)。有一些解决方法。在所有示例中,我都省略了\catcode`^=7\sp而更喜欢^;但您也可以使用您的选项。

使用空组

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}

\begin{Verbatim}[commandchars=\\\{\}]
# visit each \(\langle{}x,y\rangle\in{}s\sp{2}\)
for x in s:
  for y in s:
    foo(x, y)
\end{Verbatim}

\end{document}

这添加了普通的数学原子,但它很少会成为与间距相关的问题。

使用 noop 宏

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}

\newcommand{\?}{}

\begin{Verbatim}[commandchars=\\\{\}]
# visit each \(\langle\?x,y\rangle\in\?s\sp{2}\)
for x in s:
  for y in s:
    foo(x, y)
\end{Verbatim}

\end{document}

这样可以避免所有可能的间距问题。请注意,使用了控制符号,因此无需用空格分隔。

在数学模式下再次使该空格成为被忽略的空格

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}

\makeatletter
\newcommand{\verbmathspace}{\let\FV@Space\space}
\makeatother

\begin{Verbatim}[commandchars=\\\{\},
  codes=\everymath\expandafter{\the\everymath\verbmathspace}]
# visit each \(\langle x, y\rangle\in s\sp{2}\)
for x in s:
  for y in s:
    foo(x, y)
\end{Verbatim}

\end{document}

在数学模式中,该空间将恢复为正常空间,因此它将被 TeX 规则忽略。

所有示例的输出

在此处输入图片描述

相关内容