在我的参考书目中,我使用反向引用。现在,我希望它们出现在参考文献的最后一行右侧。这可以通过 轻松实现\hfill
。但是,如果反向引用变得太长,它会溢出到下一行。我通过在\mbox
反向引用周围放置 来防止这种情况。但现在,当整个反向引用被放入新行时,它要么不再右侧对齐,要么前一行的内容被拉伸以填满整行。
我希望获得一个右后对齐的引用,如果有足够的空间,则在正常引用的最后一行,否则在下一行。在后一种情况下,我希望有一个实际的换行符,这样引用的最后一行就不会被不必要地拉长。有什么想法可以实现这一点吗?
编辑:
下面是一个小例子来说明我试图阻止的事情:
\documentclass{article}
\usepackage{backref}
\renewcommand*{\backrefalt}[4]{%
\hspace*{\fill}%
\mbox{[some slightly longer text]}%
\begingroup % keep changes to \parfillskip local
\parfillskip=0pt %
\par
\endgroup
}
\begin{document}
\cite{foo}
\begin{thebibliography}{9}
\bibitem{foo} short bibliography entry to fill almost one entire line
\end{thebibliography}
\end{document}
编译文件时,你会看到实际的书目行延伸到了整个页面。在这种情况下(反向引用在新行中),我希望书目条目不要延伸到最后一行,如下例所示。不过,这个例子有一个问题,即它总是使用新行进行反向引用。
\documentclass{article}
\usepackage{backref}
\renewcommand*{\backrefalt}[4]{%
\\\hspace*{\fill}\mbox{[some slightly longer text]}%
}
\begin{document}
\cite{foo}
\begin{thebibliography}{9}
\bibitem{foo} short bibliography entry to fill almost one entire line
\end{thebibliography}
\end{document}
编辑2:
另一个示例显示了 Heiko Oberdiek 提供的解决方案中的一个小错误。在第一个引用中,反向引用之前有一个换行符,而在长度相同的第二个引用中没有换行符,这是所需的输出:
\documentclass{article}
\usepackage{backref}
\usepackage{lipsum}
\renewcommand*{\backrefalt}[4]{%
\hspace{0.1em plus 1fill}\penalty0 %
\hspace*{\fill}%
[no cite]%
\begingroup
\parfillskip=0pt %
\par
\endgroup
}
\begin{document}
\cite{bt-ilo-97,ccj-udg-90}
\begin{thebibliography}{9}
\bibitem[BT97]{bt-ilo-97}
Dimitris Bertsimas and John~N. Tsitsiklis.
\newblock {\em {Introduction to Linear Optimization}}.
\newblock Athena Scientific, first edition, 1997.
\bibitem[CCJ90]{ccj-udg-90}
Brent~N. Clark, Charles~J. Colbourn, and David~S. Johnson.
\newblock {Unit disk graphs}.
\newblock {\em Discrete Mathematics}, 86(1--3):165--177.
\end{thebibliography}
\end{document}
答案1
在段落末尾,TeX 会通过 删除空格\unskip
(通常是最后一行末尾的空格),并添加\parfillskip
,通常是0.0pt plus 1fil
,如果需要,它会填充最后一行。因为您不想填充最后一行,所以以下示例设置\parfillskip
为0pt
。我已将其替换\hfill
为两个\hspace
:
第一个
\hspace{2em plus 1fill}
确保参考书目条目和后面的引用之间有一定的空间(2em),并在必要时填充行。在新行的开头,这个空格会被自动丢弃。\penalty0
如果必要的话可以换行。\hspace*{\fill}
不会在新行的开头消失,而是填充该行直到后面的引用开始。
\documentclass{article}
\usepackage{backref}
\usepackage{lipsum}
\renewcommand*{\backrefalt}[4]{%
\hspace{2em plus 1fill}\penalty500 %
\hspace*{\fill}%
\lipsum*[2]%
\begingroup
\parfillskip=0pt %
\par
\endgroup
}
\begin{document}
\cite{foo1,foo2}
\begin{thebibliography}{9}
\bibitem{foo1} Foo.
\bibitem{foo2} Foo\hbox to 62mm{\dotfill}Bar.
\end{thebibliography}
\end{document}