除了标题之外,如何为乳胶输出的针织图添加注释或文本?

时间:2015-02-28 20:52:49

标签: r latex knitr

我正在使用knitr撰写我的论文并将其编译为乳胶文档。我已经成功地包含了带有适当标记标题的数字;但是,除了标题之外,我还希望在标题正下方添加额外的文本行并与图形相关联。例如,在我想要的标题下面:“注意:这些数据是以mu = 0和sd = 1分布的”和“SOURCE:这些数据是在R中随机生成的”。

编辑1提问:我还需要一个数字列表页面,其中只包含标题信息,而不包含任何NOTE或SOURCE信息。另外,图中的标题必须居中,而NOTE和SOURCE左手对齐。

我认为许多出版物的数字都附有关于数字的说明或有关与标题标题分开的数据来源的信息;所以,我相信这个问题不仅适用于我。

编辑1代码。以下是@ user29020提供的代码及其建议的链接的综合,以及我从其他帖子中汇编的.pdf工作。 @ user29020提供的“纯”编织方法的优点在于绘图很漂亮,文本与文本正文一致。缺点是缺少对标题信息的控制:我想将“Caption”元素居中并且左对齐和子标题行,我不知道如何实现这一点;所以,如果有人知道如何做到这一点会很棒。 pdf解决方案的优点是我可以更好地控制字幕。除了没有充分利用knitr创建和跟踪数字的能力之外,缺点是当字体匹配时,通过使用“Ghostscript”,缩放看起来有点偏,需要在R中以ad-hoc方式进行调整码。

\documentclass{article}
\usepackage{caption}
\usepackage{tikz}%Draw Graphs
\begin{document}

\listoffigures
\newpage
%THIS IS A SYNTHESIS OF user29020 CODE AND THE LINK THEY PROVIDED IN THEIR COMMENTS
<<cap-setup1,include=FALSE>>=
scap="This is a Caption."
NOTE="NOTE: Here is a note with one linebreak from above."
SOURCE="SOURCE: Here is my source with an extra linebreak to separate it."
EXTRA="{\\tiny EXTRA: Here is smaller text. You could explore more text sizing in \\LaTeX.} And bigger again."
hspace="\\\\\\hspace{\\textwidth}"
cap<- paste(
     scap, 
    hspace, 
    NOTE, 
    hspace, 
     SOURCE, 
    hspace, 
    EXTRA)

@


In Figure \ref {fig:fig1}, we see a scatter plot.    

<<fig1, echo=FALSE,fig.cap=cap, fig.scap=scap,fig.pos="!h", >>=
r<-rnorm(100)
plot(r)
@  


%THIS IS THE PDF WORK AROUND

%Loading R Packages
<<loading,include=FALSE>>=
require(extrafont)
require(graphicx)
font_install("fontcm") #this gets the cm roman family from package extrafont for pdf output in r to match latex
@

<<fig-pdf,echo=FALSE, include=FALSE,fig.cap=paste("This is a Caption"),fig.pos="!h", >>=
Sys.setenv(R_GSCMD="C:/Program Files/gs/gs9.15/bin/gswin64c.exe") #this needs to go inside every r code chunk to call GhostScript for embedding latex font "computer modern roman" (so R font in pdfs matches latex document font)
pdf("tikz-plot-pdf.pdf", family="CM Roman") 
set.seed(2015)
r<-rnorm(100)
 plot(r)
dev.off()
embed_fonts("tikz-plot-pdf.pdf") #this embeds the pdf font so that when graphicx calls the pdf the fonts from R to latex match
@  
\newpage
In Figure \ref{fig:scatter}, we see a scatter plot.
\begin{figure}[!h]
\centering
\includegraphics[width=\textwidth]{tikz-plot-pdf}
\caption{This is also a Caption}\label{fig:scatter}
\begin{minipage}{\textwidth}
NOTE: Here is a note with one linebreak from above.\\
SOURCE: Here is my source with an extra linebreak to separate it.\\
EXTRA:{\tiny EXTRA: Here is smaller text. You could explore more text sizing in \LaTeX.} And bigger again.
\end{minipage}
\end{figure}


\end{document}

我想在标题行下面加上“NOTE”和“SOURCE”行,编辑1:只有\listoffigures中包含的标题和标题居中,而NOTE和SOURCE左对齐(比如pdf变通方法的输出:

我之前没有在这个论坛上问过一个问题,虽然我找到了很多答案,所以对我的问题编辑1的任何元反馈:或者我的编辑方式也很感激。

谢谢

1 个答案:

答案 0 :(得分:2)

此答案假定多行字幕足以满足您的需要。我使用了将R变量传递给Knitr fig.cap=参数的方法。这使我们可以在使用之前在其他代码块中提前编写标题。

技巧是A)我们需要找出how to add line break to caption without using caption package,并且B)知道如何将文字“\”(反斜杠)字符传递给生成的Latex文档。

有关添加字幕的参考建议添加\\\hspace{\textwidth}以在标题内(在Latex文件中)开始新行。所以,我们在Knitr文件中将其转义为\\\\\\hspace{\\textwidth}

实际上,几乎所有想要在Latex文件中输出的Latex代码都必须以这种方式进行转义。在撰写论文时,毫无疑问,你会想要参考你的数据。您可以将图\label放入标题,然后在其他地方使用\ref{}来使用Latex参考。

有关多行字幕和数字参考,请参阅下面文件的修改版本:

\documentclass[12pt]{article}%12 Pt font, article document class
\usepackage{caption}
\usepackage{tikz}%Draw Graphs

\begin{document}

<<>>=
x <- paste(
    "This is a Caption.", 
    "\\\\\\hspace{\\textwidth}", 
    "NOTE: Here is a note with one linebreak from above.", 
    "\\\\\\hspace{\\textwidth}", 
    "\\\\\\hspace{\\textwidth}", 
    "SOURCE: Here is my source with an extra linebreak to separate it.", 
    "\\\\\\hspace{\\textwidth}", 
    "{\\tiny EXTRA: Here is smaller text. You could explore more text sizing in \\LaTeX.} And bigger again.",
    "\\label{figure:demo-of-multiline-captions}",  
    "\n" )
cat(x)
@

We can also show the variable "x" in the "asis" formate here:

<<results="asis">>=
cat(x)
@

This text right here (now) is a new paragraph, so it is indented. 

Below, in \textbf{Figure~\ref{figure:demo-of-multiline-captions}}, we use the "x" variable in the "fig.cap=" argument to Knitr.    

<<fig1, echo=FALSE,fig.cap=x,fig.pos="!h", >>=
r<-rnorm(100)
plot(r)
@  

\end{document}

结果给出了这个:

enter image description here