Classicthesis、acro 和 hyperref 发生冲突

Classicthesis、acro 和 hyperref 发生冲突

我正在尝试让 acro 与 classicthesis 和 hyperref 选项一起工作,但无济于事,尽管当删除 acro 中的 hyperref 选项时错误就消失了。

MWE 在这方面相当长。本质上,我将 classicthesis-config.tex 和 FrontBackmatter/Contents.tex 修改为以下内容。

classicthesis-配置.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
% https://texfaq.org/FAQ-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}

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

(不确定在这种情况下补丁是否更合适,因此您可以从这里

当我生成文档时,它会抱怨这一点

    ! 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{前后内容/目录}

缩略词列表打印如下

首字母缩略词列表中的重复条目

如果我删除 \acsetup{} 末尾的 hyperref 选项,则不会出现任何错误,并且首字母缩略词列表会按需要打印,但首字母缩略词的超引用会消失,这是我们希望得到的。

在此处输入图片描述

我读过一些关于 acro 和 babel 冲突的内容,因此我按照说明将 \usepackage{acro} 推到了 babel 之前这里,但无济于事。我会选择缩写,但我需要以适合特定排版风格的方式自定义缩写行为,更不用说缩写的 \ac{}-\Ac{} 问题了。

答案1

没有给出 MWE,并且在提问时我显然在创建一个。但是,使用当今版本的软件包,MWE 没有显示任何问题(见下文),因此这个问题很可能通过更新来解决……

此示例显示正确工作的彩色链接:

\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}

在此处输入图片描述

在此处输入图片描述


  1. 2021 年 1 月 11 日

相关内容