[Tex/LaTex] Classicthesis, acro and hyperref clash

acroclassicthesishyperref

I'm trying to get acro to work with classicthesis and with the hyperref option, but to no avail, though errors are gone when the hyperref option in acro is removd.

The MWE is quite long on this one. Essentially, I modified classicthesis-config.tex and FrontBackmatter/Contents.tex to the following.

classicthesis-config.tex

%!TEX root = ./ClassicThesis.tex
% ****************************************************************************************************
% classicthesis-config.tex 
% formerly known as loadpackages.sty, classicthesis-ldpkg.sty, and classicthesis-preamble.sty 
% Use it at the beginning of your ClassicThesis.tex, or as a LaTeX Preamble 
% in your ClassicThesis.{tex,lyx} with \input{classicthesis-config}
% ****************************************************************************************************  
% If you like the classicthesis, then I would appreciate a postcard. 
% My address can be found in the file ClassicThesis.pdf. A collection 
% of the postcards I received so far is available online at 
% http://postcards.miede.de
% ****************************************************************************************************

% ****************************************************************************************************
% 1. Configure classicthesis for your needs here, e.g., remove "drafting" below 
% in order to deactivate the time-stamp on the pages
% ****************************************************************************************************
\PassOptionsToPackage{eulerchapternumbers,listings,drafting,%
                 pdfspacing,%floatperchapter,%linedheaders,%
                 subfig,beramono,eulermath,parts}{classicthesis}                                        
% ********************************************************************
% Available options for classicthesis.sty 
% (see ClassicThesis.pdf for more information):
% drafting
% parts nochapters linedheaders
% eulerchapternumbers beramono eulermath pdfspacing minionprospacing
% tocaligned dottedtoc manychapters
% listings floatperchapter subfig
% ********************************************************************

% ********************************************************************
% Triggers for this config
% ******************************************************************** 
\usepackage{ifthen}
\newboolean{enable-backrefs} % enable backrefs in the bibliography
\setboolean{enable-backrefs}{false} % true false
% ****************************************************************************************************


