重新解析盒子寄存器的内容

重新解析盒子寄存器的内容

我会先提出问题,然后解释为什么会这样。我有以下 .tex 文件:

\documentclass{article}    
\newsavebox{\myquote}
\setbox\myquote=\hbox{\begin{normalsize}\verb.'.\end{normalsize}}

\usepackage{upquote} % convert verbatim ' from left single quote to a "normal" single quote

\begin{document}
Test: \verb.'. vs \usebox{\myquote}
\end{document}

在此 tex 文件中,\verb.'.变成了', 看起来\usebox{\myquote}像一个左弯单引号。这是因为即使 I \usepackage{upquote}(将 verbatim/verb 中的左弯单引号转换为直单引号),它也加载在的定义\myquote所以现在包已经无法upquote影响到发生的引用了\myquote

问题:假设我可以仅有的放代码\setbox,有什么方法可以使中的引号\myquote显示为直单引号?

我基本上是想\edef\myquote\myquote在 之后添加一个类似 的命令\usepackage{upquote},以便\myquote在将 的定义重新赋值给 之前对其进行重新评估\myquote。重新评估将导致\verb.'.根据 中所做的修改进行解析\usepackage{upquote},从而使引号再次成为单引号。

upquote您可能会问,为什么我在定义之前不使用 load myquote;好吧,我正在使用一个名为 Sweave(用于 R 语言)的文档生成包。我基本上可以将 R 代码嵌入到我的(否则看起来像 LaTeX)文档中,在其上调用 Sweave,它将生成一个 .tex 文件,其中很好地打印了代码(和结果)。Sweave 插入所有这些\newsavebox命令我在原始文件中放入的序言。即,我无法将命令的顺序更改\newsavebox\usepackage{upquote}

作为最后的手段,我可​​以将\setbox\myquote=\hbox...Sweave 生成​​的复制/粘贴到我自己的文档序言中(即之后\usepackage{upquote}),但是如果 Sweave 包更改了它们的定义\myquote(比如说,他们将更改为normalsize其他内容),我将必须更改我的定义以保持同步。

最好重新定义,就像我仅有的知道该命令是什么\myquote(并且知道它\verb.'.在某处,所以我知道该upquote包会产生效果)而不是它的实际定义。

我希望这是有道理的。

答案1

不,我认为那不可能。据我所知,框内容是在分配框时排版的。实际代码\begin{normalsize}\verb.'.\end{normalsize}(顺便说一下应该是\normalsize\verb.'.)不存在并且不再可用。框寄存器已经包含较低级别的排版材料,据我所知,这些材料实际上不能再更改了。

最好的解决方案是再次获取框的定义并在加载格式化包后重新分配它。

相关内容