2015-04-15 14 views
5

Niedawno odkryłem, że dziergam i używam go głównie do produkcji działek z dev=tikz, aby łatwo uzyskać skład Latex. Jednak nie rozumiem, jak ustawić spójność opcji porcji fig.width i out.width.Jak sprawić, by fig.width i out.width były zgodne z knitr?

To znaczy, wiem, że pierwszy z nich jest opcja R, podczas gdy drugi jest opcja lateks pochodzących z \includegraphics ale wydaje się, że jeśli fig.width jest zbyt duża w porównaniu do out.width następnie linie są bardzo cienkie, ponieważ lateks skurczyć obrazek. Z drugiej strony, jeśli jest zbyt mały, to lateks streści go i wszystko jest za duże.

Zasadniczo chciałbym mieć również ustawienie, w którym wybieram tylko out.width, a następnie grubość linii i tekstów jest zgodna z rozmiarem tekstu dokumentu.

Dołączyłem MWE ilustrujący mój problem. Również ustawiłem fig.height w pierwszym przykładzie, w przeciwnym razie obraz byłby większy niż strona, tak naprawdę to nie rozumiem.

Każda pomoc jest mile widziane!

\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

wysokość figura ma wartość domyślną (chyba około 5 cali, nie sprawdzałem), a ponieważ jesteś wyznaczając mniejszą szerokość, gdy lateks zmienia rozmiar grafiki na pełną szerokość strony, wysokość wzrasta proporcjonalnie. – baptiste

Odpowiedz

6

zasadzie nie zmiana rozmiaru powinien być wykonany po tikzpicture został utworzony, ponieważ będzie ona straciła spójność z stylu tekstu. W rzeczywistości, gdy ustawiona jest opcja porcji cache=FALSE, wówczas out.width nie ma żadnego efektu, ponieważ nie jest tworzone żadne wyjście PDF. Dlatego należy podać dokładne miary w calach dla fig.width i fig.height dla każdej porcji.

Po niektórych badań zarówno na stackoverflow i na stronach internetowych Knitr, znalazłem trick mają prawie taką samą użytkownika eksperyment, to znaczy, że nie chcę się martwić o rzeczywistych rozmiarach, ale tylko w stosunku do myślenia i innych \textwidth zmienne Latex

  • w fragmentu instalacji, zawierające zmienne R z jednoznacznego oznaczenia (np paperwidth, textwidth odpowiadającej lateksu jeden w calach, np A4 oznacza (w, h) = (8,3, 11,7)
  • w każdej części z działką, można następnie użyć fig.width = 0.5*paperwidth obszerna

Oto 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

Prawdopodobnie nie powinieneś mieć \begin{figure}, ponieważ knitr uwzględni je dla ciebie. Uważam też, że najlepiej, gdy LaTeX w ogóle nie zmienia rozmiarów liczb, to znaczy, że są one już odpowiedniej wielkości. Oto przykład, w którym ustawiam szerokość tekstu na 6 cali, a szerokość na tę samą wartość.

\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

dzięki za odpowiedź. Nie było tak, jak się spodziewałem, ale sprawił, że spojrzałam głębiej w opcje knitr. W końcu masz rację, że 'out.width' NIE powinien być używany z urządzeniem tikz. Mam kilka komentarzy do mojego pytania, więc dodałem je jako odpowiedź. – clemlaflemme

+0

i środowisko rysunku jest ustawione tylko wtedy, gdy ustawiona jest opcja porcji 'tab.cap' – clemlaflemme

Powiązane problemy