有没有办法让文本savebox
跨越多页?在以下 MWE 中,文本无法容纳在一页中,因此文本被推到下一页,文本被截断。
\documentclass{article}
\usepackage{lipsum}
\newsavebox{\mybox}
\newcounter{test}
\begin{document}
\savebox{\mybox}{
\setcounter{test}{10}
\begin{minipage}{1.0\linewidth}
\lipsum[1-10]
\end{minipage}}
My counter is: \thetest.
\usebox{\mybox}
\end{document}
我知道我可以定义命令而不是使用savebox
,但是正如 MWE 所示,我savebox
对设置的使用是必要的。具体来说,我使用它来处理框中的 LaTex 命令(setcounter
在这个特定的 MWE 中),打印一些结果,然后输出框的内容。
答案1
我认为你用错了工具。最好依靠\label
-\ref
机制。
无论如何,您可以使用较低级别的方法,通过设置\vbox
排版和存储的方法。
然后可以将盒子“拆箱”,但是为了保留前导,需要一些技巧。
\documentclass{article}
\usepackage{lipsum}
\newsavebox{\mybox}
\newcounter{test}
\newcommand{\mpbox}[1]{%
\setbox\mybox=\vbox{
\everypar{\strut\everypar{}}%
#1\par\xdef\belowprevdepth{\the\prevdepth}
}%
}
\newcommand{\usempbox}{%
\par\edef\aboveprevdepth{\the\prevdepth}%
\setbox\mybox=\vbox{\prevdepth\aboveprevdepth\unvbox\mybox}
\unvbox\mybox\prevdepth\belowprevdepth
}
\begin{document}
\mpbox{
\setcounter{test}{10}
\lipsum[1-10]
}
My counter is: \thetest.
\usempbox
some other text
\end{document}
答案2
这难道不是\edef
您想要的,为了捕获\thetest
定义宏时(即格式化的计数器值)的扩展?
\documentclass{article}
\usepackage{lipsum}
\newcounter{test}
\setcounter{test}{10}
% Make sure the commands aren't already defined
\newcommand*{\myFirstCommand}{}
\newcommand*{\mySecondCommand}{}
\edef\myFirstCommand{%
\unexpanded{%
\lipsum[1-3]\par
\begingroup\bfseries % Just to put some emphasis
My counter is: %
}%
\thetest.\endgroup
}
\stepcounter{test}
\edef\mySecondCommand{%
\unexpanded{%
\lipsum[4-8]\par
\begingroup\bfseries % Just to put some emphasis
My counter is: %
}%
\thetest.\endgroup
}
% Just to show that this doesn't influence what \myFirstCommand and
% \mySecondCommand expand to.
\setcounter{test}{0}
\begin{document}
\myFirstCommand
\mySecondCommand
Blah. No more \verb|\bfseries| here.
\end{document}