Несмотря на использование hfuzz=…
для скрытия предупреждений для (достаточно маленьких) переполненных полей, переполненное поле, происходящее в URL в моей библиографии, все равно отображает предупреждение. Почему? Как мне избавиться от предупреждения?
Для иллюстрации в следующем примере переполненная строка в основном тексте не вызывает предупреждения (что свидетельствует о том, что оно hfuzz
действует), а (менее) переполненная строка в библиографии вызывает.
\begin{filecontents}{example.bib}
@techreport{report,
author = {Unknown, U. and Unknown, U.},
institution = {Institution},
title = {Some title},
url = {https://www.example.com/some-very-long-url-with-much-text/and-a-second-part-that-is-overly-long-as-well-and-fills-the-line/},
year = {2015}
}
\end{filecontents}
\documentclass{article}
\usepackage{natbib}
\usepackage{hyperref}
\bibliographystyle{abbrvnat}
\hfuzz=4cm
\begin{document}
This url \url{http://www.example.com/is-overly-long-but-raises-no-warnings/is-overly-long-but-raises-no-warnings/is-overly-long-but-raises-no-warnings}
\citep{report}.
\bibliography{example}
\end{document}
решение1
Если вы добавите
\show\thebibliography
Ты увидишь
> \thebibliography=\long macro:
#1->\bibsection \parindent \z@ \bibpreamble \bibfont \list {\@biblabel {\the \c
@NAT@ctr }}{\@bibsetup {#1}\global \c@NAT@ctr \z@ }\ifNAT@openbib \renewcommand
\newblock {\par }\else \renewcommand \newblock {\hskip .11em \@plus .33em \@mi
nus .07em}\fi \sloppy \clubpenalty 4000\widowpenalty 4000 \sfcode `\.\@m \let \
NAT@bibitem@first@sw \@firstoftwo \let \citeN \cite \let \shortcite \cite \let
\citeasnoun \cite .
l.18 \show\thebibliography
так что это \sloppy
так и есть
\DeclareRobustCommand\sloppy{%
\tolerance 9999%
\emergencystretch 3em%
\hfuzz .5\p@
\vfuzz\hfuzz}
Так \hfuzz
сбрасывается до .5pt в библиографии. Вы можете переопределить, \sloppy
чтобы иметь больший hfuzz или добавить
\usepackage{xurl}