尝试定义包装器 lrbox 时无法识别本地命令

尝试定义包装器 lrbox 时无法识别本地命令

我无法使以下代码正常工作:

\documentclass{article}
\usepackage{pgfkeys}

\makeatletter
\newif\if@ae@nfig@verb@
\pgfkeys
  {%%'
  /ae/nfigverb/.is family,
  /ae/nfigverb,
    usegobble/.initial=,
    gobble/.style = { usegobble={gobble=#1,}},
    width/.initial=3in,
  }

\newsavebox{\aetitlebox}
\newenvironment{nfigverb}[1][]
  {%%'
    \pgfqkeys{/ae/nfigverb}{#1}%%'
    \edef\ae@begin@minipage{%%'
      \noexpand\minipage{\pgfkeysvalueof{/ae/nfigverb/width}}}%%'
    \lrbox\aetitlebox
      \ae@begin@minipage
  }
  {%%'
   \endminipage
    \endlrbox
  }

\makeatother
\begin{document}

\begin{nfigverb}[width=3in]
  as;lfk slfjksd flsk fls dfls
\end{nfigverb}

\usebox{\aetitlebox}

\end{document}

当我尝试编译它时出现错误:

! Undefined control sequence.
\\nfigverb ...rbox \aetitlebox \ae@begin@minipage 

l.32 \begin{nfigverb}[width=3in]

? 

由于我打算使用键来设置各种环境的参数的方式,我似乎需要在\noexpand宏上指定环境名称,以便正确解析传递的选项。

笔记

这实际上是一个更大问题的一部分。但我甚至无法让这一小段代码运行。

如果我写下,我似乎可以解决这个问题:

\newenvironment{nfigverb}[1][]
  {%%'
    \lrbox\aetitlebox
    \pgfqkeys{/ae/nfigverb}{#1}%%'
    \edef\ae@begin@minipage{%%'
      \noexpand\minipage{\pgfkeysvalueof{/ae/nfigverb/width}}}%%'
      \ae@begin@minipage
  }
  {%%'
   \endminipage
    \endlrbox
  }

我不明白为什么这种变化会对我在此环境中使用的内容产生任何影响。如能解释,我将不胜感激。

更新

我正在尝试关注@tohecz 的回答\newenvironment 中的 lrbox

我遇到的问题是

\newenvironment{nfigverb}...
   {\begin{lrbox}{\mybox}
     ....}{\end{lrbox}}

不会让我稍后打电话

 \usebox{\mybox}

并打印这个新盒子里的内容。

答案1

定义如下\lrbox

% latex.ltx, line 4634:
\def\lrbox#1{%
  \edef\reserved@a{%
    \endgroup
    \setbox#1\hbox{%
      \begingroup\aftergroup}%
        \def\noexpand\@currenvir{\@currenvir}%
        \def\noexpand\@currenvline{\on@line}}%
  \reserved@a
    \@endpefalse
    \color@setgroup
      \ignorespaces}

是否\endgroup有匹配\begingroup发行\begin时间\begin{lrbox}。这有多种原因,但最主要的是你应该绝不使用\lrbox...\endlrbox表格。

另外,这\edef是没用的,但你必须\aetitlebox全局设置。

\documentclass{article}
\usepackage{pgfkeys}

\makeatletter
\newif\if@ae@nfig@verb@
\pgfkeys
  {%%'
  /ae/nfigverb/.is family,
  /ae/nfigverb,
    usegobble/.initial=,
    gobble/.style = { usegobble={gobble=#1,}},
    width/.initial=3in,
  }

\newsavebox{\aetitlebox}
\newenvironment{nfigverb}[1][]
  {%
   \pgfqkeys{/ae/nfigverb}{#1}%
   \begin{lrbox}{\z@}
   \minipage{\pgfkeysvalueof{/ae/nfigverb/width}}
  }
  {%
   \endminipage
   \end{lrbox}%
   \global\setbox\aetitlebox=\box\z@
  }
\makeatother

\begin{document}

\begin{nfigverb}[width=3in]
  as;lfk slfjksd flsk fls dfls
\end{nfigverb}

\usebox{\aetitlebox}

\end{document}

相关内容