Michal,

Thank you for your kind and rapid response!  Um, do you have a
recommendation for the right versions of tex4{ebook,ht}, and what other
software I should be compiling from sources?  Or if there's a Linux distro
(let's say, Ubuntu or Debian's latest  bleeding edge) I could get that
working in Docker.

I'd like to have the right software before proceeding.

Thanks,
--chet--


On Thu, Feb 20, 2025 at 5:14 AM Michal Hoftich <michal....@gmail.com> wrote:

> Hi Chet,
>
>
>
>> I've been fighting a perplexing problem with internal refs when
>> generating an ebook.  I've boiled it down to an MWE, but really don't know
>> how to proceed.  It seems that people attach MWE as MIME attachments, and
>> that's what I'll do.
>>
>> I'm not a real expert in TeX, so perhaps I've left a few things in this
>> MWE that I could/should have left out. I hope it's small enough.  Also, I
>> should ask if there are any good tutorials or references for how to get
>> \label/\ref to work well with tex4ebook/tex4ht, esp. in the presence of
>> figure, minipage, listinputlisting environments.  I left in the chapters,
>> so that the generated EPUB would have multiple pages (so I could verify
>> that the links were broken by testing them in ebook-viewer, as well as by
>> epubcheck).
>>
>> Environment:
>>
>>  I'm using:
>> Ubuntu 24.04 LTS
>> texlive 2023.20240207-1
>>
>> and the tex4ht and tex4ebook that come with the packages
>> texlive-extra-utils and texlive-binaries.
>>
>
>
> it seems there are multiple problems:
>
> 1. you are probably using too old version of TeX4ht and TeX4ebook, you
> shouldn't get epubcheck errors about colons in id with the up-to-date
> version.
> 2. I would change your TeX code. First of all, I would use a custom
> environment that would replace the minipage, update the program counter,
> and print the program title.
>
> The declaration can look like this:
>
> \newcounter{program}
> \renewcommand{\theprogram}{\arabic{program}}
> \newcommand\printprogram[1]{\theprogram\space #1\par}
>
> \newenvironment{program}[1]{\refstepcounter{program}\minipage{\textwidth}\printprogram{#1}}{\endminipage}
>
> You can then simplify your listings:
>
> \begin{figure}[tp]
> \begin{program}{Title}
> \label{fig:label}
> \lstinputlisting{/usr/share/texlive/README}%
> \end{program}
> \caption{Caption}
> \end{figure}
>
> Note that you need to use \label directly after \begin{program}, because
> \lstinputlisting internally updates reference counters so that the link
> would be wrong.
>
> For TeX4ht, you will need to use a config file:
>
> %%%%%%%%%%%%
> \Preamble{xhtml}
> \ConfigureEnv{program}
> {\ifvmode\IgnorePar\fi\EndP\HCode{<div
> class="program">}\Configure{minipage}{}{}{}{}}
> {\ifvmode\IgnorePar\fi\EndP\HCode{</div>}}{}{}
> \renewcommand\printprogram[1]{\ifvmode\IgnorePar\fi\EndP
> \HCode{<div
> class="programname">}\AnchorLabel\theprogram\quad#1\HCode{</div>}\par}
>
> \begin{document}
> \EndPreamble
> %%%%%%%%%%%%
>
> It adds some HTML tags for the program and program title, to enable CSS
> styling. For example, if you want to make the title bold, you could add
> something like:
>
> \Css{.programname{text-weight: bold;}}
>
> to the config file. Also, note the \AnchorLabel command. It will insert a
> destination link for the current label. This will ensure that \ref and
> \pageref will point to the right place.
>
> The full example is attached. Compile using:
>
> $ tex4ebook -c config.cfg sample.tex
>
> Best regards,
> Michal
>
>
>

Reply via email to