변수에서 "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}

여기에 이미지 설명을 입력하세요

관련 정보