Проблема с пакетом acro и fancyhdr в xelatex — использование аббревиатур в заголовках разделов

Проблема с пакетом acro и fancyhdr в xelatex — использование аббревиатур в заголовках разделов

вступление

Недавно я столкнулся с проблемой, связанной с acroпакетом, когда писал диссертацию с использованием xelatex.

В моем документе используется fancyhdrпакет, в котором я устанавливаю заголовок раздела, чтобы он отображался в нижнем колонтитуле. Буквы заголовка раздела отображаются в верхнем регистре.

Проблема

Мне нравится использовать аббревиатуры, когда это возможно. Поэтому я решил использовать запрос на аббревиатуру в названии раздела, например, так:

\section{Moving Forward to Distributed \ac{sdn} Management}

Но по какой-то причине движок посчитал забавным принудительно сделать весь текст в заголовке раздела заглавным, превратив \ac{sdn}в \ac{SDN}.

Затем в нижнем колонтитуле документа произошло следующее: странный нижний колонтитул

Из-за этого меня мучила фантомная аббревиатура, дважды встречающаяся во вспомогательном файле:

\acro@used@once {SDN}{78}{78}{89}
\acro@used@twice {SDN}{79}{79}{90}

в то время как эти фантомные запросы на аббревиатуру появились в журнале создания документа. В указанных строках не было запросов на аббревиатуру:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! acro error: "undefined"
! 
! You've requested acronym `SDN' on line 499 but you apparently haven't
! defined it, yet!
! Maybe you've misspelled `SDN'?
! 
! See the acro documentation for further information.
! 
! Type <return> to continue.
!...............................................  

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! acro error: "undefined"
! 
! You've requested acronym `SDN' on line 514 but you apparently haven't
! defined it, yet!
! Maybe you've misspelled `SDN'?
! 
! See the acro documentation for further information.
! 
! Type <return> to continue.
!...............................................  

решение1

Это не обязательно связано с fancyhdr. То же самое происходит с простым \pagestyle{headings}в классе статьи.

Проблема в том, что \sectionmarkв \MakeUppercaseзаголовке и – поскольку \ac и друзья являются защищенными командами – изменения \ac{sdn}в \ac{SDN}которые затем приводят к сообщению об ошибке.

  • Одним из очевидных «решений» является определение аббревиатуры с помощью идентификатора, набранного заглавными буквами:

     \DeclareAcronym{SDN}{...}
    

Однако это может оказаться утомительной работой по изменению, в зависимости от количества аббревиатур и вызовов аббревиатур в вашем документе. (Хотя поиск и замена на самом деле могут быть довольно простыми...)

  • Другой возможностью может быть использование textcaseпакета, который переопределяет \MakeUppercaseтак, чтобы мы могли указать LaTeX не использовать заглавные буквы в определенных частях:

     \documentclass{article}
     \usepackage{acro}
     \usepackage[overload]{textcase}
    
     \DeclareAcronym{sdn}{
       short = SDN ,
       long  = some dummy nonsense
     }
    
     \pagestyle{headings}
    
     \begin{document}
    
     \section{Moving Forward to Distributed \protect\NoCaseChange{\acs*{sdn}} Management}
    
     \end{document}
    
  • В качестве третьего варианта, который не зависит от способа определения стиля заголовка, в начале этого года (с выпуском v2.11 2020/01/11) acroбыл представлен вариант для решения такого рода проблем. Если у вас нет двух разных аббревиатур, одна из которых используется как идентификатор, а другая — как , вы можете сказать , что обе они должны рассматриваться как одно и то же:case-sensitivesdnSDNacro

     \documentclass{article}
     \usepackage{acro}
    
     \acsetup{case-sensitive=false}
    
     \DeclareAcronym{sdn}{
       short = SDN ,
       long  = some dummy nonsense
     }
    
     \pagestyle{headings}
    
     \begin{document}
    
     \section{Moving Forward to Distributed \acs*{sdn} Management}
    
     \end{document}
    

Последние два примера оба дают

введите описание изображения здесь

решение2

Решение

Похоже, что сочетание использования acroпакета с fancyhdrпакетом при размещении заголовка раздела в нижнем колонтитуле оказалось глючным. Из-за этого я удалил запрос \ac{sdn}из заголовка, что решило проблему фантомного \ac{SDN}запроса.

Теперь нижний колонтитул документа правильный, а фантомные запросы на аббревиатуры исчезли. введите описание изображения здесь

Связанный контент