Re: [Rd] problem with \eqn (PR#8322)

From: Kurt Hornik <Kurt.Hornik_at_wu-wien.ac.at>
Date: Wed 23 Nov 2005 - 21:07:57 GMT

>>>>> Hin-Tak Leung writes:

> Ross Boylan wrote:

>> On Mon, 2005-11-21 at 10:27 +0000, Hin-Tak Leung wrote:
>> 
>>> Kurt Hornik wrote:
>>> <snipped>
>>> 
>>>> Definitely a problem in Rdconv.
>>>> 
>>>> E.g.,
>>>> 
>>>> $ cat foo.Rd 
>>>> \description{
>>>> \eqn{{A}}{B}
>>>> }
>>>> hornik@mithrandir:~/tmp$ R-d CMD Rdconv -t latex foo.Rd | grep eqn
>>>> \eqn{{A}}{A}{{B}
>>>> 
>>>> shows what is going on.
>>> 
>>> There is a "work-around" - putting extra spaces between the two braces:
>>> 
>>> $ cat foo.Rd
>>> \description{
>>> \eqn{ {A} }{B}
>>> }
>>> 
>>> $R CMD Rdconv -t latex foo.Rd
>>> \HeaderA{}{}{}
>>> \begin{Description}\relax
>>> \eqn{ {A} }{B}
>>> \end{Description}
>>> 
>>> 
>>> HT
>> 
>> Terrific!  I can confirm that works for me and, in a way, a work-around
>> is better than a fix.  With the work-around, I can distribute the
>> package without needing to require that people get some not-yet-release
>> version of R that fixes the problem.  I do hope the problem gets fixed
>> though :)
>> 
>> By the way, I  couldn't see how the perl code excerpted earlier paid any
>> attention to {}.  But perl is not my native tongue.
>> 
>> Ross
>> 

> Glad to hear - the extra space in the latex-eqn-processed part of
> \eqn (versus the ascii part) possibly get skipped so there shouldn't
> be visual difference if it works.

> Regarding the perl code - "share/perl/R/Rdconv.pm" around line 400 -
> reproduced again here - the way I understand it, "\eqn{{a}}{b}" is first
> transformed into something like
> "\eqnbraces1brace2abrace2brace1brace1bbrace1", then called as
> "get_arguments {'eqn', ..., 2}", which then tries to extract "a" and
> "b". $ID is defined elsewhere to be "brace1", etc. That's the idea.
> The 4 regular expressions - the 1st, 2nd and the 4th probably should be
> non-greedy (i.e. "??" instead of "?", and ".*?" instead of ".*"). But
> then, this is just my idea and I haven't tried very hard to figure out
> what it is supposed and not supposed to do...

> For those who wants to get to the bottom of it, I think inserting
> something like this (this just append $text into a tmp file) would be
> useful, against the small snipplet that Kurt provided:
> open(JUNK, ">> /tmp/junk");
> print JUNK "outer/inner loop:", $text, "\n";
> close(JUNK);

> HT

> =======================
> ## Get the arguments of a command.
> sub get_arguments {
> my ($command, $text, $nargs) = @_;
> ## Arguments of get_arguments:
> ## 1, command: next occurence of 'command' is searched
> ## 2, text: 'text' is the text containing the command
> ## 3, nargs: the optional number of arguments to be extracted;
> ## default 1
> my @retval;
> ## Returns a list with the id of the last closing bracket and the
> ## arguments.

> if($text =~ /\\($command)(\[[^\]]+\])?($ID)/){
> $id = $3;
> $text =~ /$id(.*)$id/s;
> $retval[1] = $1;
> my $k=2;
> while(($k<=$nargs) && ($text =~ /$id($ID)/)){
> $id = $1;
> $text =~ /$id\s*(.*)$id/s;
> $retval[$k++] = $1;
> }
> }
> $retval[0] = $id;
> @retval;
> }
> ==================

> HT

I think I have a fix for this. Will shortly commit to r-devel.

-k



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Nov 24 20:15:04 2005

This archive was generated by hypermail 2.1.8 : Thu 24 Nov 2005 - 11:21:01 GMT