双列布局,左侧为文本,右侧为列表

双列布局,左侧为文本,右侧为列表

对于文档,我有一个特殊章节,其中有很多代码列表,与散文文本相比。我希望最终采用两列布局,其中左列仅用于散文文本,右列仅用于代码列表。

下面创建一个两页双列文档,其中左列始终显示 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
  • 迷惑\pagebreakmulticolumn环境中做一个\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}

相关内容