On Mon, 15 Jun 2020, Aditya Mahajan wrote:
On Mon, 15 Jun 2020, Aditya Mahajan wrote:
On Sun, 14 Jun 2020, Fabrice L wrote:
Hi,
Following a question about the broken R module (R the statistical
software), Aditya suggested me the filter module (thanks to him). I’m
about to distribute a set of course notes to colleagues, and I need to
deal with details now. I have one problem and two questions.
1) the filter collect R code between \startR / \stopR and submit this code
to R. As it can be seen in the following minimal example, when a label
contains an accented character (« Fréquence » in my example), the pdf
graphic does not contains the « é ». Strangely, the snippet of code (which
is saved locally as « test2-temp-R-0.tmp » (for test2.tex)) when submitted
with the same command as the filtercommand, works correctly; that means
the same file works when submitted to R outside of ConTeXt. I have no idea
how to solve this.
Are you running the exact same command as the `filtercommand`. If so, I
don't know why running the `filtercommand` through context vs directly
typing it on the terminal should behave differently. The filter module
effectively just runs os.execute("filtercommand"). I don't use R so I am
unable to debug further.
I can reproduce this output side the filter module. If I directly run
os.execute(...) from a lua session, the output is correct but running it
through context gives the wrong output. I am guessing this is something to do
with locale. I notice that the output of os.execute("locale") from context is
different from that from my shell. But I don't know why locale should affect
UTF characters in R.
It is indeed related to locale. Here is a minimal example that works. I use a
beforebuffer to set the locale so that you don't have to do it in each snippet
and then filter out the first line in the typeset code listing and filter out
the first two lines in the output.
\usemodule[filter]
\usemodule[vim]
\definecolor [darkblue] [r=0.1, g=0.11, b=0.84]
\definecolor [darkgreen] [g=0.7]
\definecolor [lightblue] [h=87cefa]
\definecolor [lightgreen] [g=0.95,b=0.8,r=0.8]
\defineframedtext
[leftbartext]
[
width=local,
frame=off,
framecolor=darkblue,
leftframe=on,
rulethickness=1ex,
offset=0.25ex,
loffset=3ex,
background=color,
backgroundcolor=lightblue,
]
\definevimtyping
[RCODE]
[
vimcommand=nvim,
syntax=r,
directory=output,
strip=yes,
escape=yes,
before={\blank[quarterline]\startleftbartext},
after={\stopleftbartext},
]
\define[1]\ShowOutput
{\typeRCODEfile[start=2]{\externalfilterinputfile}
\startleftbartext[framecolor=darkgreen, backgroundcolor=lightgreen]
\setupalign[flushleft, verytolerant]
\typefile[range={3,-1}]{#1}
\stopleftbartext}
\startbuffer[locale]
Sys.setlocale(category="LC_ALL", locale="en_US.UTF-8")
\stopbuffer
\defineexternalfilter
[R]
[ filtercommand={R CMD BATCH -q --no-timing --save --restore
\externalfilterinputfile\space \externalfilteroutputfile},
output=\externalfilterbasefile.out,
directory=output,
readcommand=\ShowOutput,
read=no,
bufferbefore=locale,
cache=yes,
purge=yes,
]
\starttext
Some text...
\startR[read=yes]
pdf("RPlots/MyHistogram.pdf",5,5)
X <- rnorm(200,mean=10,sd=2)
hist(X, col = "red3" , xlab="Score QI" , main="", ylab="fréquence")
\stopR
\externalfigure[RPlots/MyHistogram.pdf][width=.5\textwidth]
\stoptext
Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the
Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://context.aanhet.net
archive : https://bitbucket.org/phg/context-mirror/commits/
wiki : http://contextgarden.net
___________________________________________________________________________________