在双列文档中创建页面(文本)宽的文本框

在双列文档中创建页面(文本)宽的文本框

背景

我正在排版一本书,在其中使用了twocolumn声明documentclass(这是一本很长的科学书,包含许多表格和图形,所以我不想在每个全宽图像/表格之后重新声明两列环境,所以我选择了文档类方式)。

问题

在每个 的开头chapter,都有一个引言,我想将其保留一列(即宽度为\textwidth),因此我不会只将其放在第一列,而是将其放在两列上方。到目前为止,我尝试了minipage环境和,\parbox两者都给了我一个宽度为 的框\textwidth,但第二列没有被推到引言框下方,因此它会溢出。当我尝试使用

\begin{table*}
The text of the quote
\endtable*}

引文按我的要求显示在两列上方,但在下一页,不在章节标题正下方。当我尝试使用\Floatbarrierplaceins 包时,第二列溢出了引文,就像其他解决方案一样。

我当前的设置(在这里仅发布 MWE,我加载了许多其他包,我认为这些包与此无关)导致我不期望的结果是引号仅出现在第一列,而不是两列之上,情况如下:

\documentclass[a4paper,10pt,openany,twoside,twocolumn]{book}
\usepackage[inner=3cm,outer=2cm, top=2cm]{geometry}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{dblfloatfix} 
\usepackage{lipsum} % using only for this MWE

\begin{document}
    \chapter{Lorem ipsum sit dolor amet} % (fold)
        \textit{This is the text of a very insightful and deep quote that affects lives of all beings.}
        \begin{flushright}
            Konfucius
        \end{flushright}
        \medskip
        \lipsum[1-6]
\end{document}

在 Lualatex 中编译时结果如下:

在此处输入图片描述

问题

有什么方法可以在 Latex 中产生所需的结果吗?

在此处输入图片描述

非常感谢你的帮助。

答案1

使用strip包中的宏cuted

\documentclass[a4paper,10pt,openany,twoside,twocolumn]{book}
\usepackage[inner=3cm,outer=2cm, top=2cm]{geometry}
\usepackage{lmodern}
\usepackage[english]{babel}
%\usepackage{dblfloatfix} 
\usepackage{cuted}  % <---

\usepackage{lipsum} % using only for this MWE

\begin{document}
    \chapter{Lorem ipsum sit dolor amet} % (fold)
    \begin{strip}   % <---
        \textit{This is the text of a very insightful and deep quote that affects lives of all beings.}
        \begin{flushright}
            Konfucius
        \end{flushright}
    \end{strip}    % <---
        \medskip
        \lipsum[1-6]
\end{document}

在此处输入图片描述

答案2

除了strip环境之外,我还建议使用epigraph可以轻松适应您的口味的包:

\documentclass[a4paper,10pt,openany,twoside,twocolumn]{book}
\usepackage[inner=3cm,outer=2cm, top=2cm]{geometry}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{dblfloatfix}
 \usepackage{cuted}
 \usepackage{epigraph}
 \setlength{\epigraphwidth}{0.75\textwidth}
 \renewcommand{\textflush}{flushright}
 \setlength{\epigraphrule}{0pt}
 \setlength{\beforeepigraphskip}{0pt}
 \setlength{\afterepigraphskip}{0pt}

\usepackage{lipsum} % using only for this MWE

\begin{document}

    \chapter{Lorem ipsum sit dolor amet} % (fold)

\begin{strip}
\epigraph{\itshape This is the text of a very insightful and deep quote that affects lives of all beings.}{Konfucius}
\end{strip}
        \lipsum[1-6]

\end{document} 

在此处输入图片描述

答案3

该解决方案进行了修改\@makechapterhead,以包含提前存储在保存箱中的报价\chapterquote

请注意,flushright是一个列表,并在上方和下方添加了额外的空间,而\makebox没有。

\documentclass[a4paper,10pt,openany,twoside,twocolumn]{book}
\usepackage[inner=3cm,outer=2cm, top=2cm]{geometry}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{dblfloatfix} 
\usepackage{lipsum} % using only for this MWE

\newsavebox{\quotebox}

\newcommand{\chapterquote}[2]% #1==quote, #2=credit
{\savebox{\quotebox}{\parbox{\textwidth}{\centering\textit{#1}\\%
  \ifx\empty#2\relax\else \makebox[\textwidth][r]{#2}\fi}}\ignorespaces}

\makeatletter
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@ % gap below title
    \ifvoid\quotebox\else
      \box\quotebox
      \bigskip
    \fi
  }}
\makeatother

\begin{document}
    \chapterquote{This is the text of a very insightful and deep quote that affects lives of all beings.}%
        {Konfucius}%
    \chapter{Lorem ipsum sit dolor amet}%
    \lipsum[1-6]
\end{document}

可以使用 etoolbox 包来编辑,从而稍微简化代码\@makechapterhead

\makeatletter
\patchcmd{\@makechapterhead}{\vskip 40\p@}{%
  \vskip 40\p@ % gap below title
  \ifvoid\quotebox\else
    \box\quotebox
    \bigskip
  \fi}{}{}
\makeatother

相关内容