beamer
我正在尝试使用创建 LaTeX 演示文稿pstool
,自从将我的系统更新到 Ubuntu 13.10(pstool 1.5a,TeX Live 2013)后,pstool 辅助 TeX 文件(*-pstool.tex)的编译失败,日志中显示以下消息:
! Improper \spacefactor.
\@->\spacefactor
\@m
l.19 \immediate \write \@
mainaux {\@percentchar <*PSTOOLLABELS>}
我可以将问题追溯到创建的文件中的以下部分:
\makeatletter
\def \thepage {\csname @arabic\endcsname \c@page }
\setcounter {page}{15}
\@input {presentation.oldaux}
\begin {document}
\immediate \write \@mainaux {\@percentchar <*PSTOOLLABELS>}
\makeatother
\centering \null \vfill
如果我将 移到\begin{document}
下方或在其后\makeatother
添加另一个,我可以手动编译辅助文件(latex、dvipdf),但这当然不是解决方案。显然,取消了。问题是有问题的部分是由 pstool 自动生成的,并且手动更改每个 EPS 图形几乎不可行。有什么想法可以解决这个问题吗?\makeatletter
\begin{document}
\makeatletter
编辑:以下是使用 的 TeX 文件的完整示例pstool
。在本例中,错误发生在编译由 创建的辅助文件期间pstool
。EPStest-pstool.tex
文件test.eps
仅包含一个带有标签“test”的框。
\documentclass[a4paper]{beamer}
\usepackage[crop=pdfcrop]{pstool}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\EndPreamble
\begin{document}
\begin{frame}{Test}
\begin{figure}[p]
\begin{center}
\pstool[width=0.5\textwidth]{test}{
\psfrag{test}[][]{Test}
}
\caption{Test}
\end{center}
\end{figure}
\end{frame}
\end{document}
答案1
确实,重置了执行\begin{document}
的类别代码,但仅限于,而不是在标准类中。这可能是问题至今未被发现的原因。@
\makeatother
beamer
这只是\makeatletter
在包中增加用于编写辅助文件的宏的问题(我\makeatother
之前也会添加,只是为了对称)。如果作者意识到了这个问题,我非常肯定将会做出改变。
作为一个临时的解决方法,您可以通过将相关宏复制到您的序言中并添加缺失的部分来修补它:
\makeatletter
\def\pstool@write@processfile#1#2#3{%
\immediate\openout\pstool@out #2\[email protected]\relax
[...]
% And the document body to place the graphic on a page of its own:
\noexpand\@input{\jobname.oldaux}^^J^^J%
\noexpand\makeatother^^J^^J% <---- ADDED
\noexpand\begin{document}^^J%
\noexpand\makeatletter^^J% <---- ADDED
\unexpanded{\immediate\write\@mainaux}{\pstool@auxmarker*}^^J%
\noexpand\makeatother^^J%
[...]
\immediate\closeout\pstool@out
}
\makeatother
其中[...]
表示不应修改的(长)部分。
etoolbox
一种更简单的策略是修补宏。不幸的是,无法用修补宏,因为它包含^^J
。但你可以用regexpatch
:
\documentclass[a4paper]{beamer}
\usepackage[crop=pdfcrop]{pstool}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\EndPreamble
\usepackage{regexpatch}
\makeatletter
\xpatchcmd\pstool@write@processfile
{\noexpand\begin{document}}
{\noexpand\makeatother^^J^^J%
\noexpand\begin{document}^^J%
\noexpand\makeatletter}
{}{}
\makeatother
\begin{document}
\begin{frame}{Test}
\pstool[width=0.5\textwidth]{test}{
\psfrag{test}[][]{Test}
}
\end{frame}
\end{document}
我不是这方面的专家pstool
,所以我把\EndPreamble
它放在看起来更合适的地方。