[l2h] Re: getting \par in graphical output of listings environment

Hans Fangohr H.FANGOHR at soton.ac.uk
Mon Oct 25 12:45:51 CEST 2004


Hi Ross,

many thanks for your detailed answer.

> There are several ways to tackle it, each depending upon
> just what you want to produce for the HTML of the listing
> environment.
>
> If you want just a simple verbatim listing of the code,
> set within  <PRE> ... </PRE> tags, then one approach is
> to hook into LaTeX2HTML's treatment of 'verbatim-like'
> environments.
>
> *Any* environment which has either 'verbatim' or 'Verbatim'
> in the name will be processed that way automatically.
> So you could do:
>
>  1.  place the following coding in the preamble:
>
> %begin{latexonly}
> \lstnewenvironment{myverbatim}{}{}
> %end{latexonly}
>
> 2.  change all of your usages of:
> \begin{lstlisting}  to  \begin{myverbatim}
> \end{lstlisting}  to  \end{myverbatim}
>
> Now the document should process fine in both
> LaTeX and LaTeX2HTML.
> *Any* environment name containing 'verbatim' could be
> used here' it doesn't have to be 'myverbatim'.

That is a nice idea -- I might consider that.

I'd prefer, however, latex2html to generate images as these would
represent the colourcoding of keywords in the source code that the
listings environment can do.

> One problem with this solution is that an optional
> argument to the listing environment is not recognised
> as such by LaTeX2HTML. There's no simple way to overcome
> this without some edits to the coding of the 'texexpand'
> and 'latex2html' Perl scripts.

That is not too bad as there is a command to set the listings
environment separately (\lstset{}) [and kind of globally].

> However, maybe you want the HTML to be an image of the
> environment that LaTeX would produce, as at present
> where the {lstlisting} environment is treated as being
> *unknown*.
>
> In that case, best would be to write a short Perl
> subroutine, named  do_env_lstlisting  as follows.
>
>
> sub do_env_lstlisting {
> local ($_) = @_;
> my $env_id = ++$global{'max_id'};
> $_ =~ s/\\par/\n\n/g;
> &process_undefined_environment('lstlisting', $env_id, $_);
> }
>
>
> This could be placed in an initialization file,
Done that.

Unfortunately, there is an error message and I am not very good at
Perl. Can you see what is going on:

fangohr at binx sesa2006 $ latex2html partestorg.tex
Note: Loading /home/fangohr/.latex2html-init
/home/fangohr/.latex2html-init did not return a true value at /usr/lib/latex2html/latex2html.pl line 162.
Compilation failed in require at /usr/bin/latex2html line 39.

where this is the content of /home/fangohr/.latex2html-init:

sub do_env_lstlisting {
 	local ($_) = @_;
 	my $env_id = ++$global{'max_id'};
 	$_ =~ s/\\par/\n\n/g;
 	&process_undefined_environment('lstlisting', $env_id, $_);
}

> Hmm. That \n\n  replacement may not work under DOS/Windows,
> where the line-ending character is different.
No probs, want to run this on Linux.


> Ouch; that's a pretty nasty kind of hack --- clever, mind you!
> --- and it only works for an image as output.
Correct on all accounts: ugly and works for image only.

Cheers,

Hans



More information about the latex2html mailing list