我无法使以下代码正常工作:
\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}