我一直在 RStudio 中编写代码并使用 TinyTex 编译我的 pdf。我在 RStudio 中的 RSweave 文件中编写了以下代码:
\documentclass[12 pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath, amssymb}
\usepackage[margin=1.25in]{geometry}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{tcolorbox}
\newtcolorbox{boxy}[1]{colback=green!5!white, colframe=green!75!black, title={#1}}
\usepackage{color}
\usepackage{graphicx}
\definecolor{astral}{RGB}{46,116,181}
\hypersetup{
colorlinks,
citecolor=astral,
filecolor=astral,
linkcolor=black,
urlcolor=astral
}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}
\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother
\begin{document}
\maketitle
\begin{boxy}{Question No. 1}
\begin{enumerate}
\item Run \verb|ggplot(data = mpg)|. What do you see?
\item How many rows are in \verb|mpg|? How many columns?
\item What does the \verb|drv| variable describe? Read the help for \verb|?mpg| to find out.
\item Make a scatterplot of \verb|hwy| vs \verb|cyl|.
\item What happens if you make a scatterplot of class vs drv? Why is the plot not useful?
\end{enumerate}
\end{boxy}
\section*{\underline{Solution:}}
\subsection*{\underline{Part 1}}
Running \verb|ggplot(data = mpg)|:
<<>>=
ggplot(data = mpg)
@
We can easily see that \verb|ggplot(data = mpg)| gives us an empty plane to plot the data on.
\end{document}
它说找不到函数ggplot
,这完全可以理解,因为我library("tidyverse")
还没有加载。但它正在编译 pdf,我假设没有 LaTeX 错误。现在我只需添加library("tidyverse")
到前面的代码中:
%%same code before
Running \verb|ggplot(data = mpg)|:
<<>>=
library("tidyverse")
ggplot(data = mpg)
@
%%same code after
但是现在编译后出现以下错误,并且没有生成 pdf。
Loading required package: knitr
processing file: assign2.Rnw
|....................... | 33%
ordinary text without R code
|............................................... | 67%
label: unnamed-chunk-1 (with options)
List of 1
$ indent: chr " "
|......................................................................| 100%
ordinary text without R code
output file: assign2.tex
[1] "assign2.tex"
Compiling document with tinytex ... ! Undefined control sequence.
\f@nch@orh ->\theauthor
\strut
l.132 \end{document}
Error: LaTeX failed to compile D:/hp/Desktop/assign2.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See assign2.log for more info.
Execution halted
failed
Bad Box: pgf.sty:120: Overfull \hbox (32.5757pt too wide) in paragraph at lines 120--121
Bad Box: pgf.sty:124: Overfull \hbox (68.61136pt too wide) in paragraph at lines 124--124
Bad Box: pgf.sty:128: Overfull \hbox (17.62482pt too wide) in paragraph at lines 128--131
Error: pgf.sty:132: Undefined control sequence.
Error: pgf.sty: ==> Fatal error occurred, no output PDF file produced!
现在我可能错了,但过满 \hbox 错误通常是 LaTeX 错误,如果是,那么为什么它们在加载之前没有显示library("tidyverse")
?请帮助我纠正这些错误,如果这微不足道,我很抱歉,因为我是 R 的新手。
谢谢
编辑:一旦我删除以下块,代码就会给我一个完美编译的pdf:
%%same code before
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}
%%same code after
这显然意味着我无法fancyhdr
在代码中使用包。这是为什么?有什么方法可以解决这个问题,以便我能够使用该包?
编辑2:错误出现在以下区块中:
<<>>=
\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother
@
上面的块中\let\theauthor\@author
缺少。添加后,它就可以很好地编译 pdf。
答案1
一些评论和观察,没有解决方案。我把它放在这里,因为几乎不可能包含在评论中。无意讨论,请参阅此处的规则。
如果我复制你的初始代码(带有错误的 [12 pt]),我会得到这个编译,它显然与你的不同;它只是警告有关 inputenc:
我正在离线使用 MikTex。你们如何编译 Latex?
我目前还不清楚 R 代码是如何执行的,以及在 Latex 编译过程中如何包含其结果。通常你会使用像这样的专用包(符号包)
\usepackage{someR-Magic}
……但我在你的序言中没有看到任何内容。(如果你还没有,请在此处查看:https://tex.stackexchange.com/questions/tagged/r)从您上次的观察来看,丢弃 fancyheader 相关代码,有迹象表明您有交互。既需要通过 Tidyverse 进行交互(无论它是什么),也需要不想要的交互(您的结果和我的结果 // 可变性 // 不稳定性)。
进一步阐述我的删除想法:
- 将你的代码分成两半(或多或少)
- 用一半编译,用另一半编译
- 逐步重复,重点关注编译错误的“一半”(可能需要调查两者......)
- 这会让你很快找到那些会带来某种问题的代码行
您的假设“Latex 代码很好,至少足够好”可能不成立。
我想知道在 Latex 编译期间执行 R 代码的原因是什么。通常你会外包这一步,并单独创建绘图。这样你就可以分离问题(比如可能在这里出现的问题),并且只需包含图形文件,最好是 .eps 格式。
答案2
需要更正两处:
- 不要缩进以 开头的代码块
<<>>=
。解析器找不到它。要开始使用代码块,请查看stationery
CRAN 上的包:文具:可重复研究文档的工作示例。 - 您需要告诉从
R
哪里获取ggplot
函数调用。要么写library(ggplot2)
要么写ggplot2::ggplot(data=mpg)
。
在 中进行编译RStudio
,或者R
的插件WinEdt
是另一种选择,它也在 CRAN 上:RWinEdt:R 接口到‘WinEdt’
\documentclass[12 pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath, amssymb}
\usepackage[margin=1.25in]{geometry}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{tcolorbox}
\newtcolorbox{boxy}[1]{colback=green!5!white, colframe=green!75!black, title={#1}}
\usepackage{color}
\usepackage{graphicx}
\definecolor{astral}{RGB}{46,116,181}
\hypersetup{
colorlinks,
citecolor=astral,
filecolor=astral,
linkcolor=black,
urlcolor=astral
}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}
\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother
\begin{document}
\maketitle
\begin{boxy}{Question No. 1}
\begin{enumerate}
\item Run \verb|ggplot(data = mpg)|. What do you see?
\item How many rows are in \verb|mpg|? How many columns?
\item What does the \verb|drv| variable describe? Read the help for \verb|?mpg| to find out.
\item Make a scatterplot of \verb|hwy| vs \verb|cyl|.
\item What happens if you make a scatterplot of class vs drv? Why is the plot not useful?
\end{enumerate}
\end{boxy}
\clearpage
\section*{\underline{Solution:}}
\subsection*{\underline{Part 1}}
Running \verb|ggplot(data = mpg)|:
<<ggplot, out.width="50%", fig.align = "center">>=
library(ggplot2)
ggplot(data = mpg)
@
We can easily see that \verb|ggplot(data = mpg)| gives us an empty plane to plot the data on.
\subsection*{\underline{Part 2}}
\texttt{mpg} has \Sexpr{nrow(mpg)} rows and \Sexpr{ncol(mpg)} columns.
\end{document}