如何將變數從變數傳遞到“Verbatim”環境?

如何將變數從變數傳遞到“Verbatim”環境?

我需要傳遞給環境的參數Verbatim位於變數中。我正在嘗試這樣做:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\def\opts{numbers=left}
\begin{Verbatim}[\opts]
Hello, world!
\end{Verbatim}
\end{document}

顯然,t 失敗了:

! Package keyval Error: numbers=left undefined.

See the keyval package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.5 \begin{Verbatim}[\opts]

正確的方法是什麼?

答案1

您通常不想傳遞選項宏,而是定義一個新鍵。

\documentclass{article}
\usepackage{fancyvrb}

\makeatletter
\define@key{FV}{opts}[]{%
  \setkeys{FV}{
    numbers=left,
    % additional options
  }%
}
\makeatother

\begin{document}

\begin{Verbatim}[opts]
Hello, world!
\end{Verbatim}

\end{document}

如果您堅持傳遞巨集,則需要在環境解析它們之前擴展它們。

\documentclass{article}
\usepackage{fancyvrb}

\newcommand{\opts}{numbers=left}

\begin{document}

\expanded{\noexpand\begin{Verbatim}[\opts]}
Hello, world!
\end{Verbatim}

\end{document}

但我不能推薦這個。

另一個策略是定義一個新的 Verbatim:

\documentclass{article}
\usepackage{fancyvrb}

\DefineVerbatimEnvironment{lVerbatim}{Verbatim}{numbers=left}

\begin{document}

\begin{lVerbatim}
Hello, world!
\end{lVerbatim}

\end{document}

答案2

您需要\opts在呼叫之前進行擴充Verbatim。這是一種可以完成的方法。

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\def\opts{numbers=left}
\def\z{\begin{Verbatim}}
\expandafter\z\expandafter[\opts]
Hello, world!
\end{Verbatim}
\end{document}

在此輸入影像描述

相關內容