2

I want to wrap several paragraphs inside a div with a custom class, but the div is closed automatically in the resulting HTML when a new paragraph begins.

This shows the issue:

\documentclass{article}
\begin{document}
\Hcode{<div class='FOO'>}
\begin{center}
test
\end{center}
\Hcode{</div>}
\end{document}

The 'FOO'-div is closed before the 'center'-div is opened.

The tex4ht tutorial begins to explain what I believe is what I need, but ends with "This exercise will be little bit more difficult".

Does anyone know how I can achieve this?

4

The paragraphs must be handled in a specific way in tex4ht. They must be closed before a block element starts. Details are in the linked answer.

I would introduce a custom environment in this case:

\documentclass{article}
\newenvironment{myblock}{\center}{\endcenter}
\begin{document}

\begin{myblock}
test

another paragraph
\end{myblock}
\end{document}

It can be then configured in the .cfg file:

\Preamble{xhtml}
\ConfigureEnv{myblock}
{\ifvmode\IgnorePar\fi\EndP\HCode{<div class="foo">}\par}
{\ifvmode\IgnorePar\fi\EndP\HCode{</div>}\par}{}{}
\Css{.foo{text-align:center;}}
\begin{document}
\EndPreamble

The \ConfigureEnv command can be used to configure any environment, the \ifvmode\IgnorePar\fi\EndP will handle the paragraph closing before the block element start or end. \par command will ensure a new paragraph opening inside and after the environment.

This is the resulting HTML:

<body>
   <div class="foo">
<!--l. 6--><p class="noindent" >test
</p><!--l. 8--><p class="noindent" >another paragraph
</p>
</div>

</body> 
  • I had to replace the quotes by single quotes, or else I'd get broken HTML: <div class="foo\global \let \T1\frqq \T1\guillemotright \T1\frqq &lt;!--l. 23--&gt;&lt;p class=" noindent"="">. But I now got it to work the way I wanted. Thanks for the swift response! Very nice work with make4ht, too. – Volker May 15 '19 at 12:05
  • @Volker oh really? this shouldn't happen. what was the command you used for the compilation? including options – michal.h21 May 15 '19 at 12:22
  • make4ht -l -u -f html5 -d html doc.tex "" "" "" "-file-line-error -halt-on-error" – Volker May 15 '19 at 12:58
  • Never mind, with the article class it works fine. I was using a custom document class with lots of dependencies. Not sure where the problem is... – Volker May 15 '19 at 13:04
  • 1
    @Volker this can be an issue with Babel package, it often redefines characters like parenthesis to produce desired output. it can break things like this. – michal.h21 May 15 '19 at 13:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.