On 6/10/2016 3:53 AM, Michal Hoftich wrote:
""Nasser,
this is of course typical example of case when you should put your
macros to .sty file and redefinitions for tex4ht into .4ht file.
mycode.sty:
%%%%%%%%%%%%
\ProvidesPackage{mycode}
\RequirePackage{listings}
\lstnewenvironment{code}
{\lstset{language=matlab}}
{}
\endinput
%%%%%%%%%%%%
tex4ht configurations in mycode.4ht:
%%%%%%%%%%%%
\ScriptEnv{code}
{\ifvmode\IgnorePar\fi\EndP\NoFonts\hfill\break\HCode{<pre>\Hnewline}}
{\HCode{</pre>}\EndNoFonts\endgraf}
\endinput
%%%%%%%%%%%%
and the modified TeX file:
%%%%%%%%%%%%
\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\usepackage{mycode}
\begin{document}
some text
\begin{code}
X=10;
y=5;
\end{code}
another text
\end{document}
%%%%%%%%%%%%
tex4ht definitions are little bit more involved, in order to handle
the paragraphs correctly ("\ifvmode\IgnorePar\fi\EndP" and "\endgraf),
it contains also some minimal HTML insertions. There is no need to
define other environments, \ScriptEnv can be used to handle existing
environment and it can also be used to insert any HTML code.
Best regards,
Michal
Thanks Michal;
This is really neat. I never knew how to do all the above before.
never used .sty and .4ht before and how they are used. (is
there a basic user-guide tutorial on these things?)
But I have 2 small questions:
I see the first line of the listing showing up in HTML shifted
to the right from the rest of the code. But it should be PRE,
so it should not get indented in any way?
If you run make4ht --lua foo.tex on :
----------------------------------------
% !TeX program = lualatex
\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\usepackage{mycode}
\begin{document}
some text
\begin{code}
X=10;
y=5;
z=20;
\end{code}
another text
\end{document}
---------------------
With your supplied mycode.4ht and mycode.sty in the same folder,
you'll see the HTML shows this:
------------
X=10;
y=5;
z=20;
-------------
i.e. first line is shifted. Is it possible to fix this?
This happens on firefox and chrom. The actual HTML is this:
<!--l. 8--><p class="noindent" >some text </p>
<pre>
X=10;
y=5;
z=20;
</pre>
<!--l. 14--><p class="indent" > another text </p>
The second question: I see no \ifdefined\HCode anywhere. How
does it know to use listings package, when compiled with
pdflatex or lualatex, and to use the HTML ScriptEnv/HTML part
when compiled with make4ht? I am confused on this part. Is there
some implicit \ifdefined\HCode going on under the hood here?
Thanks again, these files really help.
--Nasser