边注和 Verbatim 环境 (fancyvrb)

边注和 Verbatim 环境 (fancyvrb)

我想在 Verbatim 环境旁边添加边注,但出现错误“不在外部 par 模式中”。虽然这在 lstlisting 环境中运行良好。有什么解决办法吗?

\documentclass{article}

\usepackage{listings}
\lstset{
    frame=single,
    escapechar=!,
}
\usepackage{fancyvrb}

\begin{document}

\begin{lstlisting}
text inside listings... !\marginpar{Working well}!
\end{lstlisting}

\begin{Verbatim}[frame=single, commandchars=\\\{\}]
text inside Verbatim... \marginpar{Not working}
\end{Verbatim}

\end{document}

答案1

Verbatim将每一行排版在一个框中,所以\marginpar不存在问题。

您可以使用marginnote\normalfont这是必要的,否则您将得到打字机类型。

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{marginnote}

\newcommand{\vmnote}[1]{\marginnote{\normalfont#1}}

\begin{document}

\begin{Verbatim}[frame=single, commandchars=\\\{\}]
text inside Verbatim... \vmnote{Working}
\end{Verbatim}

\end{document}

在此处输入图片描述

对于更复杂的文本,您需要使用标准类别代码重新扫描参数:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{marginnote}

\ExplSyntaxOn
\NewDocumentCommand{\vmnote}{m}
 {
  \marginnote
   {
    \normalfont % override verbatim font
    % rescan the argument with normal category codes
    \tl_rescan:nn { \cctab_select:N \c_document_cctab} { #1 }
   }
 }
\ExplSyntaxOff

\begin{document}

\begin{Verbatim}[frame=single, commandchars=\\\{\}]
text inside Verbatim... \vmnote{Working $\alpha^2$}
\end{Verbatim}

\end{document}

在此处输入图片描述

相关内容