背景
我正在排版一本书,在其中使用了twocolumn
声明documentclass
(这是一本很长的科学书,包含许多表格和图形,所以我不想在每个全宽图像/表格之后重新声明两列环境,所以我选择了文档类方式)。
问题
在每个 的开头chapter
,都有一个引言,我想将其保留一列(即宽度为\textwidth
),因此我不会只将其放在第一列,而是将其放在两列上方。到目前为止,我尝试了minipage
环境和,\parbox
两者都给了我一个宽度为 的框\textwidth
,但第二列没有被推到引言框下方,因此它会溢出。当我尝试使用
\begin{table*}
The text of the quote
\endtable*}
引文按我的要求显示在两列上方,但在下一页,不在章节标题正下方。当我尝试使用\Floatbarrier
placeins 包时,第二列溢出了引文,就像其他解决方案一样。
我当前的设置(在这里仅发布 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