在逐字代码列表中,我想在注释中使用内联数学,格式与正文中的内联数学相同。我可以使用数学环境,但间距很奇怪。在此示例中,尖括号内和逗号后有大量空格。
\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 规则忽略。