Rmd到PDF编译错误:包几何\ paperwidth(0.0pt)太短

时间:2018-05-08 07:10:45

标签: r latex r-markdown knitr

我在R markdown写一篇论文,需要用学术期刊提供的this .cls file格式化。

最小的.tex文件可以很好地编译上面的cls文件。

我的.tex文件(在ShareLaTeX上编译,clv3.cls保存在同一目录中):

\documentclass[shortpaper]{clv3}
\usepackage[utf8]{inputenc}

\title{Paper title}
\author{Name Surname}
\date{May 2018}

\begin{document}

\maketitle

\section{Introduction}

Some text.

\end{document}

然而,使用相同cls文件的R markdown中的可比较的最小文档无法在Rstudio中编译,并出现以下错误:! Package geometry Error: \paperwidth (0.0pt) too short.

我的Rmd文件(clv3.cls文件保存在同一目录中):

---
title: "Paper title"
author: "Name Surname"
documentclass: clv3
classoption: shortpaper
output: pdf_document
---

# Introduction

Some text.

为什么当我尝试将此类文件与R markdown文档一起使用时会引发此错误,我该如何解决?

我尝试在YAML标头中手动指定页面宽度设置,但我真的不知道我在做什么。这似乎是不合需要的,因为正常的LaTeX文档在没有它的情况下工作正常(当然页面宽度应该由日志指定,而不是由作者手动覆盖)。

2 个答案:

答案 0 :(得分:5)

我不知道clv3.cls类与默认pandoc模板冲突的确切位置。但是,当使用特定样式编写时,该模板会执行许多没有意义的事情,最好使用您自己的模板。使用clv3-template.tex

\documentclass[shortpaper]{clv3}
\usepackage[utf8]{inputenc}

$if(title)$
  \title{$title$}
$else$
  \title{}
$endif$
$if(author)$
  \author{$for(author)$$author$$sep$ \\ $endfor$}
$else$
  \author{}
$endif$

\begin{document}

$if(title)$
\maketitle
$endif$

$body$

\end{document}

一起
---
title: "Paper title"
author: "Name Surname"
output: 
  pdf_document:
    template:
      clv3-template.tex
---

# Introduction

Some text.

应该是一个很好的起点。

答案 1 :(得分:1)

接受的答案适用于所提出的最小例子。然而,随着文档变得更加复杂(例如,插入参考书目和文本引用),它会再次破裂。我想对我的解决方案进行一些扩展,以便为未来的读者带来潜在的好处,因为我发现它有点陡峭的学习曲线:

这里的问题是Pandoc有一个LaTeX模板,用于生成PDF文档。这与.cls类文件是分开的,该文件定义了一个文档类。就像Ralf Stubner所说,关于我的特定类文件的某些内容并没有与Pandoc的默认模板合作。对于许多人来说,这可能是超级基础和显而易见的,但我没有理解这一额外步骤,也没有理解这些文件之间的区别。

如果一个人不想处理原始的LaTeX,那么似乎有很多模板用于各种文档(例如,参见rticle包)。但是,使用R Markdown生成特定自定义格式的PDF文档(例如特定日记)将需要构建LaTeX模板。这可以通过以下两种方式之一完成:

  1. 修改现有模板,直到找到所需内容,方法是找到Pandoc的默认模板并从那里开始(请参阅user2554330的位置评论)或者在Github上克隆其他人的模板等。
  2. 从头开始编写模板。在这种情况下,Ralf Stubner上面的最小例子加上Pandoc手册的this section将提供信息。
  3. 在我的情况下,我采用了后一种选择。我已将最终模板保存为an R package,可以使用devtools::install_github("JaydenM-C/CLtemplate")进行安装。因此,如果其他人想要使用此特定文档样式为 Computational Linguistics 创作文档,这可能会为您节省一些时间。