% ****************************************************************************************************
% 2. Personal data and user ad-hoc commands
% ****************************************************************************************************
\newcommand{\myTitle}{A Classic Thesis Style\xspace}
\newcommand{\mySubtitle}{An Homage to The Elements of Typographic Style\xspace}
\newcommand{\myDegree}{Doktor-Ingenieur (Dr.-Ing.)\xspace}
\newcommand{\myName}{Andr\'e Miede\xspace}
\newcommand{\myProf}{Put name here\xspace}
\newcommand{\myOtherProf}{Put name here\xspace}
\newcommand{\mySupervisor}{Put name here\xspace}
\newcommand{\myFaculty}{Put data here\xspace}
\newcommand{\myDepartment}{Put data here\xspace}
\newcommand{\myUni}{Put data here\xspace}
\newcommand{\myLocation}{Darmstadt\xspace}
\newcommand{\myTime}{August 2012\xspace}
\newcommand{\myVersion}{version 4.1\xspace}

% ********************************************************************
% Setup, finetuning, and useful commands
% ********************************************************************
\newcounter{dummy} % necessary for correct hyperlinks (to index, bib, etc.)
\newlength{\abcd} % for ab..z string length calculation
\providecommand{\mLyX}{L\kern-.1667em\lower.25em\hbox{Y}\kern-.125emX\@}
\newcommand{\ie}{i.\,e.}
\newcommand{\Ie}{I.\,e.}
\newcommand{\eg}{e.\,g.}
\newcommand{\Eg}{E.\,g.} 
% ****************************************************************************************************

\usepackage[usenames,dvipsnames,table]{xcolor}
\usepackage[shortlabels]{enumitem}
\usepackage{mfirstuc,relsize,acro} 
\usepackage{environ}
% ****************************************************************************************************
% 3. Loading some handy packages
% ****************************************************************************************************
% ******************************************************************** 
% Packages with options that might require adjustments
% ******************************************************************** 
\PassOptionsToPackage{latin9}{inputenc} % latin9 (ISO-8859-9) = latin1+"Euro sign"
 \usepackage{inputenc}              

%\PassOptionsToPackage{ngerman,american}{babel}   % change this to your language(s)
% Spanish languages need extra options in order to work with this template
%\PassOptionsToPackage{spanish,es-lcroman}{babel}
 \usepackage{babel}                 

\PassOptionsToPackage{square,numbers}{natbib}
 \usepackage{natbib}                

\PassOptionsToPackage{fleqn}{amsmath}       % math environments and more by the AMS 
 \usepackage{amsmath}

% ******************************************************************** 
% General useful packages
% ******************************************************************** 
\PassOptionsToPackage{T1}{fontenc} % T2A for cyrillics
    \usepackage{fontenc}     
\usepackage{textcomp} % fix warning with missing font shapes
\usepackage{scrhack} % fix warnings when using KOMA with listings package          
\usepackage{xspace} % to get the spacing after macros right  
\usepackage{mparhack} % get marginpar right
%\usepackage{fixltx2e} % fixes some LaTeX stuff 
%\PassOptionsToPackage{printonlyused,smaller}{acronym}
%   \usepackage{acronym} % nice macros for handling all acronyms in the thesis
%\renewcommand*{\acsfont}[1]{\textssc{#1}} % for MinionPro
%\renewcommand{\bflabel}[1]{{#1}\hfill} % fix the list of acronyms
% ****************************************************************************************************


% ****************************************************************************************************
% 4. Setup floats: tables, (sub)figures, and captions
% ****************************************************************************************************
\usepackage{tabularx} % better tables
    \setlength{\extrarowheight}{3pt} % increase table row height
\newcommand{\tableheadline}[1]{\multicolumn{1}{c}{\spacedlowsmallcaps{#1}}}
\newcommand{\myfloatalign}{\centering} % to be used with each float for alignment
\usepackage{caption}
\captionsetup{format=hang,font=small}
\usepackage{subfig}  
% ****************************************************************************************************


% ****************************************************************************************************
% 5. Setup code listings
% ****************************************************************************************************
\usepackage{listings} 
%\lstset{emph={trueIndex,root},emphstyle=\color{BlueViolet}}%\underbar} % for special keywords
\lstset{language=[LaTeX]Tex,%C++,
    keywordstyle=\color{RoyalBlue},%\bfseries,
    basicstyle=\small\ttfamily,
    %identifierstyle=\color{NavyBlue},
    commentstyle=\color{Green}\ttfamily,
    stringstyle=\rmfamily,
    numbers=none,%left,%
    numberstyle=\scriptsize,%\tiny
    stepnumber=5,
    numbersep=8pt,
    showstringspaces=false,
    breaklines=true,
    frameround=ftff,
    frame=single,
    belowcaptionskip=.75\baselineskip
    %frame=L
} 
% ****************************************************************************************************             


% ****************************************************************************************************
% 6. PDFLaTeX, hyperreferences and citation backreferences
% ****************************************************************************************************
% ********************************************************************
% Using PDFLaTeX
% ********************************************************************
\PassOptionsToPackage{pdftex,hyperfootnotes=false,pdfpagelabels}{hyperref}
    \usepackage{hyperref}  % backref linktocpage pagebackref
\pdfcompresslevel=9
\pdfadjustspacing=1 
\PassOptionsToPackage{pdftex}{graphicx}
    \usepackage{graphicx} 

% ********************************************************************
% Setup the style of the backrefs from the bibliography
% (translate the options to any language you use)
% ********************************************************************
\newcommand{\backrefnotcitedstring}{\relax}%(Not cited.)
\newcommand{\backrefcitedsinglestring}[1]{(Cited on page~#1.)}
\newcommand{\backrefcitedmultistring}[1]{(Cited on pages~#1.)}
\ifthenelse{\boolean{enable-backrefs}}%
{%
        \PassOptionsToPackage{hyperpageref}{backref}
        \usepackage{backref} % to be loaded after hyperref package 
           \renewcommand{\backreftwosep}{ and~} % separate 2 pages
           \renewcommand{\backreflastsep}{, and~} % separate last of longer list
           \renewcommand*{\backref}[1]{}  % disable standard
           \renewcommand*{\backrefalt}[4]{% detailed backref
              \ifcase #1 %
                 \backrefnotcitedstring%
              \or%
                 \backrefcitedsinglestring{#2}%
              \else%
                 \backrefcitedmultistring{#2}%
              \fi}%
}{\relax}    

% ********************************************************************
% Hyperreferences
% ********************************************************************
\hypersetup{%
    %draft, % = no hyperlinking at all (useful in b/w printouts)
    colorlinks=true, linktocpage=true, pdfstartpage=3, pdfstartview=FitV,%
    % uncomment the following line if you want to have black links (e.g., for printing)
    %colorlinks=false, linktocpage=false, pdfborder={0 0 0}, pdfstartpage=3, pdfstartview=FitV,% 
    breaklinks=true, pdfpagemode=UseNone, pageanchor=true, pdfpagemode=UseOutlines,%
    plainpages=false, bookmarksnumbered, bookmarksopen=true, bookmarksopenlevel=1,%
    hypertexnames=true, pdfhighlight=/O,%nesting=true,%frenchlinks,%
    urlcolor=webbrown, linkcolor=RoyalBlue, citecolor=webgreen, %pagecolor=RoyalBlue,%
    %urlcolor=Black, linkcolor=Black, citecolor=Black, %pagecolor=Black,%
    pdftitle={\myTitle},%
    pdfauthor={\textcopyright\ \myName, \myUni, \myFaculty},%
    pdfsubject={},%
    pdfkeywords={},%
    pdfcreator={pdfLaTeX},%
    pdfproducer={LaTeX with hyperref and classicthesis}%
}   

% ********************************************************************
% Setup autoreferences
% ********************************************************************
% There are some issues regarding autorefnames
% http://www.ureader.de/msg/136221647.aspx
% http://www.tex.ac.uk/cgi-bin/texfaq2html?label=latexwords
% you have to redefine the makros for the 
% language you use, e.g., american, ngerman
% (as chosen when loading babel/AtBeginDocument)
% ********************************************************************
\makeatletter
\@ifpackageloaded{babel}%
    {%
       \addto\extrasamerican{%
                    \renewcommand*{\figureautorefname}{Figure}%
                    \renewcommand*{\tableautorefname}{Table}%
                    \renewcommand*{\partautorefname}{Part}%
                    \renewcommand*{\chapterautorefname}{Chapter}%
                    \renewcommand*{\sectionautorefname}{Section}%
                    \renewcommand*{\subsectionautorefname}{Section}%
                    \renewcommand*{\subsubsectionautorefname}{Section}%     
                }%
       \addto\extrasngerman{% 
                    \renewcommand*{\paragraphautorefname}{Absatz}%
                    \renewcommand*{\subparagraphautorefname}{Unterabsatz}%
                    \renewcommand*{\footnoteautorefname}{Fu\"snote}%
                    \renewcommand*{\FancyVerbLineautorefname}{Zeile}%
                    \renewcommand*{\theoremautorefname}{Theorem}%
                    \renewcommand*{\appendixautorefname}{Anhang}%
                    \renewcommand*{\equationautorefname}{Gleichung}%        
                    \renewcommand*{\itemautorefname}{Punkt}%
                }%  
            % Fix to getting autorefs for subfigures right (thanks to Belinda Vogt for changing the definition)
            \providecommand{\subfigureautorefname}{\figureautorefname}%             
    }{\relax}
\makeatother


% ****************************************************************************************************
% 7. Last calls before the bar closes
% ****************************************************************************************************
% ********************************************************************
% Development Stuff
% ********************************************************************
\listfiles
%\PassOptionsToPackage{l2tabu,orthodox,abort}{nag}
%   \usepackage{nag}
%\PassOptionsToPackage{warning, all}{onlyamsmath}
%   \usepackage{onlyamsmath}

% ********************************************************************
% Last, but not least...
% ********************************************************************
\usepackage{classicthesis} 
% ****************************************************************************************************


% ****************************************************************************************************
% 8. Further adjustments (experimental)
% ****************************************************************************************************
% ********************************************************************
% Changing the text area
% ********************************************************************
%\linespread{1.05} % a bit more for Palatino
%\areaset[current]{312pt}{761pt} % 686 (factor 2.2) + 33 head + 42 head \the\footskip
%\setlength{\marginparwidth}{7em}%
%\setlength{\marginparsep}{2em}%

% ********************************************************************
% Using different fonts
% ********************************************************************
%\usepackage[oldstylenums]{kpfonts} % oldstyle notextcomp
%\usepackage[osf]{libertine}
%\usepackage{hfoldsty} % Computer Modern with osf
%\usepackage[light,condensed,math]{iwona}
%\renewcommand{\sfdefault}{iwona}
%\usepackage{lmodern} % <-- no osf support :-(
%\usepackage[urw-garamond]{mathdesign} <-- no osf support :-(
% ****************************************************************************************************

\DeclareAcronym{DRY}{short = DRY,long = Don't Repeat Yourself}
\DeclareAcronym{API}{short = API,long = Application Programming Interface}
\DeclareAcronym{UML}{short = UML,long = Unified Modeling Language}

and

FrontBackmatter/Contents.tex

%!TEX root = ../ClassicThesis.tex
%*******************************************************
% Table of Contents
%*******************************************************
%\phantomsection
\refstepcounter{dummy}
\pdfbookmark[1]{\contentsname}{tableofcontents}
\setcounter{tocdepth}{2} % <-- 2 includes up to subsections in the ToC
\setcounter{secnumdepth}{3} % <-- 3 numbers up to subsubsections
\manualmark
\markboth{\spacedlowsmallcaps{\contentsname}}{\spacedlowsmallcaps{\contentsname}}
\tableofcontents 
\automark[section]{chapter}
\renewcommand{\chaptermark}[1]{\markboth{\spacedlowsmallcaps{#1}}{\spacedlowsmallcaps{#1}}}
\renewcommand{\sectionmark}[1]{\markright{\thesection\enspace\spacedlowsmallcaps{#1}}}
%*******************************************************
% List of Figures and of the Tables
%*******************************************************
\clearpage

\begingroup 
    \let\clearpage\relax
    \let\cleardoublepage\relax
    \let\cleardoublepage\relax
    %*******************************************************
    % List of Figures
    %*******************************************************    
    %\phantomsection 
    \refstepcounter{dummy}
    %\addcontentsline{toc}{chapter}{\listfigurename}
    \pdfbookmark[1]{\listfigurename}{lof}
    \listoffigures

    \vspace*{8ex}

    %*******************************************************
    % List of Tables
    %*******************************************************
    %\phantomsection 
    \refstepcounter{dummy}
    %\addcontentsline{toc}{chapter}{\listtablename}
    \pdfbookmark[1]{\listtablename}{lot}
    \listoftables

    \vspace*{8ex}
%   \newpage

    %*******************************************************
    % List of Listings
    %*******************************************************      
      %\phantomsection 
    \refstepcounter{dummy}
    %\addcontentsline{toc}{chapter}{\lstlistlistingname}
    \pdfbookmark[1]{\lstlistlistingname}{lol}
    \lstlistoflistings 

    \vspace*{8ex}

    %*******************************************************
    % Acronyms
    %*******************************************************
    %\phantomsection 
    \refstepcounter{dummy}
    \pdfbookmark[1]{Acronyms}{acronyms}
    \markboth{\spacedlowsmallcaps{Acronyms}}{\spacedlowsmallcaps{Acronyms}}
    \chapter*{Acronyms}
    \newlist{acronyms}{description}{1}
    \newcommand*\addcolon[1]{#1}
    \setlist[acronyms]{
    labelwidth=3em,
    leftmargin=3.5em,
    noitemsep,
    itemindent=0pt,
    font=\addcolon}
    \acsetup{list-type=acronyms,hyperref=false,extra-style=comma,uc-cmd=\makefirstuc,first-long-format=\itshape,hyperref}
    \printacronyms
    % \begin{acronym}[UML]
    %     \acro{DRY}{Don't Repeat Yourself}
    %     \acro{API}{Application Programming Interface}
    %     \acro{UML}{Unified Modeling Language}
    % \end{acronym}                     
\endgroup

\cleardoublepage

(Not sure if a patch wouldn't be more appropriate in this case, so you can fetch a tarball from here)

When I generate the document it complains about this

    ! Undefined control sequence.
\@hyper@@anchor ...r@spot {#2#3}\let \put@me@back 
                                                  \@empty \ifx \relax #2\rel...
l.82 \endgroup

? 
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.82 \endgroup

? 
! Extra }, or forgotten \endgroup.
\@begin@tempboxa ...begingroup #2\color@endgroup }
                                                  \def \width {\wd \@tempbox...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\@tempboxa }\let \totalheight 
                                                  \@ovri \totalheight \heigh...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...talheight \@ovri \totalheight 
                                                  \height \advance \totalhei...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...t \@ovri \totalheight \height 
                                                  \advance \totalheight \depth 
l.82 \endgroup

? 
! Missing number, treated as zero.
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\height \advance \totalheight 
                                                  \depth 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ... \advance \totalheight \depth 

l.82 \endgroup

? 
! Missing } inserted.
<inserted text> 
                }
l.82 \endgroup

? 
! Extra \else.
<recently read> \else 

l.82 \endgroup

? 
! Undefined control sequence.
\@hyper@@anchor ...r@spot {#2#3}\let \put@me@back 
                                                  \@empty \ifx \relax #2\rel...
l.82 \endgroup

? 
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.82 \endgroup

? 
! Extra }, or forgotten \endgroup.
\@begin@tempboxa ...begingroup #2\color@endgroup }
                                                  \def \width {\wd \@tempbox...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\@tempboxa }\let \totalheight 
                                                  \@ovri \totalheight \heigh...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...talheight \@ovri \totalheight 
                                                  \height \advance \totalhei...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...t \@ovri \totalheight \height 
                                                  \advance \totalheight \depth 
l.82 \endgroup

? 
! Missing number, treated as zero.
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\height \advance \totalheight 
                                                  \depth 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ... \advance \totalheight \depth 

l.82 \endgroup

? 
! Missing } inserted.
<inserted text> 
                }
l.82 \endgroup

? 
! Undefined control sequence.
\@hyper@@anchor ...r@spot {#2#3}\let \put@me@back 
                                                  \@empty \ifx \relax #2\rel...
l.82 \endgroup

? 
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.82 \endgroup

? 
! Extra }, or forgotten \endgroup.
\@begin@tempboxa ...begingroup #2\color@endgroup }
                                                  \def \width {\wd \@tempbox...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\@tempboxa }\let \totalheight 
                                                  \@ovri \totalheight \heigh...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...talheight \@ovri \totalheight 
                                                  \height \advance \totalhei...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...t \@ovri \totalheight \height 
                                                  \advance \totalheight \depth 
l.82 \endgroup

? 
! Missing number, treated as zero.
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\height \advance \totalheight 
                                                  \depth 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ... \advance \totalheight \depth 

l.82 \endgroup

? 
! Missing } inserted.
<inserted text> 
                }
l.82 \endgroup

? 
! Extra \else.
<recently read> \else 

l.82 \endgroup

? 
! Undefined control sequence.
\@hyper@@anchor ...r@spot {#2#3}\let \put@me@back 
                                                  \@empty \ifx \relax #2\rel...
l.82 \endgroup

? 
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.82 \endgroup

? 
! Extra }, or forgotten \endgroup.
\@begin@tempboxa ...begingroup #2\color@endgroup }
                                                  \def \width {\wd \@tempbox...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\@tempboxa }\let \totalheight 
                                                  \@ovri \totalheight \heigh...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...talheight \@ovri \totalheight 
                                                  \height \advance \totalhei...
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...t \@ovri \totalheight \height 
                                                  \advance \totalheight \depth 
l.82 \endgroup

? 
! Missing number, treated as zero.
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Illegal unit of measure (pt inserted).
<to be read again> 
                   \advance 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ...\height \advance \totalheight 
                                                  \depth 
l.82 \endgroup

? 
! Undefined control sequence.
\@begin@tempboxa ... \advance \totalheight \depth 

l.82 \endgroup

? 
! Missing } inserted.
<inserted text> 
                }
l.82 \endgroup

? 
[14

])
! Extra \else.
\@include ...ediate \closeout \@partaux \fi \else 
                                                  \deadcycles \z@ \@nameuse ...
l.80 ...ublepage\incl

ude{FrontBackmatter/Contents}

And the list of acronyms is printed like shown

Duplicated entry in list of acronyms

If I remove the hyperref option at the end of \acsetup{}, then I obtain no errors and the list of acronyms gets printed as wanted, but the hyperreferencing of the acronyms is gone, which is something desirable to have.

enter image description here

I had read something about acro and babel conflicting, so I pushed the \usepackage{acro} to before that of babel as instructed here, to no avail. I'd go for acronym, but I need to customize the acronyms behavior in a way that suits a certain typesetting style, not to mention the \ac{}-\Ac{} problem with acronym.

Best Answer

There is no MWE given and at the time the question was asked I apparently had my problems creating one. With todays¹ versions of the packages however, a MWE shows no problems (see below) so this question is likely to be solved by updating…

This example shows correctly working colored links:

\documentclass{article}
\usepackage{classicthesis}
\usepackage{acro}

\acsetup{
  make-links ,
  pages/display = first ,
  pages/fill = {, } ,
  pages/name = true ,
  format/first-long = \itshape
}

\DeclareAcronym{DRY}{short = DRY,long = Don't Repeat Yourself}
\DeclareAcronym{API}{short = API,long = Application Programming Interface}
\DeclareAcronym{UML}{short = UML,long = Unified Modeling Language}

\usepackage{hyperref}

\begin{document}

\ac{DRY} \par
\ac{API} \par
\ac{UML}

\newpage

\printacronyms

\end{document}

enter image description here

enter image description here


  1. Jan 11th, 2021
Related Question