Как передать аргументы в среду «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}

введите описание изображения здесь

Связанный контент