変数から「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}

しかし、これはお勧めできません。

もう 1 つの戦略は、新しい Verbatim を定義することです。

\documentclass{article}
\usepackage{fancyvrb}

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

\begin{document}

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

\end{document}

答え2

\optsを呼び出す前に展開する必要がありますVerbatim。これを行う 1 つの方法を次に示します。

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

ここに画像の説明を入力してください

関連情報