使用 fancyvrb 在新命令中引入下划线与下标

使用 fancyvrb 在新命令中引入下划线与下标

我正在使用 fancyvrb 按照建议在我的 verbatim 环境中进行数学运算这里

我使用如下数学转义命令: \newcommand{\m}[1]{$#1$}

但是下划线没有被设置为下标,它们显示为下划线。

\begin{Verbatim}[commandchars=\\\{\}]
for \m{i = 1, 2, \dots n}:
    sample \m{x_i} from \m{P(X_i \vert \mathrm{Parents}(X_i))}
return \m{(x_1, x_2, \dots, x_n)}
\end{Verbatim}

在此处输入图片描述

我如何使用符号来获得下标_?我认为这与我的新命令的定义有关。

答案1

定义\m缺少一点:

\makeatletter
\newcommand{\m][1]{\def\FV@Space{ }$#1$}
\makeatother

这样空格在数学中就被当作通常处理(即被忽略)。但我还要补充一点。您可以利用在逐字模式下下划线是可打印字符的事实:

\documentclass{article}
\usepackage{fancyvrb}
\makeatletter
\newcommand{\m}[1]{%
  \begingroup
  \def\FV@Space{ }% spaces in math are ignored
  \mathcode`\_="8000 % _ is math active
  \do@@us % underscore is subscript
  $#1$%
  \endgroup
}
\newcommand{\do@@us}{%
  \begingroup\lccode`~=`\_ \lowercase{\endgroup\let~}\sb
}
\makeatother
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
for \m{i = 1, 2, \dots n}:
    sample \m{x_i} from \m{P(X_i \mid \mathrm{Parents}(X_i))}
return \m{(x_1, x_2, \dots, x_n)}
this_is_verb
\end{Verbatim}
\end{document}

在此处输入图片描述

答案2

另一种方法是在 Verbatim 环境中添加代码

\begin{Verbatim}[commandchars=\\\{\},codes={\catcode`$=3 \catcode`_=8}]
for \m{i=1,2,\dots,n}:
    sample \m{x_i} from \m{P(X_i\vert\mathrm{Parents}(X_i))}
return \m{(x_1,x_2,\dots,x_n)}
\end{Verbatim}

在此处输入图片描述

答案3

如果可能是临时解决方案,则可行如下:

\documentclass{article}

\usepackage{fancyvrb}

\begin{document}

\def\m#1{\global\catcode`\_=8$#1$}

\begin{Verbatim}[commandchars=\\\{\}]
for \m{i = 1, 2, \dots n}:
    sample \m{x_i} from \m{P(X_i \vert \mathrm{Parents}(X_i))}
return \m{(x_1, x_2, \dots, x_n)}
\end{Verbatim}


\end{document}

在此处输入图片描述

限制:1. 目前无法_在里面使用下划线Verbatim。2. 数学模式中的间距仍然很奇怪。3. 未测试冲突。

第二版 但为什么必须选择呢?如果我们使用外部的定义Verbatim并将结果注入其中,我们就会同时拥有:数学和逐字(仅替换了两种情况):

\documentclass{article}

\usepackage{fancyvrb}

\begin{document}

\def\m#1{$#1$}
\def\AAA{ \m{i = 1, 2, \dots n}}
\def\BBB{\m{(x_1, x_2, \dots, x_n)}}

\begin{Verbatim}[commandchars=\\\{\}]
for \m{i = 1, 2, \dots n}:
\AAA
    sample \m{x_i} from \m{P(X_i \vert \mathrm{Parents}(X_i))}
return \m{(x_1, x_2, \dots, x_n)}
\BBB
\end{Verbatim}


\end{document}

在此处输入图片描述

相关内容