我在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文档在没有它的情况下工作正常(当然页面宽度应该由日志指定,而不是由作者手动覆盖)。
答案 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模板。这可以通过以下两种方式之一完成:
在我的情况下,我采用了后一种选择。我已将最终模板保存为an R package,可以使用devtools::install_github("JaydenM-C/CLtemplate")
进行安装。因此,如果其他人想要使用此特定文档样式为 Computational Linguistics 创作文档,这可能会为您节省一些时间。