使用 revtex4-1 平衡页面时,原始分栏处的行间距不均匀

使用 revtex4-1 平衡页面时,原始分栏处的行间距不均匀

这(几乎!)是使用 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

相关内容