假设我有一个多列文档,我想要做的是生成同一文档的替代版本,基本上将每一列(具有相同的换行符和分栏符)放在自己的页面上。(在文本周围留出大量空间用于记笔记)。我猜这要么是一个简单的挂入新列宏的情况,要么是一场绝对的噩梦。
因此对于这个 MWE:
\documentclass[twocolumn=true]{scrartcl}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
我想修改此代码,以便有一个可以设置的开关true
,使我得到一个三页文档,每列都在自己的页面上。也就是说,每列的换行符和分栏符与上述代码生成的相同。
一种方法是将页面几何形状设置为一列占用的大小,但这非常脆弱,每当我更改双列版本的格式时都需要重新进行设置......所以我想知道是否有更好的办法?
也可以考虑使用不同的方法来获得两列布局的相同结果...
答案1
这看起来像是 flowfram 的工作!
\documentclass[twocolumn=true]{scrartcl}
\usepackage{flowfram}
\usepackage{lipsum}
\newflowframe[all]{\columnwidth}{\textheight}{0pt}{0pt}
\begin{document}
\onecolumn
\lipsum
\end{document}
答案2
如果使用 LaTeX 模式设置两列布局\twocolumn
,则可以通过在\clearpage
设置第一列的代码末尾添加 来将每一列设置在自己的页面上。因此,我\@outputdblcol
从中复制latex.ltx
了的代码texmf-dist/tex/latex/base
并添加了\clearpage
,将其包装在 if 中,然后瞧:
\documentclass[twocolumn=true]{scrartcl}
\newif\ifmakeonecol
% \makeonecolfalse
\makeonecoltrue
\makeatletter
\ifmakeonecol
\def\@outputdblcol{%
\if@firstcolumn
\global\@firstcolumnfalse
\global\setbox\@leftcolumn\copy\@outputbox
\splitmaxdepth\maxdimen
\vbadness\maxdimen
\setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
\setbox\@outputbox\vsplit\@outputbox to\maxdimen
\toks@\expandafter{\topmark}%
\xdef\@firstcoltopmark{\the\toks@}%
\toks@\expandafter{\splitfirstmark}%
\xdef\@firstcolfirstmark{\the\toks@}%
\ifx\@firstcolfirstmark\@empty
\global\let\@setmarks\relax
\else
\gdef\@setmarks{%
\let\firstmark\@firstcolfirstmark
\let\topmark\@firstcoltopmark}%
\fi
\clearpage % <<-- addition
\else
\global\@firstcolumntrue
\setbox\@outputbox\vbox{%
\hb@xt@\textwidth{%
\hb@xt@\columnwidth{\box\@leftcolumn \hss}%
\hfil
{\normalcolor\vrule \@width\columnseprule}%
\hfil
\hb@xt@\columnwidth{\box\@outputbox \hss}}}%
\@combinedblfloats
\@setmarks
\@outputpage
\begingroup
\@dblfloatplacement
\@startdblcolumn
\@whilesw\if@fcolmade \fi{\@outputpage
\@startdblcolumn}%
\endgroup
\fi}%
\fi
\makeatother
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
除非有其他东西开始重新定义如何设置列,或者使用另一种创建列的方法,否则这应该是相当强大的......
浮动将出现在每页的“剩余”一半。我想这可以补救,但对我的用例来说没问题。