daqana/tikzDevice

Difference between version 0.12.3.2 and 0.12.3.1

jamarav opened this issue · 2 comments

Hi everybody,

I would like to report my expirience with the tikzDevice because I am experiencing problems with the cran version.

I'm writing my phD with knitr and plotting with ggplot and tikzDevice and I only can use the tikzDevice package building it from the master branch. I'm not sure which is the difference between the tikzDevice package version 0.12.3.2 and 0.12.3.1 (cran repository) but the version in the cran repository doesn't works for me.

Probably the reason is that I divide the phD in different *.Rnw files and I use a custom *.cls class (installed in my texlive distribution). I have a main.Rnw in the main directory and then different *.Rnw files (chapters) placed in different subdirectories.

With this background, I'm able to work propertly with the tikzDevice built from the master branch. The only requirement is set the main directory in R before plotting with the tikzDevice (When I plot in the child documents). I use this function:

printTikz = function(p, current_wdirectory) {
  
  setwd(base_directory)

  print(p)
  
  setwd(current_wdirectory)
  
}

I would like to know if there are any major changes between the development version and the version in the cran repository that explain this strange behaviour. I don't understand why it works in one case and not in the other.

As an example this is an error if I use the version from the cran repository (it works with the development version):

Quitting from lines 613-649 (./03_chapters/chap_03/chap_03.Rnw) 
Quitting from lines 758-758 (./03_chapters/chap_03/chap_03.Rnw) 
Error in getMetricsFromLatex(TeXMetrics, verbose = verbose) : 
TeX was unable to calculate metrics for:

	\char77

Run the following commands for diagnosis:

	tikzTest()
	tikzTest("\\char77")

Common reasons for failure include:
  * The string contains a character which is special to LaTeX unless
    escaped properly, such as % or $.
  * The string makes use of LaTeX commands provided by a package and
    the tikzDevice was not told to load the package.

The TeX and log files used for the calculation can help diagnose the
problem. If these files are missing, rerun the plot and make sure to
keep the R session open.
TeX file: tikzStringWidthCalc.tex
Log file: tikzStringWidthCalc.log
Calls: knit ... descentDetails.text -> grid.Call -> <Anonymous> -> getMetricsFromLatex

However if I run the tikzTest() funtion I don't get any error:

> tikzDevice::tikzTest("\\char77")

Active compiler:
	/usr/local/texlive/2021/bin/x86_64-linux/pdflatex
	pdfTeX 3.141592653-2.6-1.40.23 (TeX Live 2021)
	kpathsea version 6.3.3

Measuring dimensions of: \char77
Running command: '/usr/local/texlive/2021/bin/x86_64-linux/pdflatex' -interaction=batchmode -halt-on-error -output-directory '/tmp/RtmpzR82WU/tikzDevice27b7386cced' 'tikzStringWidthCalc.tex'
This is pdfTeX, Version 3.141592653-2.6-1.40.23 (TeX Live 2021) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
[1] 9.16443

This is my session info:

> print(sessionInfo())
R version 4.1.0 (2021-05-18)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.5 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas/libblas.so.3
LAPACK: /usr/lib/x86_64-linux-gnu/libopenblasp-r0.2.20.so

locale:
 [1] LC_CTYPE=es_ES.UTF-8       LC_NUMERIC=C               LC_TIME=es_ES.UTF-8        LC_COLLATE=es_ES.UTF-8     LC_MONETARY=es_ES.UTF-8   
 [6] LC_MESSAGES=es_ES.UTF-8    LC_PAPER=es_ES.UTF-8       LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.1.0      tools_4.1.0         tikzDevice_0.12.3.1 filehash_2.4-2      grid_4.1.0 

Ok. I found the problem. It seems that with the current version in cran we can't include .tex files with \input{} function in the preamble. Probably, this functionality is only included in the development version. I attached the tikzStringWidthCalc.log file (
tikzStringWidthCalc.log
).
For the moment I will avoid using these types of functions in the preamble until a new stable version is released and use the version in cran. Of course I need to install my custom *.cls class in my latex distribution in order to use the cran version. I tried with the developement version and works for me without install the *.cls class in my latex distribution (It is located in the main folder with my main.Rnw file). It seems another difference between the development version and the version in cran.

Just a suggestion, in order to improve the use of the tikzDevice plotting from child document, It would be possible to print figures without having to change to the main path? (print tikz plots directly in the child documents located in different subdirectories)

At this time,
I solved this with my printTikz() function attached above:

printTikz = function(p, current_wdirectory) {
  
  setwd(base_directory)

  print(p)
  
  setwd(current_wdirectory)
  
}

Ok, now I can print tikz figures from any subdirectory without the printTikz() function attached above. The only requirement is to install de custom *.cls in the latex distribution. With the development version it is not necessary to install, but we need to locate *.cls file in the main folder. I had problems printing from child documents because I didn't put a copy of the *.cls file in the subdirectories of the child documents.
Definitely, the best thing is to install the *.cls class in our latex distribution