我的.tex 文件:
\documentclass[a4paper,twoside,portrait,12pt,openright,final,pdflatex]{report}
\usepackage[bindingoffset=8mm]{geometry}
\usepackage[T1]{fontenc}
\usepackage{arabtex}
\usepackage{utf8}
\usepackage{graphicx}
\usepackage{float}
\usepackage{caption}
\captionsetup{font=small,labelfont=bf}
\setcounter{secnumdepth}{3}
\usepackage{fixltx2e}
\usepackage{paralist}
\usepackage{hyperref}
\hypersetup{pdftex,linktocpage=true,bookmarks=true,colorlinks=true,citecolor=blue,filecolor=black,linkcolor=blue,urlcolor=black,pdfauthor={Ayman Elmasry},pdftitle={Algorithmic Form Generation: A Thermal Building
Envelope Design Approach}}
\usepackage[all]{hypcap}
\usepackage{lipsum}
\begin{document}
\lipsum[1-20]
\end{document}
我使用 pdflatex 进行编译,出现以下错误:
(/usr/local/texlive/2011/texmf-dist/tex/latex/caption/caption.sty
(/usr/local/texlive/2011/texmf-dist/tex/latex/caption/caption3.sty
Runaway argument?
{\caption@CheckCommand \@makecaption {\long \def \@makecaption ##1##2\ETC.
! Paragraph ended before \@gobble was complete.
<to be read again>
\par
l.901 \unskip\kern-2\captionindent\par
当我注释掉时:
%\usepackage{caption}
%\captionsetup{font=small,labelfont=bf}
... 我毫无问题地获得了一个输出 PDF 文件。
答案1
该问题是一个arabtex
将重新定义\@gobble
为非长的错误。
\documentclass{article}
{\makeatletter\typeout{\meaning\@gobble}}
\usepackage{arabtex}
{\makeatletter\typeout{\meaning\@gobble}}
\stop
首先获取\long macro:#1->
,然后获取macro:#1->
。宏必须在其参数中\long
允许,因此存在问题。一种解决方案是在加载 之后立即\par
添加。{\makeatletter\long\gdef\@gobble#1{}}
arabtex
\usepackage{arabtex}
{\makeatletter\long\gdef\@gobble#1{}}
这将恢复 LaTeX 核函数的原始定义\@gobble
。
答案2
正如下面的 MWE 所演示的那样,该错误不是由于标题包引起的。
\documentclass{article}
\usepackage{caption}
\captionsetup{font=small,labelfont=bf}
\begin{document}
\captionof{figure}{Just a test.}
\end{document}
提供最小的工作示例总是最好的。我建议您开始从代码中删除行,或\end{document}
逐步插入,直到确定错误来源(可能是标题文本中未受保护的命令)。
编辑
arabtex 包和 utf8 都与 caption 包冲突。arabtex 包为 RL 写作重新定义了不少项目。建议删除它们。