还有更多 biblatex 内容:我注意到,使用 hyperref 时,引用和标点符号(逗号或句号)之间存在难看的空格。请查看以下示例代码:
\begin{filecontents}{mybib.bib}
@book{JSmith,
author = {Smith, John},
title = {A book of}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authortitle]{biblatex}
\bibliography{mybib.bib}
\usepackage[colorlinks]{hyperref}
\begin{document}
Test~\cite*{JSmith}. Test~\footcite{JSmith}
Test~\emph{A book of}. Test\footnote{Smith, \emph{A book of}.}
\end{document}
有任何想法吗?
编辑:只是想让你知道,我也在这里发布了这个问题:http://groups.google.com/group/comp.text.tex/browse_thread/thread/908bd4ff3f8633b2#
我会让它们保持同步。
编辑2:Heiko Oberdiek 好心地解答了为什么会发生这种情况(在 comp.text.tex 上):
\cite*
如果逗号或句号跟在 ( ) 后面,则使用\emph
并\emph
抑制右端的斜体校正\nocorrlist
。但是,添加链接意味着在它们之间添加内容(对于 hpdftex.def,有两个内容,链接结尾和恢复颜色。因此句号在 中被隐藏\emph
。示例无比布拉特克斯:
\documentclass[12pt]{article} \showboxdepth=\maxdimen \showboxbreadth=\maxdimen \usepackage[colorlinks]{hyperref} \begin{document} \section{Foo}\label{sec:foo} \huge \noindent Test~\emph{Smith of}.\\ Test~\hyperref[sec:foo]{\emph{Smith of}}. \tracingonline=1 \showlists \end{document}
编辑3:Ulrike Fischer 提出了一个本地修复方案:
您可以本地重置定义
\citetitle
(如果您全局执行此操作,它也许会在您想要的地方删除斜体更正):
{\DeclareFieldFormat{citetitle}{\mkbibemph{#1\nocorr}}\cite*{JSmith}.}
答案1
我在 comp.text.tex 上收到了 Philipp Lehman 的回复:
meho_r写道:
那么,我们(用户)可以做些什么呢?
恐怕除了手动解决方法之外,没有太多办法。
\emph
和朋友们使用一个相当简单的前瞻例程来决定是否需要斜体校正。简单的\relax
会让人困惑。比较一下:\emph{of}. \emph{of}\relax.
添加斜体校正后,您所能做的就是手动将其删除。它是
\kern
,因此您可以使用\unkern
:\emph{of}\relax\unkern.
实际上,比布拉特克斯会自动执行此操作。如果您注释掉 超链接,你的例子就很好。
不幸的是,如果斜体文本是链接而标点符号不是链接的一部分,则此方法不起作用:
\href{http://www.foobar.com}{\emph{of}}. \href{http://www.foobar.com}{\emph{of}}\unkern.
启动
\unkern
太晚了。它需要移动到链接组内部才能完成其工作:\href{http://www.foobar.com}{\emph{of}\unkern}.
问题是:您需要删除链接组内的斜体更正,但您不知道是否需要在链接之后将其删除。
我看不出有什么方法可以自动处理这个问题。这些可能是深度嵌套的结构。链接末尾和标点符号之间可能有几十个标记和多个组。
您可以禁用链接(hyperref=false)或设置一个特殊
\cite
命令,使用专用格式定义来抑制斜体校正。因此,根据 Ulrike 的建议,我的看法如下:\DeclareFieldFormat{nocorremph}{\mkbibemph{#1\nocorr}} \newrobustcmd{\nccite}{% \AtNextCite{\DeclareFieldAlias{citetitle}{nocorremph}} \cite}
现在比较一下:
\cite*{JSmith}. \nccite*{JSmith}.
虽然不太好,但是确实有效。