michal-h21 / make4ht

Build system for tex4ht
132 stars 15 forks source link

adding '\usepackage{cleveref}' erroneously changes minted output #89

Closed alder711 closed 1 year ago

alder711 commented 1 year ago

Hi, Michal.

I am encountering a peculiar issue. Let's say I have the following in main.tex:

\documentclass{article}
        \usepackage{minted}
        \usepackage{xcolor}

        \definecolor{light-gray}{gray}{0.85}
        \setminted{
                numbers=none,
                showspaces=false,
                breaklines=true,
                fontfamily=tt,
                frame=single,
                obeytabs=false,
                stripall=true,
                tabsize=8,
                bgcolor=light-gray
        }

\begin{document}
        \begin{minted}{bash}
int main() {
        int val = 0;
        val++;
        return val;
}
        \end{minted}
\end{document}

and I compile with make4ht --format html5+latexmk_build --backend tex4ht --loglevel info --shell-escape main.tex, I get the following rendition: image

All looks well to me here. However, if I add a \usepackage{cleveref} like so in main.tex:

\documentclass{article}
        \usepackage{minted}
        \usepackage{xcolor}
        % Added Here
        \usepackage{cleveref}

        \definecolor{light-gray}{gray}{0.85}
        \setminted{
                numbers=none,
                showspaces=false,
                breaklines=true,
                fontfamily=tt,
                frame=single,
                obeytabs=false,
                stripall=true,
                tabsize=8,
                bgcolor=light-gray
        }

\begin{document}
        \begin{minted}{bash}
int main() {
        int val = 0;
        val++;
        return val;
}
        \end{minted}
\end{document}

I get some extra space on the first line like so: image and I see the extra space in the HTML (note the two spaces in between the <pre> and <a> tags):

...
   <div class='minted-color-box' style='background-color:#D9D9D9'>
   <pre class='fancyvrb' id='fancyvrb1'>  <a id='x1-8r1'></a>
...

Software versions:

Am I missing something here? Any help would be greatly appreciated. Thanks in advance!

michal-h21 commented 1 year ago

Thanks for the report. It is caused by non-commented end lines in some definitions in cleveref.4ht. This version should fix that:

% cleveref.4ht (2022-10-27-16:55), generated from tex4ht-4ht.tex
% Copyright 2018-2021 TeX Users Group
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any
% later version. The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions
% of LaTeX version 2005/12/01 or later.
%
% This work has the LPPL maintenance status "maintained".
%
% The Current Maintainer of this work
% is the TeX4ht Project <http://tug.org/tex4ht>.
%
% If you modify this program, changing the
% version identification would be appreciated.
\immediate\write-1{version 2022-10-27-16:55}

% orig:refstepcounter is saved in cleveref-hooks.4ht
\let\cref@old@refstepcounter\orig:refstepcounter%
\def\refstepcounter{%
  \@ifnextchar[{\refstepcounter@optarg}{\refstepcounter@noarg}%]
}%

% fix for TeX4ht label mechanism
\def\cref:currentlabel#1{\let\cnt:currentlabel\@currentlabel
\def\:@currentlabel{\ifx \cnt:currentlabel\@currentlabel
   \expandafter\the\csname c@#1\endcsname\else \@currentlabel\fi}%
%
  \anc:lbl r{#1}%
}

\def\refstepcounter@noarg#1{%
  \cref@old@refstepcounter{#1}%
  \cref@constructprefix{#1}{\cref@result}%
  \@ifundefined{cref@#1@alias}%
    {\def\@tempa{#1}}%
    {\def\@tempa{\csname cref@#1@alias\endcsname}}%
  \protected@xdef\cref@currentlabel{%
    [\@tempa][\arabic{#1}][\cref@result]%
    \csname p@#1\endcsname\csname the#1\endcsname}%
    \cref:currentlabel{#1}%
    }%
\def\refstepcounter@optarg[#1]#2{%
  \cref@old@refstepcounter{#2}%
  \cref@constructprefix{#2}{\cref@result}%
  \@ifundefined{cref@#1@alias}%
    {\def\@tempa{#1}}%
    {\def\@tempa{\csname cref@#1@alias\endcsname}}%
  \protected@xdef\cref@currentlabel{%
    [\@tempa][\arabic{#2}][\cref@result]%
    \csname p@#2\endcsname\csname the#2\endcsname}%
    \cref:currentlabel{#2}%
  }%

\ifdefined\@firstoffive\else%
  \def\@firstoffive#1#2#3#4#5{#1}%
\fi
\def\:tempa#1#2{\bgroup%
  \def\rEfLiNK##1##2{\Link{##1}{}}%
  \expandafter\expandafter\expandafter\@firstoffive\csname r@#2\endcsname{}{}{}{}{}%
  \cref@getlabel{#2}{\@templabel}%
  #1{\@templabel}{}{}%
  \EndLink\egroup%
}%

\HLet\@@@setcref=\:tempa

\@ifpackageloaded{amsthm}{
  \let\cref@thmnoarg\@thm%
  \def\@thm{\@ifnextchar[{\cref@thmoptarg}{\cref@thmnoarg}}%]
  \def\:tempb[#1]#2#3#4{%
   % call original amsthm theorem definition, but
   % disable \:thm in order to prevent infinite loop
   \let\:thm\:gobble%
   \cref@thmnoarg{#2}%
   \o:cref@thmoptarg:[#1]{#2}{#3}{#4}
  }%
  \HLet\cref@thmoptarg\:tempb%
}{}%

\Hinput{cleveref}

\endinput
alder711 commented 1 year ago

Awesome, that change worked. Thanks for your active development, @michal-h21 !