abntex / biblatex-abnt

:books: Estilo para BibLaTeX compatível com as normas da ABNT
126 stars 27 forks source link

Espaço errado em referências do tipo `@online` #128

Closed dact221 closed 1 month ago

dact221 commented 1 month ago

As referências do tipo @online aparecem com um espaço errado entre a URL e o ponto, e entre a data de acesso e o ponto na lista de referências. Exemplo:

SWISS FEDERAL OFFICE OF TOPOGRAPHY. Swiss Map Vector 500. 8 Jan. 2024. Available from:
https://www.swisstopo.admin.ch/en/national-map-swiss-map-vector-500 . Visited on: 20 May 2024 .

O espaço depois do "500" de do ano de acesso "2024" não deveria aparecer. De fato, o espaço não aparece em outros campos.

Di uma olhada no arquivo abnt.bbx e achei o problema. Nas linhas 1520-1522 aparece:

% remove <> in URLs according to abnt-6023:2018
\DeclareFieldFormat{url}{\textmainlang{\bibstring{urlfrom}\addcolon\addspace \url{#1}}}
\DeclareFieldFormat{urldate}{\textmainlang{\bibstring{urlseen}\addcolon\addspace #1}}%

O comando \textmainlang adiciona o espaço errado nos campos da URL (url) e da data de acesso (urldate). Inicialmente pensei em tirar o comando \textmainlang, mas descobri que esses dois campos já estão definidos nas linhas 1023-1024:

\DeclareFieldFormat{url}{\bibstring{urlfrom}\addcolon\addspace\url{#1}}%
\DeclareFieldFormat{urldate}{\bibstring{urlseen}\addcolon\addspace #1}%

As definições são iguais quando tiramos o \textmainlang. Acho então que é seguro tirar as linhas do problema 1520-1522 porque as linhas 1023-1024 já consideram a correção da ABNT 6023:2018 e não adicionam o espaço errado.

Fiz um teste apagando as linhas 1520-1522 e deu certo. Estou compilando o documento com LuaTeX em TeX Live 2024 e biblatex-abnt instalado manualmente do GitHub (mas o problema também acontece com o biblatex-abnt do CTAN).

dbmrq commented 1 month ago

Muito obrigado! Notei que na versão com o \textmainlang há um espaço a mais antes de \url{#1} em comparação com a outra versão (\addspace \url{#1} vs \addspace\url{#1}). Será que não é esse o problema?

dact221 commented 1 month ago

Como no exemplo acima, o espaço a mais aparece depois de \url{#1}. Nas duas versões não aparece um espaço no final do \DeclareFieldFormat. Além disso, \DeclareFieldFormat não reconhece espaços literais no código; por isso usa \addspace.

Também di uma olhada no manual de BibLaTeX para entender mais sobre o comando \textmainlang. Segundo o manual, o uso apropriado é como uma opção de \bibstring, ou seja:

\bibstring[\textmainlang]{urlfrom}
% e não
\textmainlang{\bibstring{urlfrom}}

No entanto, fiz o teste e agora adiciona um espaço a mais em Available from :

Também tentei usar \mainlang e \textouterlang (e.g., https://github.com/plk/biblatex/issues/1108), mas esses comandos também adicionam o espaço a mais.

Acho que é um bug upstream. A definição do comando \textmainlang no código de BibLaTeX está no arquivo (biblatex.sty):

 \def\blx@imc@textmainlang##1{%
    {{\expandafter\selectlanguage\expandafter{\blx@main@language}##1}}}%

A definição usa \selectlanguage de Babel, e está entre dois pares de chaves como recomendado no manual de Babel. Porém o manual de Babel não recomenda \selectlanguage para frases curtas, sendo melhor a função \foreignlanguage{lang}{text}. Sinceramente, não me sinto muito confortável para mudar o código de BibLaTeX ou de Babel/Polyglossia.

Não sei se vale a pena abrir um issue em BibLaTeX ou até mesmo usar uma função para mudar o idioma localmente. Acho que é melhor o usuário definir o idioma da lista de referências de forma general, e.g., usando \selectlanguage antes do \printbibliography (o manual de ABNTeX também explica como mudar o idioma).

dbmrq commented 1 month ago

Hmm, é, acho que daria pra abrir uma issue lá e ver o que dizem. Mas, por enquanto, se quiser abrir uma PR aqui podemos fazer a mudança!

dact221 commented 1 month ago

Já abri a PR Acho que dá para fechar o issue Obrigado

dbmrq commented 1 month ago

Muito obrigado!