2

The test code:

\documentclass{amsart}

\usepackage{hyperref}

\begin{document}

\part{Part1}

\section{Sec1}

\section{Sec2}

\part{Part2}

\end{document}

Compiled with tex4ebook, it returns with ! Use of \n:no@part: doesn't match its definition.

I wonder a workaround for this. Thanks!

2

There seems to be clash between amsart.4ht and nameref.4ht. Try the updated nameref.4ht:

% nameref.4ht (2019-04-12-10:50), generated from tex4ht-4ht.tex
% Copyright 2005-2009 Eitan M. Gurari
% Copyright 2009-2019 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 2019-04-12-10:50}

   \let\NR:Type\relax
\let\ltx@label\label
\def\prf:label{{\ifx \NR:Title\:UnDef \else \NR:Title\fi}%
               {\ifx \NR:Type\relax \else \NR:Type .1\fi}{}}%
\let\NR:StartSec\:StartSec
\let\NR:no@sect\no@sect
\def\no@sect#1#2#3#4#5#6[#7]#8{\gdef\NR:Title{\a:newlabel{#7}}%
    \gdef\NR:Type{#1}%
    \NR:no@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
\def\:StartSec#1#2#3{%
   \gdef\NR:Title{\a:newlabel{#3}}%
   \gdef\NR:Type{#1}%
   \NR:StartSec{#1}{#2}{#3}%
}

\def\:tempc#1#2#3#4#5#6[#7]#8{%
   \gdef\NR:Title{\a:newlabel{#7}}%
   \gdef\NR:Type{#1}%
   \o:NR@sect:{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}}
\HLet\NR@sect\:tempc

\def\:tempc#1#2#3#4#5{%
   \gdef\NR:Title{\a:newlabel\ssect:ttl}%
   \gdef\NR:Type{#1}%
   \o:NR@ssect:{#1}{#2}{#3}{#4}{#5}%
}
\HLet\NR@ssect\:tempc

\def\:tempc[#1]#2{%
   \gdef\NR:Title{\a:newlabel{#1}}%
   \gdef\NR:Type{part}%
   \o:no@part:[{#1}]{#2}}

% this definition clashes with asmart and amsproc classes, so we
% need to skip if these are active
\@ifundefined{opt@amsart.cls}{%
\@ifundefined{opt@amsproc.cls}{%
\HLet\no@part\:tempc
}{}}{}


\def\:tempc#1{%
   \gdef\NR:Title{\a:newlabel{#1}}%
   \gdef\NR:Type{part}%
   \o:no@spart:{#1}}
\HLet\no@spart\:tempc

\def\:tempc[#1]#2{%
   \gdef\NR:Title{\a:newlabel{#1}}%
   \gdef\NR:Type{chapter}%
   \o:NR@chapter:[{#1}]{#2}}
\HLet\NR@chapter\:tempc

\def\:tempc#1{%
   \gdef\NR:Title{\a:newlabel\sch:ttl}%
   \o:NR@schapter:{#1}%
   \gdef\NR:Type{chapter}%
}
\HLet\NR@schapter\:tempc

\let\o:NR@@caption\@caption
%
%
% Keith Andrews <kandrews@iicm.edu> reported that \@captype as
% \NR:Type threw an undefined control sequence error. I think
% \@currenvir is safe, there is nothing special about \@captype.
%
\long\def\@caption#1[#2]{%
    \gdef\NR:Type{\@currenvir}%
    \gdef\NR:Title{\a:newlabel{#2}}%
   \o:NR@@caption{#1}[{#2}]%
}

\let\o:NRorg@opargbegintheorem\@opargbegintheorem
  \def\@opargbegintheorem#1#2#3{%
    \gdef\NR:Title{\a:newlabel{#3}}%
    \gdef\NR:Type{\@currenvir}%
    \NR@gettitle{#3}%
    \defineautorefname{\@currenvir}{#1}%
    \o:NRorg@opargbegintheorem{#1}{#2}{#3}%
  }%

\let\o:NRorg@begintheorem\@begintheorem
  \def\@begintheorem#1#2{%
    \gdef\NR:Title{\a:newlabel{#1 #2}}%
    \gdef\NR:Type{\@currenvir}%
    \defineautorefname{\@currenvir}{#1}%
    \NR@gettitle{}%
    \o:NRorg@begintheorem{#1}{#2}%
  }%

\AtBeginDocument{%
  \@ifpackageloaded{listings}{%
      \def\:tempc#1{%
         \gdef\NR:Title{\a:newlabel{listing}}%
         \gdef\NR:Type{lstlisting}%
         \o:NROrg@lst@MakeCaption:{#1}%
         \gdef\@currentlabelname{listing}}
      \HLet\NROrg@lst@MakeCaption\:tempc
  }{}%
  % bug [348]
  \def\:tempams{%
    \gdef\NR:Title{\a:newlabel{equation}}%
    \gdef\NR:Type{equation}%
    \gdef\@currentlabelname{equation}%
  }
  \@ifpackageloaded{amsmath}{%
     \Configure{@begin}{align}{\:tempams}
     \Configure{@begin}{multline}{\:tempams}
     \Configure{@begin}{equation}{\:tempams}
     \Configure{@begin}{boxed}{\:tempams}
     \Configure{@begin}{equations}{\:tempams}
     \Configure{@begin}{equation}{\:tempams}
     \Configure{@begin}{gather*}{\:tempams}
     \Configure{@begin}{gather}{\:tempams}
     \Configure{@begin}{genfrac}{\:tempams}
     \Configure{@begin}{measure@}{\:tempams}
     \Configure{@begin}{multline*}{\:tempams}
     \Configure{@begin}{multline}{\:tempams}
     \Configure{@begin}{overset}{\:tempams}
     \Configure{@begin}{smallmatrix}{\:tempams}
     \Configure{@begin}{split}{\:tempams}
     \Configure{@begin}{subarray}{\:tempams}
     \Configure{@begin}{substack}{\:tempams}
     \Configure{@begin}{underset}{\:tempams}
     \Configure{@begin}{xleftarrow}{\:tempams}
     \Configure{@begin}{xrightarrow}{\:tempams}
  }{
     \Configure{@begin}{equation}{\:tempams}
}

}
\let\T:ref=\::ref
\def\::ref{\protect\T@ref}
\def\T@ref#1{%
  \@safe@activestrue
  \let\::ref \T:ref
  \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
  \def\::ref{\protect\T@ref}%
  \@safe@activesfalse
}

\gdef\defineautorefname#1#2{%
    \expandafter\gdef\csname #1autorefname\endcsname{#2}}
\defineautorefname{theorem}{Theorem}

\Configure{newlabel}
   {\csname cur:th\endcsname \csname :currentlabel\endcsname}
   {\string\csname\space :autoref\string\endcsname
     {\NR:Type}#1}

\ifx \@currentlabelname\:UnDef
   \let\@currentlabelname\empty
\fi

\pend:defIII\@setref{\edef\RefArg{##3}}
\append:defIII\@setref{\let\:autoref\:gobble}
\let\:autoref\:gobble


\Hinput{nameref}
\endinput

The important part is:

\@ifundefined{opt@amsart.cls}{% 
\@ifundefined{opt@amsproc.cls}{%
\HLet\no@part\:tempc
}{}}{} 

It disables patches for the \part from nameref.4ht for amsart and amsproc classes.

enter image description here

  • I don't understand why there is no clash between (original) nameref.4ht and amsbook.4ht? In amsbook.4ht, there is also a re-definition of \part. – Yai0Phah Apr 13 at 11:58
  • @Yai0Phah I don't understand it as well. when I copied the code from amsbook.4ht to amsart.4ht, it didn't work at all, so I came with this work around – michal.h21 Apr 13 at 12:16
  • I inserted \tracingall and try to read the .log file. The context of the error: \n:no@part: [#1]#2->\gdef \NR:Title {\a:newlabel {#1}}\gdef \NR:Type {part}\o:no@part: [{#1}]{#2} ! Use of \n:no@part: doesn't match its definition. Seemingly it is related to an optional argument. I tried to feed \part with an optional argument \part[test]{Part1}, along with amsart and hyperref, there is no clash. – Yai0Phah Apr 13 at 13:18
  • I read the amsart.cls and amsbook.cls. I found that in both amsart.cls and amsbook.cls, \part accepts no optional argument, while in amsbook.cls, there is an addition optional argument version \@part[#1]{#2}. I see that in amsbook.4ht, \no@part is redirected by \let\no@part\@part, while in amsart.4ht, by \let\no@part\part, and \no@part forces an optional argument in nameref.4ht. – Yai0Phah Apr 13 at 13:33
  • I don't know what a correct code should be, but it seems to me that there should be no definition of \no@part in amsart.4ht, according to the non-existence of \@part in amsart.cls, and accordingly in nameref.4ht, \no@part should be treated only if it is defined. – Yai0Phah Apr 13 at 13:39

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.