这(几乎!)是使用 flushend 时参考书目条目之间的间距不均匀。
在这个(明显夸张,但你明白我的意思) MWE 中,右列最后三行的间距是不均匀的:
\documentclass[twocolumn]{revtex4-1}
\usepackage{lipsum}
\begin{document}
\setlength{\baselineskip}{45pt}
\lipsum[1]
\end{document}
使用flushend
,您可以使用\atColsBreak
恢复原始列分隔符处的间距。使用 可以做什么revtex4-1
?
更新:有人可能会认为一种可能性是禁用revtex4-1
的平衡并使用 进行平衡flushend
;但最终我会得到不平衡的列:
\documentclass[twocolumn,nobalancelastpage]{revtex4-1}
\usepackage{lipsum}
\usepackage{flushend}
\begin{document}
\setlength{\baselineskip}{45pt}
\lipsum[1]
\end{document}
答案1
revtex4-1
已经包含恢复原始分栏符处删除的间距的功能:\marry@baselines
。这使用\marry@skip
,由 设定\set@marry@skip
。我们可以看到这是在\begin{document}
和 文档的第一个字符之间调用的:
\documentclass[twocolumn]{revtex4-1}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\set@marry@skip}{Here I am!}{}{}
\begin{document}
\setlength{\baselineskip}{45pt}
\lipsum[1]
\end{document}
\set@marry@skip
一个简单的解决方案是在预期平衡两列之前手动调用revtex4-1
;也就是说,在文档结束、widetext
环境或手动切换到单列模式之前。比较一下是否调用\set@marry@skip
:
\documentclass[twocolumn]{revtex4-1}
\usepackage{lipsum}
\begin{document}
\setlength{\baselineskip}{30pt}
\lipsum[1-2]
\makeatletter\set@marry@skip\makeatother
\onecolumngrid
Manual switch to a single column, and back. Note the long line.
\twocolumngrid
\setlength{\baselineskip}{20pt}
\lipsum[1]
\makeatletter\set@marry@skip\makeatother
\begin{widetext}
some wide text
\end{widetext}
\setlength{\baselineskip}{60pt}
\lipsum[1]
\makeatletter\set@marry@skip\makeatother
\end{document}
当然,当在整个文档中使用单一字体大小时,只需要其中几个调用,但平衡通常发生在通常以较小字体设置的参考文献中。
\pretocmd{\set@marry@skip}{Here I am!}{}{}
将该方法与后一个示例相结合,可以注意到\set@marry@skip
它总是在两列部分的开头调用,而它可能应该在部分的结尾调用(因为平衡会影响部分结尾附近的文本,因此原始列分隔符处的文本格式未设置,但更可能对应于部分结尾而不是开头的格式)。
这让我想到这\pretocmd{\shut@column@mlt}{\set@marry@skip}{}{}
可能是解决上述所有情况的办法:
\documentclass[twocolumn]{revtex4-1}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\shut@column@mlt}{\set@marry@skip}{}{\GenericError{}{Failed to patch \protect\shut@column@mlt}{}{}}
\makeatother
\begin{document}
\setlength{\baselineskip}{30pt}
\lipsum[1-2]
\onecolumngrid
Manual switch to a single column, and back. Note the long line.
\twocolumngrid
\setlength{\baselineskip}{20pt}
\lipsum[1]
\begin{widetext}
some wide text
\end{widetext}
\setlength{\baselineskip}{60pt}
\lipsum[1]
\end{document}
看起来确实如此。甚至可以去掉 中的所有与跳过相关的内容\set@column@hsize
,尽管我不太确定那\skip@\baselineskip...
部分:
\documentclass[twocolumn]{revtex4-1}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\pretocmd{\shut@column@mlt}{\set@marry@skip}{}{\GenericError{}{Failed to patch \protect\shut@column@mlt}{}{}}
\patchcmd{\set@column@hsize}{\skip@\baselineskip\advance\skip@-\topskip}{}{}{\GenericError{}{Failed to patch \protect\set@column@hsize}{}{}}
\patchcmd{\set@column@hsize}{\@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}}{}{}{\GenericError{}{Failed to patch \protect\set@column@hsize}{}{}}
\makeatother
\begin{document}
\setlength{\baselineskip}{30pt}
\lipsum[1-2]
\onecolumngrid
Manual switch to a single column, and back. Note the long line.
\twocolumngrid
\setlength{\baselineskip}{20pt}
\lipsum[1]
\begin{widetext}
some wide text
\end{widetext}
\setlength{\baselineskip}{60pt}
\lipsum[1]
\end{document}
在参考书目中还有两个很有用的命令:
\pretocmd{\endthebibliography}{\set@marry@skip}{}{\GenericError{}{Failed to patch \endthebibliography}{}{}}
\xpatchcmd{\set@marry@skip}{\@ifdim{\skip@>\z@}{\xdef\marry@skip{\the\skip@}}{}}{\xdef\marry@skip{\the\skip@}}{}{\GenericError{}{Failed to patch \set@marry@skip}{}{}}
当环境末尾bibliography
恢复更大的字体大小,但环境中发生中断时,可能需要第一个bibliography
。可能需要第二个以允许负值\marry@skip
。