Introdução
Recentemente, fui atormentado por um problema com o acro
pacote enquanto escrevia minha tese com o xelatex
.
Meu documento usa o fancyhdr
pacote, onde defino o título da seção para aparecer no rodapé. As letras do título da seção aparecem em maiúsculas.
O problema
Gosto de usar siglas quando posso. Então, decidi usar uma solicitação de sigla no título de uma seção, como esta:
\section{Moving Forward to Distributed \ac{sdn} Management}
Mas, por alguma razão, o mecanismo achou engraçado colocar todo o texto no título da seção em maiúsculas, transformando um \ac{sdn}
em um \ac{SDN}
.
Então, isso aconteceu no rodapé do documento:
Por causa disso, fui atormentado por uma sigla fantasma aparecendo duas vezes no arquivo auxiliar:
\acro@used@once {SDN}{78}{78}{89}
\acro@used@twice {SDN}{79}{79}{90}
enquanto essas solicitações de siglas fantasmas apareciam no log de construção de documentos. Não existiam solicitações de acrônimos nas linhas especificadas:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! 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.
!...............................................
Responder1
Isso não está necessariamente vinculado a fancyhdr
. O mesmo acontece com um simples \pagestyle{headings}
na classe do artigo.
O problema é que isso \sectionmark
faz \MakeUppercase
no título e – já que \ac
amigos são comandos protegidos – alterações \ac{sdn}
nas \ac{SDN}
quais leva à mensagem de erro.
Uma “solução” óbvia é definir o acrônimo com um ID maiúsculo:
\DeclareAcronym{SDN}{...}
No entanto, pode ser um trabalho tedioso mudar, dependendo do número de siglas e chamadas de siglas em seu documento. (Embora pesquisar e substituir possa ser bastante fácil...)
Outra possibilidade pode ser usar o
textcase
pacote que redefine\MakeUppercase
para que possamos dizer ao LaTeX para não colocar certas partes em maiúsculas:\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}
Como terceira opção que não depende da forma como o estilo do título é definido,
acro
introduziu a opçãocase-sensitive
no início deste ano (com o lançamento da v2.11 2020/01/11) para lidar com este tipo de problemas. Supondo que você não tenha duas siglas diferentes, uma usandosdn
como ID e outra usando,SDN
você pode dizeracro
para tratar ambas como iguais:\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}
Os dois últimos exemplos dão
Responder2
A solução
Parece que a combinação de usar o acro
pacote com o fancyhdr
pacote e colocar o título da seção no rodapé provou ser problemática. Por conta disso, retirei a \ac{sdn}
solicitação do título, o que resolveu a questão da \ac{SDN}
solicitação fantasma.
Agora, o rodapé do documento está correto e as solicitações de siglas fantasmas desapareceram.