2015-04-15 67 views
5

我最近發現了knitr,我主要用它來製作dev=tikz的地塊,以便輕鬆地進行Latex排版。不過,我不明白如何設置塊選項fig.widthout.width的一致性。如何使fig.width和out.width與knitr保持一致?

我的意思是,我知道,第一個是R選項,而第二個是\includegraphics未來乳膠選項,但它好像如果相比out.widthfig.width過大,則線非常細,因爲乳膠收縮圖片。另一方面,如果它太小,那麼乳膠就會拉長,而且一切都太大了。

基本上我想也有一個設置,我只選擇out.width,然後線條和文本的粗細與文檔的文本大小一致。

我包含一個MWE來說明我的問題。在第一個例子中,我還設置了fig.height,否則圖片比頁面大,我不太明白這一點。

任何幫助熱烈歡迎!

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 

<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz') 
@ 

\begin{document} 
\begin{figure}[!ht] 
    <<fig_1,fig.width=2, fig.height = 3,out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
    @ 
\end{figure} 
\begin{figure}[!ht] 
<<fig_2,fig.width=10, out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
    @ 
\end{figure} 

\end{document} 
+0

圖高度有一個默認值(我猜大約5英寸,沒有檢查),而且因爲你設置較小的寬度,當乳膠將圖形大小調整爲整頁寬度,高度按比例放大。 – baptiste

回答

6

基本上在創建tikzpicture之後,不應該調整大小,因爲它將失去與文本樣式的一致性。事實上,當設置塊選項cache=FALSE時,out.width不起作用,因爲沒有創建pdf輸出。因此,必須爲每個塊指定fig.widthfig.height的精確度量單位。

無論在計算器和Knitr網站經過一番研究,我發現一招幾乎相同用戶實驗,即我不想計較現實大小,但只認爲相對於\textwidth等膠乳變量:

    在設置塊
  • ,定義R參數與明確的名稱(如paperwidthtextwidth對應於膠乳之一英寸,例如A4紙是(W,H)=(8.3,11.7)
  • 在每個塊中都有一個plot,則可以使用fig.width = 0.5*paperwidth作爲ex充足的

這裏是一個MWE:

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 
\usepackage{tikz} 
<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz', 
       external=TRUE, 
       echo=FALSE 
       ) 
    a4width<- 8.3 
    a4height<- 11.7 
@ 

\begin{document} 
\begin{figure}[!ht] 
\centering 
<<fig_1, fig.width = 0.4*a4width, fig.height = 0.2*a4height>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

<<fig_2, fig.width = 0.2*a4width, fig.height = 0.5*a4height>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

\caption{Test figure} 
\end{figure} 
\end{document} 
1

你可能不應該有\begin{figure}因爲knitr會爲你包括它們。而且,當LaTeX根本不調整數字時,我發現它是最好的,也就是說它們已經是合適的尺寸。下面是一個例子,我將文字寬度設置爲6英寸,數字寬度設置爲相同的值。

\documentclass[12pt,a4paper]{article} 
\usepackage[utf8]{inputenc} 
\usepackage[english]{babel} 
\usepackage[T1]{fontenc} 
\usepackage{graphicx} 

<<setup, include=FALSE, cache=FALSE>>= 
    library(knitr) 
    options(formatR.arrow=TRUE,width=50) 
    opts_chunk$set(fig.path='figure/graphics-', 
       cache.path='cache/graphics-', 
       fig.align='center', 
       dev='tikz') 
@ 

\usepackage[text={6in,9in},centering]{geometry} 
\begin{document} 

    <<fig_1, fig.width=6, echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

<<fig_2, fig.width=6, out.width = '\\textwidth',echo=FALSE>>= 
    x = seq(1,3,l=100) 
    plot(x,cos(x), type ="l", xlab = "x", ylab = "y") 
@ 

\end{document} 
+0

感謝您的回答。這並不是我所期待的,而是讓我更深入地瞭解了針織衫的選擇。最後你說的是'out.width'不應該與tikz設備一起使用。我對我的問題有幾點意見,所以我將其添加爲答案。 – clemlaflemme

+0

只有在設置了塊選項'fig.cap'時才設置圖形環境 – clemlaflemme