biblatex 引文的 hyperref 突出显示不正确

biblatex 引文的 hyperref 突出显示不正确

我使用该hyperref包突出显示引文中的 URL、缩写和简写,以方便在文档中使用,并且我使用该包biblatex-sbl获取 SBL 格式的引文。该hyperref包通常可以很好地突出显示引文中的shortjournal或字段等内容,但它在尝试突出显示引文字段shortseries时似乎会出错:短文标题的开头引文与标题的其余部分一起突出显示,但结尾引文没有突出显示。shorttitlearticle

最小(非)工作示例

为了可重复性,我附加了一些最小(非)工作示例的代码,其中包括一个参考书目文件和一个 TeX 文件。

bibliography.bib

@article{
    MWE20,
    author = {Joey McCollum},
    title = {A Minimal (Non-)Working Example},
    shorttitle = {MWE},
    journal = {TeX Stack Exchange Quarterly},
    year = {2020},
    pages = {1--2}
}
mwe.tex

\documentclass[12pt]{article}
%Include support for hyperreferences:
\usepackage{hyperref}
%Include support for citation format:
\usepackage[style=sbl, ibidtracker=false, idemtracker=false, citepages=omit, backend=biber]{biblatex}
%Add the bibliography source file:
\addbibresource{./bibliography.bib}
\begin{document}
    This is a minimal (non-)working example.\footnote{\cite{MWE20}.} It is intended to illustrate unexpected behavior in \LaTeX.\footnote{\cite[2]{MWE20}.}
    \printbibliography
\end{document}

我使用 TeXLive 2020 版本的 pdfLaTeX 和相应版本的 XeLaTeX 排版;两个引擎都会重现这种行为。

我猜想这个问题与所做的替换有关,biblatex-sbl以确保引号中的标题后面的逗号位于引号内(符合美式英语风格),但我不能肯定。事实上,当前的突出显示有点难看。如果有一种方法可以更一致地突出显示缩短的标题,无论是通过同时包含周围的引号和逗号,还是仅突出显示标题本身,而不包含周围的引号和逗号,那就太好了。有没有简单的方法可以解决这个问题,或者这是一个必须在其中一个软件包中修复的错误?

编辑:正如 moewe 在评论中指出的那样,这是一个已知的错误biblatex好几年了(https://github.com/plk/biblatex/issues/499),并且它会影响除 之外的其他引用样式sbl(例如verbose-note)。

答案1

调整@UlrikeFischer 和@moewe 的解决方案似乎确实有效:

尝试这个:

\documentclass[12pt]{article}
\begin{filecontents}[overwrite]{\jobname.bib}
@article{MWE20,
  author = {Joey McCollum},
  title = {A Minimal (Non-)Working Example},
  shorttitle = {MWE},
  journal = {TeX Stack Exchange Quarterly},
  year = {2020},
  pages = {1-2}
}
\end{filecontents}
\usepackage[colorlinks]{hyperref}
\usepackage[style=sbl, ibidtracker=false, idemtracker=false, citepages=omit, backend=biber]{biblatex}
\addbibresource{\jobname.bib}

\makeatletter
\renewbibmacro*{shorttitle}{%
  \iftoggle{blx@useshorttitle}
    {\iffieldundef{shorttitle}
       {\iffieldundef{title}
          {}
          {\ifbool{bbx@inset}
             {\printtext{\bibhyperlink{\strfield{setkey}}
                {\printtext[title]{\printfield[titlecase]{title}}}}}
             {\printtext[title]{%
                \printtext[bibhyperlink]{\printfield[titlecase]{title}}}}}}
       {\ifbool{bbx@inset}
          {\printtext{\bibhyperlink{\strfield{setkey}}
             {\printtext[title]{\printfield[titlecase]{shorttitle}}}}}
          {\printtext[title]{%
             \printtext[bibhyperlink]{\printfield[titlecase]{shorttitle}}}}}%
     \newunit}
    {}}
\makeatother

\begin{document}
\null\vfill
This is a minimal (non-)working example \autocite{MWE20}. It is intended to
illustrate unexpected behavior in \LaTeX \autocite[2]{MWE20}.
\printbibliography
\end{document}

MWE 输出

相关内容