[R] tikzDevice and Sweave

Yihui Xie xie at yihui.name
Mon Jan 18 18:22:07 CET 2016


Yeah, the philosophy of knitr from the very beginning is that if you
want to draw a plot, simply draw it, and knitr will take care of the
rest of work (http://i.imgur.com/jrwbX.jpg). You rarely need to think
about graphical devices or LaTeX or a specific output format. With
knitr, the example can be reduced to the absolutely minimal:

\documentclass{article}
\begin{document}
<<tikzFig, echo=FALSE, dev='tikz', fig.width=4, fig.height=3>>=
plot(sin, -pi, 2*pi, main = "A stand alone TikZ plot", xlab = "x",
ylab = "sin(x)")
@
\end{document}


Regards,
Yihui
--
Yihui Xie <xieyihui at gmail.com>
Web: http://yihui.name


On Mon, Jan 18, 2016 at 6:30 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 18/01/2016 6:12 AM, Naresh Gurbuxani wrote:
>>
>> Duncan,
>>
>> Many thanks for looking at my code and for your suggestion.
>>
>> Your solution works.  But my problem is different.  This code gives me a
>> tex file with a lot of tikz code.  If there are several graphs in the
>> document, then tex file become very large.  I would like the code to result
>> in a pdf file for each graph.  When this pdf file is included in the tex
>> file, the tex file is more readable.
>
>
> You probably don't want to do that -- tikz outputs LaTeX code, so you'd need
> to run pdflatex once in every figure in your document.  And you probably
> shouldn't care:  when using Sweave, the .tex file is not really of interest.
> Concentrate on the .Rnw file as the source file.
> However, sometimes you need to deal with other people...
>
> You can easily redirect tikz output to a file, and \input{} that file. Just
> change the figure chunk to
>
> <<name = tikzFig, echo = FALSE, results = tex>>=
> library(tikzDevice)
> # added height and width
> tikz(file = "tikzFig.tex", width = 4, height = 3)
> plot(sin, -pi, 2*pi, main = "A stand alone TikZ plot", xlab = "x", ylab =
> "sin(x)")
> dummy <- dev.off()
> cat("\\input{tikzFig.tex}")
> @
>
> As mentioned, this is a bit simpler in knitr.
>
> Duncan Murdoch
>
>
>> Naresh
>>
>> ----------------------------------------
>>>
>>> From: dulcalma at bigpond.com
>>> To: r-help at r-project.org
>>> Date: Mon, 18 Jan 2016 14:17:42 +1000
>>> Subject: Re: [R] tikzDevice and Sweave
>>>
>>> Hi
>>>
>>> I use Sweave and some tikz in latex but not in Sweave
>>>
>>> Your problem is that you left out Sweave in the preamble
>>> It must be in the preamble of any Sweave document
>>>
>>> I added sizing so that it is not off the page.
>>> I do not know if Sweave options will cover this or you have to set it.
>>> eg
>>> \setkeys{Gin}{width=1.0\textwidth}
>>>
>>> \documentclass{article}
>>> \usepackage{tikz}
>>> \usepackage{Sweave}
>>>
>>> \begin{document}
>>>
>>> Figure~\ref{tikzExampleFig} is an example of \texttt{tikzDevice} package.
>>>
>>> \begin{figure}
>>> \begin{center}
>>>
>>> <<name = tikzFig, echo = FALSE, results = tex>>=
>>> # % <<name = tikzFig, echo = FALSE, fig = TRUE>>=
>>>
>>> # %<<tikzFig, echo = FALSE, fig = TRUE>>=
>>> # setwd("/Users/nareshgurbuxani/Documents/tex/tikz")
>>> library(tikzDevice)
>>>
>>> # added height and width
>>> tikz(console = TRUE, width = 4, height = 3)
>>> plot(sin, -pi, 2*pi, main = "A stand alone TikZ plot", xlab = "x", ylab =
>>> "sin(x)")
>>> dummy <- dev.off()
>>> @
>>>
>>> \caption{Example of tikz graph}
>>> \label{tikzExampleFig}
>>> \end{center}
>>> \end{figure}
>>>
>>> \end{document}
>>>
>>> If this is an example for a larger document then have a look at the latex
>>> hyperref package
>>>
>>> Regards
>>>
>>> Duncan
>>>
>>> Duncan Mackay
>>> Department of Agronomy and Soil Science
>>> University of New England
>>> Armidale NSW 2351
>>> Email: home: mackay at northnet.com.au
>>>
>>> -----Original Message-----
>>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Naresh
>>> Gurbuxani
>>> Sent: Monday, 18 January 2016 06:54
>>> To: R-help at r-project.org
>>> Subject: Re: [R] tikzDevice and Sweave
>>>
>>> Resending as a useable example
>>>
>>> \documentclass{article}
>>> \usepackage{tikz}
>>>
>>> \begin{document}
>>>
>>> Figure~\ref{tikzExampleFig} is an example of \texttt{tikzDevice} package.
>>>
>>> \begin{figure}
>>> \begin{center}
>>>
>>> <<name = tikzFig, echo = FALSE, results = tex>>=
>>> # % <<name = tikzFig, echo = FALSE, fig = TRUE>>=
>>>
>>> # %<<tikzFig, echo = FALSE, fig = TRUE>>=
>>> # setwd("/Users/nareshgurbuxani/Documents/tex/tikz")
>>> library(tikzDevice)
>>>
>>> tikz(console = TRUE)
>>> plot(sin, -pi, 2*pi, main = "A stand alone TikZ plot", xlab = "x", ylab =
>>> "sin(x)")
>>> dummy <- dev.off()
>>> @
>>>
>>> \caption{Example of tikz graph}
>>> \label{tikzExampleFig}
>>> \end{center}
>>> \end{figure}
>>>
>>> \end{document}
>>>
>>> ----------------------------------------
>>>>
>>>> Subject: Re: [R] tikzDevice and Sweave
>>>> To: naresh_gurbuxani at hotmail.com; r-help at r-project.org
>>>> From: murdoch.duncan at gmail.com
>>>> Date: Sun, 17 Jan 2016 15:40:24 -0500
>>>>
>>>> On 17/01/2016 3:25 PM, Naresh Gurbuxani wrote:
>>>>>
>>>>> I want to use tikz() function in tikzDevice package so that it
>>>>> generates
>>>
>>> a pdf file to be included in the bigger tex file. Below code works, but
>>> directly inserts tikz commands in the output tex file.
>>>>>
>>>>> This works:
>>>>> <<name = tikzFig, echo = FALSE, results = tex>>=
>>>>> This does not work:
>>>>> <<name = tikzFig, echo = FALSE, fig = TRUE>>=
>>>>> Full code is given below:
>>>>> \documentclass{article}\usepackage{tikz}
>>>>> Figure~\ref{tikzExampleFig} is and an example of \texttt{tikzDevice}
>>>
>>> package.
>>>>>
>>>>> \begin{figure}\begin{center}
>>>>> <<name = tikzFig, echo = FALSE, results = tex>>=
>>>>> library(tikzDevice)tikz(console = TRUE)plot(sin, -pi, pi, main = "A
>>>>> stand
>>>
>>> alone TikZ plot", xlab = "x", ylab = "sin(x)")dummy <- dev.off()@
>>>>>
>>>>> \caption{Example of tikz
>>>
>>> graph}\label{tikzExampleFig}\end{center}\end{figure}
>>>>>
>>>>> \end{document}
>>>>
>>>>
>>>> Your example isn't usable -- please post in plain text, not HTML.
>>>>
>>>> I can't tell whether you are trying to use Sweave or knitr. If you're
>>>> using knitr, see the discussion of dev = "tikz" in
>>>> <http://yihui.name/knitr/>. If you're using Sweave, you probably need
>>>> pgfSweave.
>>>>
>>>> Duncan Murdoch



More information about the R-help mailing list