反向引用的条件换行

反向引用的条件换行

在我的参考书目中,我使用反向引用。现在,我希望它们出现在参考文献的最后一行右侧。这可以通过 轻松实现\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,如果需要,它会填充最后一行。因为您不想填充最后一行,所以以下示例设置\parfillskip0pt。我已将其替换\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}

结果

相关内容