Аргументы, которые мне нужно передать в 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}