对于文档,我有一个特殊章节,其中有很多代码列表,与散文文本相比。我希望最终采用两列布局,其中左列仅用于散文文本,右列仅用于代码列表。
下面创建一个两页双列文档,其中左列始终显示 FOO 而右列仅显示 BAR。
\documentclass{article}
\usepackage{multicol}
\usepackage{multido}
\begin{document}
\begin{multicols}{2}
\noindent \multido{}{322}{FOO } \multido{}{322}{BAR }
\multido{}{322}{FOO } \multido{}{322}{BAR }
\end{multicols}
\end{document}
我想要同样的效果,但又不想手动切断我的输入。我想要一个宏和/或一个环境,我告诉它,\multido{}{644}{FOO }
它\multido{}{644}{BAR }
就会自动进行分页/分列,如上例所示。
是否有可以执行此操作的环境?有人看到实现此目的的简单快捷方法吗?
正在进行中:
我已经尝试了一两种破解方法,但一直失败。问题是,左栏中的分页符必须使文本在下一页的左栏中继续。右栏中的分页符必须使列表在下一页的右栏中继续。我的核心想法是,我有两个“输入保存框”A 和 B,每当 LaTeX 在环境中遇到分栏符时,multicols
它就会切换到另一个输入保存框。
但我从未接近实现任何类似的东西。我最好的尝试是\hsize=.5\hsize
生成既\makebox
没有宽度,也没有高度或深度的框,但包含其他仔细放置列表的框。使用这种方法,我无法使列表在页面/列的末尾中断。
可能有一种方法可以结合使用flowfram
上述在这个答案中和multicols
:
- 在环境中有
multicols
一列staticcontent
- 迷惑
\pagebreak
在multicolumn
环境中做一个\continueonframe
结合\refstepcounter
我接下来将尝试这个,同时希望有一个可以立即使用的解决方案...
更新
这个迷人的\pagebreak
想法是基于我认为multicols
环境具有的一些属性。似乎我只是想象了这些。我仍然认为 multicols 可以被破解来做我想要的事情,因为它已经遵循了吞噬形式的方法\box\partial@page
。通过为部分页面添加预填充的第二个框并交替输出,可以做到这一点。然而,这是一个更大的项目,我无法及时完成。我仍然在猜测很多,因为我的 TeX 不是那么好,阅读 Frank 的 TeX 几乎和阅读 Perl 代码一样具有挑战性。
答案1
这有点粗糙,但可能会帮助您入门。它假设没有浮动,也不会将页面的头部和底部重新定位到两列上(这fancyhdr
可能会有所帮助),而且它可能与某些东西不兼容,...
\begin{filecontents*}{file1.x}
\
\\\
\\\\\
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
some code [
here}
&& here
\end{filecontents*}
\begin{filecontents*}{file2.x}
<math>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
<mi>a</mi><mo>=</mo><mi>b</mi>
<mo>+</mo>
</math>
\end{filecontents*}
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\addtolength\textwidth{-6cm}
\addtolength\marginparwidth{6cm}
\def\a{One two three four five six. }
\def\b{\a\a\begin{equation}\theequation=\theequation\end{equation} \roman{equation} \roman{equation} \roman{equation} \a}
\def\c{Red yellow blue green black white. }
\makeatletter
\def \@combinefloats {%
\ifvoid\rightcol\else
\global\setbox\@ne\vsplit\rightcol to \textheight
\global\setbox\@ne\vbox to \textheight{\unvbox\@ne\vss}%
\setbox\@outputbox\vbox{\hbox{\box\@outputbox\kern\marginparsep\box\@ne}}%
\fi}
\makeatother
\usepackage{listings}
\newbox\rightcol
\setbox\rightcol\vbox{}
\def\addlisting#1{\global\setbox\rightcol\vbox{{\hsize\marginparwidth\linewidth\hsize\columnwidth\hsize\unvbox\rightcol\smallskip#1\par}}}
\begin{document}
\b\c\b
\addlisting{\lstinputlisting{file1.x}}
\c\c
\addlisting{\lstinputlisting{file2.x}}
\c\b\b\a\a\b\c\c\a
\a\c\c\c\c\c\b\b\b\a\b\c\c\a
\end{document}