From f12dd7727abc99394ce4f9a397a6929c341bdb67 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 17 Sep 2011 23:01:07 +0000 Subject: new latex package paracol (17sep11) git-svn-id: svn://tug.org/texlive/trunk@23995 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/paracol/README | 35 + .../texmf-dist/doc/latex/paracol/paracol-man.pdf | Bin 0 -> 85173 bytes .../texmf-dist/doc/latex/paracol/paracol-man.tex | 808 +++++++++++++++++++++ Master/texmf-dist/tex/latex/paracol/paracol.sty | 795 ++++++++++++++++++++ 4 files changed, 1638 insertions(+) create mode 100644 Master/texmf-dist/doc/latex/paracol/README create mode 100644 Master/texmf-dist/doc/latex/paracol/paracol-man.pdf create mode 100644 Master/texmf-dist/doc/latex/paracol/paracol-man.tex create mode 100644 Master/texmf-dist/tex/latex/paracol/paracol.sty (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/paracol/README b/Master/texmf-dist/doc/latex/paracol/README new file mode 100644 index 00000000000..a8cee1b5f52 --- /dev/null +++ b/Master/texmf-dist/doc/latex/paracol/README @@ -0,0 +1,35 @@ +paracol (v0.91): a multi-column package to typeset columns in "parallel". +=== +Copyright (C) 2005-2011 + Hiroshi Nakashima + (Kyoto Univerisity) +This package can be redistributed and/or modified under the terms +of the LaTeX Project Public License Distributed from CTAN +archives in directory macros/latex/base/lppl.txt; either +version 1 of the License, or any later version. +=== + +[Contents] + +- README ............ this document +- paracol.sty ....... the style file +- paracol-man.tex ... LaTeX source of the manual +- paracol-man.pdf ... PDF of the manual + +[Features] + ++ "paracol" environment in which you may "switch" and "synchronize columns + by \switchcolumn(*). + ++ "column", "nthcolumn", "leftcolumn" and "rightcolumn" environments used in + "paracol" to enclose texts to appear in a column. + ++ Counters are "local" to each column in default but you may make some of + them global to all columns by \globalcounter{}. + ++ \definethecounter{}{}{} to give its appearance + inition specific to -th column. + +Enjoy! + +Hiroshi Nakashima diff --git a/Master/texmf-dist/doc/latex/paracol/paracol-man.pdf b/Master/texmf-dist/doc/latex/paracol/paracol-man.pdf new file mode 100644 index 00000000000..ffd8f72a0a9 Binary files /dev/null and b/Master/texmf-dist/doc/latex/paracol/paracol-man.pdf differ diff --git a/Master/texmf-dist/doc/latex/paracol/paracol-man.tex b/Master/texmf-dist/doc/latex/paracol/paracol-man.tex new file mode 100644 index 00000000000..f2af2d6b6f6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/paracol/paracol-man.tex @@ -0,0 +1,808 @@ +%234567890123456789012345678901234567890123 +\documentclass{article} +\usepackage{paracol} +\usepackage{newvbtm} + +\textwidth210mm +\advance\textwidth-40mm \oddsidemargin20mm \advance\oddsidemargin-1in +\columnsep10mm +\marginparwidth20mm \advance\marginparwidth-\marginparsep +\marginparsep.5\marginparsep + +\def\|{\verb|} + +\newverbatim{Verbatim}{\topsep0pt \partopsep0pt}{}{}{} + +%\def\topfraction{.9} +%\def\bottomfraction{.9} +%\def\textfraction{.1} + +% making counters global +\globalcounter{section} +\globalcounter{figure} +\globalcounter{table} + +% giving local \theCTR definition +\definethecounter{footnote}{1}{\textit{\arabic{footnote}}} +\definethecounter{subsection}{1}{% + \texttt{\arabic{section}.\arabic{subsection}}} + +\let\AB\allowbreak + +\hyphenation{col-umn col-umns} + +\title{Package \textsf{paracol} User's Manual\\ + (version 0.91)} +\author{Hiroshi Nakashima\\(Kyoto University)} +\date{2011/09/16} + + + +\begin{document} +\hbadness9000 \hfuzz6pt +\maketitle +\begin{paracol}{2}[\section{Introduction}] +This document describes the usage of yet another multi-column package named +\textsf{paracol}. The unique feature of the package is that columns are +typeset {\em in parallel.} + +Suppose you are writing a bilingual document whose left column is written in +a language, say English, and right column has the translation of the left +column in another language, e.g. Japanese. With the \textsf{paracol} +package you may write an English part of arbitrary length and then {\em +switch} to its Japanese counterpart to place both parts side by side. Of +course you may return to the English writing similarly. + +The column switching is always allowed when you complete an outermost level +paragraph. You may be unaware whether a column is broken into multiple +pages before switching because the package automatically goes back and +forward to the correct page and vertical position when you switch the +column. Moreover, you may {\em synchronize} columns so that the tops of +the first paragraphs after switching in all columns are vertically aligned. +At a synchronization point, you may give a single-column text, for example +a common section header, optionally. You may also switch single-column and +multi-column in a page arbitrary. + +This manual itself is an example of two-column documents typeset by +\textsf{paracol}. Since the author is not familiar with languages other +than English and Japanese and the latter should be hardly understood by +most of readers, the right column is the translation of the left English +column into a computational language. That is, the right column is the +\LaTeX{} source code of the left column\footnote{Not really but its essence +is shown.}. + +\switchcolumn +\begin{Verbatim} +\begin{paracol}{2}[\section{Introduction}] +\hbadness5000 +This document describes the usage of yet +another multi-column package named +\textsf{paracol}. The unique feature of +the package is that columns are typeset +{\em in parallel.} + +Suppose you are writing a bilingual +document whose left column is written in a +language, say English, and right column has +the translation of the left column in +another language, e.g. Japanese. With the +\textsf{paracol} package you may write an +English part of arbitrary length and then +{\em switch} to its Japanese counterpart to +place both parts side by side. Of course +you may return to the English writing +similarly. + +The column switching is always allowed when +you complete an outermost level paragraph. +You may be unaware whether a column is +broken into multiple pages before switching +because the package automatically goes back +and forward to the correct page and +vertical position when you switch the +column. Moreover, you may {\em +synchronize} columns so that the tops of +the first paragraphs after switching in all +columns are vertically aligned. At a +synchronization point, you may give a +single-column text, for example a common +section header, optionally. You may also +switch single-column and multi-column in a +page arbitrary. + +This manual itself is an example of +two-column documents typeset by +\textsf{paracol}. Since the author is not +familiar with languages other than English +and Japanese and the latter should be +hardly understood by most of readers, the +right column is the translation of the left +English column into a computational +language. That is, the right column is the +\LaTeX{} source code of the left column% +\footnote{Not really but its essence is +shown.}. + +\switchcolumn + +\begin{verbatim} +\end{Verbatim} +{\it Here is the source of above.}\\ +\|\end{verbatim}|\footnote{% +This \texttt{verbatim} construct is simply referred as to +``\textit{source}'' hereafter.} + + + +\switchcolumn*[\section{Basic Usage}] +Loading the package is very simple. What you have to do is +\|\usepackage{paracol}| in the preamble. Note that \textsf{paracol} can be +used with \LaTeXe{} and does not work with \LaTeX{} 2.09. + +\switchcolumn + +\begin{Verbatim} +\switchcolumn*[\section{Basic Usage}] +Loading the package is very simple. What +you have to do is \|\usepackage{paracol}| +\end{Verbatim} +\|in the preamble. ...|\footnote{% +Hereafter, a part of the source code may be omitted like this.}\\ +\|\switchcolumn|\\ +\textit{source} + +\switchcolumn* +The fundamental means of parallel-column typesetting are the environment +\|paracol| and the command \|\switchcolumn|. The \|paracol| environment +needs an argument to specify the number of columns. Thus the following is +the basic construct for two-parallel-column documents. +\begin{quote} +\|\begin{paracol}{2}|\\ +\textit{left column text}\\ +\|\switchcolumn|\\ +\textit{right column text}\\ +\|\switchcolumn|\\ +\textit{left column text}\\ +\|\switchcolumn|\\ +\textit{right column text}\\ +\|\switchcolumn|\\ +\mbox{\hspace{4em}}$\vdots$\\ +\|\end{paracol}| +\end{quote} + +\switchcolumn +\begin{Verbatim} +\switchcolumn* +The fundamental means of parallel-column +typesetting are the environment \|paracol| +and the command \|\switchcolumn|. ... +\switchcolumn +\end{Verbatim} +\textit{source} + +\switchcolumn[1]* +\begin{Verbatim} +\switchcolumn[1]* +\end{Verbatim} +\textit{source} +\begin{Verbatim} +\switchcolumn[0] +The \|\switchcolumn| command may have an +optional argument to specify the column +number (zero origin) to start. ... +\end{Verbatim} + +\switchcolumn[0] +The \|\switchcolumn| command may have an optional argument to specify the +column number (zero origin) to start. That is, \|\switchcolumn[0]| means to +switch to the leftmost column, \|\switchcolumn[1]| is to start the second +column and so on. Thus the \|\switchcolumn| without the optional argument +may be considered as \|\switchcolumn[|$i+1\bmod{n}$\|]| where $i$ is the +last column number and $n$ is the number of columns given to \|paracol| +environment. + + + +\switchcolumn[0]*[\section{Column Synchronization}\label{sec:sync}] +The \|\switchcolumn| command may also be followed by a `\|*|' to {\em +synchronize} columns. After you switch from a column to another by +\|\switchcolumn*| (or \|\switchcolumn[|$i$\|]*|), all the columns are +vertically aligned at the bottom of the {\em deepest} one preceding the +command. For example, the previous section has three \|\switchcolumn*| +commands at which left and right columns are vertically aligned. + +The {\em starred} version of \|\switchcolumn| may have an optional argument +to specify a multi-column text whose bottom is the vertical alignment +points of the columns. For example, \|\section| commands in this manual are +given as optional arguments of\break\|\switchcolumn*| like; +\begin{Verbatim} + \switchcolumn*[\section{Basic Usage}] +\end{Verbatim} +The \|paracol| environment may also start with a multi-column text by +specifying it as the optional argument of \|\begin{paracol}|. For example, +at the beginning of this document, the author put; +\begin{Verbatim} + \begin{paracol}[\section{Introduction}] +\end{Verbatim} + +\switchcolumn +\begin{Verbatim} +\switchcolumn[0]*[% + \section{Column Synchronization} + \label{sec:sync}] +The \|\switchcolumn| command may also be +followed by a `\|*|' to {\em synchronize} +columns. ... + +The {\em starred} version of +\|\switchcolumn| may have an optional +argument to specify a multi-column text +whose bottom is the vertical alignment +points of the columns. ... +\switchcolumn +\end{Verbatim} +\textit{source} + + + +\begin{column*}[\section{Environments for Columns}\label{sec:env}] +\subsection{Environment \texttt{column}} +The \|\switchcolumn| is simple but you may prefer to pack the contents of a +column in an environment. The \|column| environment is available for this +well-structurization of \LaTeX{} sources for parallel columned documents. A +construct; +\begin{quote} +\|\begin{column}|\\ +\textit{text for a column}\\ +\|\end{column}| +\end{quote} +is (almost) equivalent to; +\begin{quote} +\|\switchcolumn|\\ +\textit{text for a column} +\end{quote} +The \|column*| environment is also available for the column synchronization +and may have an optional argument for multi-column text. +\end{column*} + +\begin{column} +\subsection{\ttfamily Environment column} +\begin{Verbatim} +\begin{column*}[% + \section{Environments for Columns} + \label{sec:env}] +\subsection{Environment \texttt{column}} +The \|\switchcolumn| is simple but you may +prefer to pack the contents of a column in +an environment. ... +\end{column*} +\begin{column} +\end{Verbatim} +\textit{source}\\ +\|\end{column}| +\end{column} + +\begin{nthcolumn*}{1} +\subsection{\ttfamily Environment nthcolumn} +\begin{Verbatim} +\begin{nthcolumn*}{1} +\end{Verbatim} +\textit{source} +\begin{Verbatim} +\end{nthcolumn*} + +\begin{nthcolumn}{0} +\subsection{Environment \texttt{nthcolumn}} +The \|\switchcolumn| can start an +arbitrarily specified column with the +column number given through its optional +argument, but the \|column| environment +cannot do it. ... +\end{nthcolumn} +\end{Verbatim} +\end{nthcolumn*} +\begin{nthcolumn}{0} +\subsection{Environment \texttt{nthcolumn}} +The \|\switchcolumn| can start an arbitrarily specified column with the +column number given through its optional argument, but the \|column| +environment cannot do it. If you want to start $i$-th column, you have to +do \|\beign{nthcolumn}{|$i$\|}| (or \|nthcolumn*| with an optional argument +to synchronize). +\end{nthcolumn} + + + +\begin{leftcolumn*} +\subsection{Environment \texttt{leftcolumn} and\\\texttt{rightcolumn}} +The environment \|leftcolumn| and \|rightcolumn| (and their starred +versions with an optional argument) are available as more convenient means +than saying \|\begin{nthcolumn}{0}| and \|\begin{nthcolumn}{1}|. + +\begin{figure*} +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\textwidth{}\\ + double-column figure \#1\\ + \\\hline + \end{tabular}} +\caption{A Double-Column Figure} +\end{figure*} +\begin{figure}[t] +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\ + single-column figure \#1\\ + \\\\\hline + \end{tabular}} +\caption{A Single-Column Figure} +\end{figure} +\end{leftcolumn*} + +\begin{rightcolumn} +\subsection{\ttfamily Environment leftcolumn and\\rightcolumn} +\begin{Verbatim} +\begin{leftcolumn*} +\subsection{% + Environment \texttt{leftcolumn} and\\ + \texttt{rightcolumn}} +The environment \|leftcolumn| and +\|rightcolumn| (and their starred versions +with an optional argument) are available as +more convenient means than saying +\|\begin{nthcolumn}{0}| and +\|\begin{nthcolumn}{1}|. +\begin{figure*}...\end{figure*} +\begin{figure}[t]...\end{figure} +\end{leftcolumn*} +\begin{rightcolumn} +\end{Verbatim} +\textit{source and a \texttt{figure} env}\\ +\|\end{rightcolumn}| +\begin{figure}[t] +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\ + \ttfamily single-column figure \#2\\ + \\\hline + \end{tabular}} +\caption{\ttfamily Another Single-Column Figure} +\end{figure} +\end{rightcolumn} + + + +\begin{leftcolumn*}[\section{Floats, Footnotes and Counters}] +\begin{table}[b] +\caption{A Single-Column Table} +\centerline{\begin{tabular}[t]{|l|c|r|}\hline + An&example&of\\\hline + single&column&table\\\hline + \end{tabular}} +\end{table} +\subsection{Figures and Tables} +As shown in this page, double-column figures\slash tables (or those spanned +multiple columns if you have three or more) may be placed by \|figure*| and +\|table*| environments as usual. A single-column figure\slash table will be +placed in the column in which you put \|figure| and \|table|. For example, +the contents of \|figure| environment in a \|leftcolumn| environment is +\emph{always} placed in a left column. That is, even if the column of the +\emph{current} page does not have enough room to place the figure, it will +not thrown to the right column but will be placed in the left column of the +next page\footnote{% +% +Or some farther page if \LaTeX{} cannot solve the placement problem wisely.}. +% + +Another caution about float placement is that you have to be careful when +you try to put a top-float explicitly with \|t|-option or implicitly without +placement option (i.e., \|tbp| in most classes) and to synchronize columns. +The rule is as follows; after you synchronize columns in a page, the page +cannot have top-floats any more. When you synchronize columns, +\textsf{paracol} fixes a virtual horizontal line in the page as the +synchronization barrier. Thus no top-floats cannot be added above the +line\footnote{% +% +Even if you have enough space above, sorry.}. +% +Therefore, the author put two \|figure| environments for the figures shown +in the previous page into the \|leftcolumn*| and \|rigtcolumn| environment +for the previous section. + +\subsection{Footnotes and Marginal Notes} +Footnotes are also put at the bottom of the column in which \|\footnote| +commands and their references (like this\footnote{% +% +An example of footnote.}) +% +reside, as shown in page~2 and this page. Marginal notes +behave similarly like what you are seeing in the left margin of this +sentence\marginpar{% +% +\raggedright An example of marginal note.} +% +and the right marginal note in this page\footnote{% +% +If you have three or more columns, marginal notes of the second or +succeeding columns are placed just right of the column. Thus marginal notes +of non-leftmost and non-rightmost columns will appear in the space +separating columns rather than the margin of a page.}. + +\subsection{Local and Global Counters} +You probably found that the numbering of figures and tables is \emph{global} +while that of footnotes are \emph{local}. That is, the figure in the right +column of the previous page has number~3 following its left-column +counterpart Figure~2. The tables in the page are also numbered as 1 and 2 +crossing the column boundary. However, the footnotes in each column have +their own numbering sequence. Moreover, the footnote numbers in left +columns are typeset in Roman font while those in right columns have italic +shapes. Similarly, sub-section numbering is local and the headings in right +columns have typewriter-face numbers. + +This happens because the author declared the counters \|figure| and \|table| +are \emph{global} in the preamble of this document by saying; +\begin{itemize}\item[]%{ +\|\globalcounter{figure}|\\ +\|\globalcounter{table}| +\end{itemize}%} +and do nothing about \|footnote| and \|subsection| counters. By default, +all the counters except for \|page| are local to columns. The value of a +local counter of a column is saved somewhere when you leave the column, and +it is restored when you revisit the column. The initial value of the +local counters are the value they have at \|\begin{paracol}|. After you +close the \|paracol| environment, the values of the left-most column are +used for the rest of your document. + +If you make a counter global by the command \|\globalcounter|, the +save/restore operations are not performed to the counter and thus it is +globally incremented by \|\[ref]|\AB\|stepcounter| or commands such as +\|\caption| and \|\section|. Note that the value of a global counter +depends on the place where it is incremented (or set) in the \emph{source +code} rather than where it appears in the output. Thus if the author put a +\|table| environment here to increment \|table| counter, the right-column +table at the bottom of page~\pageref{tab:right} would be Table~3 because its +\|table| environment does not appear yet in the source code. + +Another counter which the author made global in this documnet is +\|section|. As explained in Section~\ref{sec:sync}, an optional +multi-column text of column switching is considered as in the left-most +column. Since \|\section| commands in this document are always multi-column +texts, so far, it seems unnecessary to make \|section| global because it is +incremented correctly in the left-most column. However, the stepping +\|section| has a side effect to reset its decendent counter \|subsection| +and referred from \|\thesubsection| command. Thus if \|section| were local, +the right-column sub-sections in Section~\ref{sec:env} would be numbered as +``0.1'', ``0.2'' and ``0.3'' because the local value of \|section| would be +zero. Moreover, the right-column sub-sections of this section would be +``0.4'', ``0.5'' and ``0.6'' because stepping \|section| local to +left-columns would not reset \|subsection| local to right-columns. + +You may give a local appearance to a counter \textit{ctr} for the $i$-th +column (zero origin) by a command; +\begin{itemize}\item[]% + \|\definethecounter{|\textit{ctr}\|}{|$i$\|}{|\textit{def}\|}| +\end{itemize}%} +where \textit{def} is to be the body of the local definition of +\|\the|\textit{ctr}. For example, the preamble of this document has the +following to give non-default defitions to \|\thefootnote| and +\|\thesubsetion| for right columns. +% +\begin{Verbatim} + \definethecounter{footnote}{1}{% + \textit{\arabic{footnote}}} + \definethecounter{subsection}{1}{% + \texttt{% + \arabic{section}.\arabic{subsection}}} +\end{Verbatim} +\end{leftcolumn*} + +\begin{rightcolumn} +\begin{table}[b] +\caption{\ttfamily Another Single-Column Table} +\label{tab:right} +\centerline{\ttfamily \begin{tabular}[t]{|l|r|}\hline + Another&example\\\hline + of&single\\\hline + column&table\\\hline + \end{tabular}} +\end{table} +\subsection{\ttfamily Figures and Tables} +\begin{Verbatim} +\begin{leftcolumn*}[\section{% + Floats, Footnotes and Counters}] +\begin{table}[b] +\caption{A Single-Column Table} +\centerline{\begin{tabular}[t]{|l|c|r|} + \hline + An&example&of\\\hline + single&column&table\\\hline + \end{tabular}} +\end{table} +\subsection{Figures and Tables} +As shown in this page, double-column +figures\slash tables (or those spanned +multiple columns if you have three or more +columns) may be placed by \|figure*| and +\end{Verbatim} +{\ttfamily \|table*| environments as usual\footnote{Another example +of footnote.}. ...} + +\subsection{\ttfamily Footnotes and Marginal Notes} +\begin{Verbatim} +Footnotes are also put at the bottom of the +column in which \|\footnote| commands and +their references (like this\footnote{% +An example of footnote.}) reside, as shown +in page~2 and this page. Marginal notes +behave similarly like what you are seeing +in the left margin of this +sentense\marginpar{\raggedright An example +of marginal note.} and the right marginal +\end{Verbatim} +\|note in this page\footnote{...}. ...|% +\marginpar{\raggedright\ttfamily +Another example of marginal note.} + +\begin{figure}[h]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\ + \ttfamily a figure with [h] option\\ + \ttfamily to fill space\\ + \\\\\hline + \end{tabular}} +\caption{\ttfamily +A Figure with [h] Option} +\end{figure}%} + +\begin{figure}[b]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\ + \ttfamily a figure with [b] option\\ + \ttfamily to fill space\\ + \\\hline + \end{tabular}} +\caption{\ttfamily +A Figure with [b] Option} +\end{figure}%} + +\begin{figure}[p]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\\\\\ + \ttfamily a figure with [p] option\\ + \ttfamily to fill space + \\\\\\\\\hline + \end{tabular}} +\caption{\ttfamily +A Figure with [p] Option} +\end{figure}%} + +\begin{figure}[p]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\\\\\ + \ttfamily another figure with [p] option\\ + \ttfamily to fill space + \\\\\\\\\hline + \end{tabular}} +\caption{\ttfamily +Another Figure with [p] Option} +\end{figure}%} + +\begin{figure}[p]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\\\\\ + \ttfamily yet another a figure with [p]\\ + \ttfamily option to fill space + \\\\\\\\\hline + \end{tabular}} +\caption{\ttfamily +Yet Another Figure with [p] Option} +\end{figure}%} + +\subsection{\ttfamily Local and Global Counters} +\begin{Verbatim} +You probably found that the numbering of +figures and tables is \emph{global} while +that of footnotes are \emph{local}. ... +\end{leftcolumn*} +\end{Verbatim} +\textit{source}. + +\begin{figure}[t]%{ +\centerline{\begin{tabular}[b]{|c|}\hline + \hbox to.9\columnwidth{}\\\\\\\\ + \ttfamily another figure with [t] option\\ + \ttfamily to fill space + \\\\\\\\\hline + \end{tabular}} +\caption{\ttfamily +Another Figure with [t] Option} +\end{figure}%} +\end{rightcolumn} +\end{paracol} + + + +\section{Closing \texttt{paracol} Environment and Page Flushing} +The final example shown here is this single-column text which the author put +after \|paracol| environment is closed. As you are seeing, \|paracol| +environment can be finished at any vertical position in a page and can be +followed by ordinary single column texts. + +\begin{paracol}{2} +\begin{leftcolumn} +The environment may also be restarted anywhere you like as shown here. + +The last issue is to flush a page. The ordinary \|\newpage| command works +as you expect. If you say \|\newpage| in the left column in a page, the +contents following it will appear in the left column in the next page. Note +that this does not affects the layout of the right column. + +To flush all columns in a page, a command \|\flush|\AB\|page| is available. +This command in $i$-th column is almost equivalent to; +\begin{itemize}\item[]%{ +\|\switchcolumn[|$i$\|]*[\newpage]| +\end{itemize}%} +but more robust\footnote{% +% +For example \texttt{\string\switchcolumn*} may flush a page for the +synchronization and thus \texttt{\string\newpage} may leave an empty page.}. +% +The ordinary page breaking command \|\clearpage| may also be used to flush +all columns and to start a fresh page, but it has a side effect to put all +figures and tables which are not yet output. +\end{leftcolumn} + +\begin{rightcolumn} +\begin{Verbatim} +\begin{leftcolumn} +The environment may also be restarted +anywhere you like as shown here. ... +\end{leftcolumn} +\end{Verbatim} +\textit{source} +\end{rightcolumn} + +\begin{leftcolumn} +Now the aurthor will do \|\flushpage| shortly to start a real binlingual +example from the next page. O.K., now!!\flushpage +\end{leftcolumn} + + + +\newenvironment{Gverse}{\begin{leftcolumn*}%[\centerline{\hrulefill}] + \begin{myverse}}% + {\end{myverse}\end{leftcolumn*}} +\newenvironment{Everse}{\begin{rightcolumn}\begin{myverse}}% + {\end{myverse}\end{rightcolumn}} +\makeatletter +\newenvironment{myverse}{\leftmargini0pt\partopsep0pt\verse}{\endverse} + +\begin{leftcolumn*}[% +\centerline{\Large An Die Freude/To Joy}\smallskip +\centerline{\large Friedrich Schiller}\smallskip +The following is the libretto of the fourth movement of Beethoven's Ninth +Symphony, his adaptation of Schiller's ode ``An Die Freude'' (or ``To Joy'' in +English). Beethoven's additions and revisions are indicated in italics.] +\end{leftcolumn*} +\begin{Gverse} +\itshape O Freunde, nicht diese T\"one! \\ +Sondern la{\ss}t uns angenehmere anstimmen und freu\-denvollere% +\footnote{If I had been a good student in my German class, this footnote +would say ``This part was added by Beethoven.'' in German.}. +\end{Gverse} +\begin{Everse} +\itshape Oh friends, no more of these sad tones!\\ +Let us rather raise our voices together\\ +In more pleasant and joyful tones% +\footnote{This part was added by Beethoven.}. +\end{Everse} +\begin{Gverse} +Freude!\\ +Freude, sch\"oner G\"otterfunken +Tochter aus Elysium,\\ +Wir betreten feuertrunken, +Himmlische, dein Heiligtum!\\ +Deine Zauber binden wieder, +{\itshape Was die Mode streng geteilt;\\ +Alle Menschen werden Br\"uder\footnote{% +Original: Was der Mode Schwert geteilt;\\ +Bettler werden F\"urstenbr\"uder,},} +Wo dein sanfter Fl\"u\-gel weilt +\end{Gverse} +\begin{Everse} +Joy! \\ +Joy, thou shining spark of God,\\ +Daughter of Elysium,\\ +With fiery rapture, goddess,\\ +We approach thy shrine.\\ +Your magic reunites\\ +{\itshape That which stern custom has parted;\\ +All humans will become brothere\footnote{% +original: +What custom's sword has parted;\\ +Beggars become princes' brothers}}\\ +Under your protective wing. +\end{Everse} +\begin{Gverse} +Wem der gro{\ss}e Wurf gelungen, +eines Freundes Freund zu sein;\\ +Wer ein holdes Weib errungen, +mische seinen Jubel ein!\\ +Ja, wer auch nur eine Seele +sein nennt auf dem Erdenrund!\\ +Und wer's nie gekonnt, der stehle +weinend sich aus diesem Bund! +\end{Gverse} +\begin{Everse} +Let the man who has had the fortune\\ +To be a helper to his friend,\\ +And the man who has won a noble woman,\\ +Join in our chorus of jubilation!\\ +Yes, even if he holds but one soul\\ +As his own in all the world!\\ +But let the man who knows nothing of this\\ +Steal away alone and in sorrow. +\end{Everse} +%\flushpage +\begin{Gverse} +Freude trinken alle Wesen +an den Br\"usten der Natur;\\ +Alle Guten, all B\"osen +folgen ihrer Rosenspur.\\ +K\"usse gab sie uns und Reben, +einen Freund, gepr\"uft im Tod;\\ +Wollust ward dem Wurm gegeben, +und der Cherub steht vor Gott. +\end{Gverse} +\begin{Everse} +All the world's creatures drink\\ +From the breasts of nature;\\ +Both the good and the evil\\ +Follow her trail of roses.\\ +She gave us kisses and wine\\ +And a friend loyal unto death;\\ +She gave the joy of life to the lowliest,\\ +And to the angels who dwell with God. +\end{Everse} +\begin{Gverse} +Froh, wie seine Sonnen fliegen +durch des Himmels pr\"acht'gen Plan,\\ +Laufet, Br\"uder, eure Bahn, +freudig, wie ein Held zum Siegen. +\end{Gverse} +\begin{Everse} +Joyous, as his suns speed\\ +Through the glorious order of Heaven,\\ +Hasten, brothers, on your way,\\ +Joyful as a hero to victory. +\end{Everse} +\begin{Gverse} +Seid umschlungen, Millionen! +Diesen Ku{\ss} der ganzen Welt!\\ +Br\"uder, \"uber'm Sternenzelt +mu{\ss} ein lieber Vater woh\-nen. +\end{Gverse} +\begin{Everse} +Be embraced, all ye millions!\\ +With a kiss for all the world!\\ +Brothers, beyond the stars\\ +Surely dwells a loving Father. +\end{Everse} +\begin{Gverse} +Ihr st\"urzt nieder, Millionen? +Ahnest du den Sch\"opfer, Welt?\\ +Such'ihn \"uberm Sternenzelt! +\"Uber Sternen mu{\ss} er wohnen. +\end{Gverse} +\begin{Everse} +Do you kneel before him, oh millions?\\ +Do you sense the Creator's presence?\\ +Seek him beyond the stars!\\ +He must dwell beyond the stars. +\end{Everse} +\end{paracol} + + + +\section*{Acknowledgements} +The author thanks to Yacine Daddi Addoun who gave the author the motivation +to write the style for his bilingual document. He also thanks to Robin +Fairbairns who kindly invited the style to CTAN after the author's lazy six +years failing to upload the style. +\end{document} diff --git a/Master/texmf-dist/tex/latex/paracol/paracol.sty b/Master/texmf-dist/tex/latex/paracol/paracol.sty new file mode 100644 index 00000000000..3239839b8ba --- /dev/null +++ b/Master/texmf-dist/tex/latex/paracol/paracol.sty @@ -0,0 +1,795 @@ +% Style file `paracol +% Copyright (C) 2005-2011 +% Hiroshi Nakashima +% (Kyoto University) +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. + +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\ProvidesPackage{paracol}[2011/09/16 v0.91 ] + +\newcount\pcol@currcol +\newcount\pcol@nextcol +\newcount\pcol@ncol +\newcount\pcol@page +\newcount\pcol@maxpage +\newcount\pcol@basepage +\newif\ifpcol@textonly +\newif\ifpcol@sync +\newif\ifpcol@clear +\newif\ifpcol@stopoutput +\newdimen\pcol@prevdepth +\newdimen\pcol@colht +\newskip\pcol@topskip + +\def\pcol@output{\let\par\@@par + \ifnum\outputpenalty<-\@M + \pcol@specialoutput + \else + \@makecol + \pcol@opcol + \pcol@startcolumn + \@whilesw\if@fcolmade\fi{\pcol@opcol \pcol@startcolumn}% + \fi + \ifnum\outputpenalty>-\@Miv + \ifdim\@colroom<1.5\baselineskip + \ifdim\@colroom<\textheight + \@latex@warning@no@line{Text page \thepage\space + contains only floats}% + \@emptycol + \else + \global\vsize\@colroom + \fi + \else + \global\vsize\@colroom + \fi + \else + \global\vsize\maxdimen + \fi} + + + +\def\pcol@ovf{% + \PackageError{paracol}{Too many unprocessed columns/floats}\@ehb} +\def\pcol@opcol{% + \@next\@currbox\@freelist{\global\setbox\@currbox\box\@outputbox}\pcol@ovf + \expandafter\@cons\csname pcol@shipped\number\pcol@currcol\endcsname\@currbox + \ifnum\pcol@currcol=\z@ \pcol@setpageno \fi + \pcol@nextpage + \pcol@checkshipped + \if@tempswa \pcol@outputpage\z@ \fi + \global\@colht\textheight + \ifnum\pcol@page>\pcol@maxpage \pcol@startpage + \else \pcol@getcurrpage + \fi + \pcol@floatplacement} + +\def\pcol@checkshipped{\@tempswatrue + \@tempcnta\z@ \@whilenum\@tempcnta<\pcol@ncol\do{% + \expandafter\ifx\csname pcol@shipped\number\@tempcnta\endcsname\@empty + \@tempswafalse \fi + \advance\@tempcnta\@ne}} + +\def\pcol@getcurrpinfo#1{% + \edef#1{\expandafter\@cdr\pcol@currpage\@nil}% + \pcol@getpinfo#1} + +\def\pcol@setpageno{\begingroup + \@tempcnta\pcol@page \advance\@tempcnta-\pcol@basepage + \edef\reserved@a{\pcol@pages\pcol@currpage}% + \global\let\pcol@pages\@empty \global\let\pcol@currpage\@empty + \let\@elt\pcol@setpnoelt \reserved@a + \endgroup} +\def\pcol@setpnoelt#1{% + {\let\@elt\relax \xdef\pcol@pages{\pcol@pages\pcol@currpage}}% + \pcol@textonlytrue + \ifnum#1<\z@ \gdef\pcol@currpage{\@elt{#1}}% + \else\ifnum#1>\@cclv \gdef\pcol@currpage{\@elt{#1}}% + \else \gdef\pcol@currpage{\@elt#1}\pcol@textonlyfalse + \fi\fi + \ifnum\@tempcnta>\z@\else + \ifpcol@textonly \pcol@settextpage + \else \global\count#1\c@page + \fi + \advance\c@page\@ne + \fi + \advance\@tempcnta\m@ne} +\def\pcol@nextpage{\begingroup + \@tempcnta\pcol@page \advance\@tempcnta-\pcol@basepage + \@tempswatrue + \let\@elt\pcol@nextpelt \pcol@pages\pcol@currpage + \global\advance\pcol@page\@ne + \endgroup} +\def\pcol@nextpelt#1{% + \ifnum\@tempcnta<\z@ + \ifnum#1<\z@ \@tempswafalse + \else\ifnum#1>\@cclv \@tempswafalse + \else\ifdim\dimen#1<\z@ + \if@tempswa \global\advance\pcol@page\@ne \fi + \else \@tempswafalse + \fi\fi\fi + \fi + \advance\@tempcnta\m@ne} +\def\pcol@getcurrpage{\begingroup + \@tempcnta\pcol@page \advance\@tempcnta-\pcol@basepage + \let\@elt\pcol@getpelt \pcol@pages\pcol@currpage + \endgroup} +\def\pcol@getpelt#1{% + \ifnum\@tempcnta=\z@ + \pcol@getpinfo{#1}{\global\c@page}{\global\@colht}{\global\topskip}\fi + \advance\@tempcnta\m@ne} + +\def\pcol@getpinfo#1#2#3#4{\count@#1\relax \pcol@textonlytrue + \ifnum\count@>\@cclv + \advance\count@-\@cclvi #2\count@ #3\textheight #4\pcol@topskip + \else\ifnum\count@<\z@ + #2\count@ #3\textheight #4\pcol@topskip + \else #2\count\count@ #3\dimen\count@ #4\skip\count@ \pcol@textonlyfalse + \fi\fi} +\def\pcol@settextpage{\begingroup + \@tempcnta\c@page + \ifnum\@tempcnta<\z@\else \advance\@tempcnta\@cclvi \fi + \let\@elt\relax \xdef\pcol@currpage{\@elt{\number\@tempcnta}} + \endgroup} + +\def\pcol@startpage{% + \global\pcol@maxpage\pcol@page + \ifx\pcol@currpage\@empty\else + \pcol@getcurrpinfo\@currbox{\global\c@page}\@tempdima\@tempskipa + \stepcounter{page}% + \fi + \global\@colht\textheight + \global\topskip\pcol@topskip + \xdef\pcol@pages{\pcol@pages\pcol@currpage}% + \@dblfloatplacement + \@tryfcolumn\@dbldeferlist + \@whilesw\if@fcolmade\fi{% + \@next\@currbox\@freelist{% + \global\setbox\@currbox\box\@outputbox}\pcol@ovf + \global\count\@currbox\c@page + \global\dimen\@currbox-\maxdimen + \global\skip\@currbox\pcol@topskip + \@cons\pcol@pages\@currbox + \stepcounter{page}% + \global\advance\pcol@page\@ne \global\pcol@maxpage\pcol@page + \@tryfcolumn\@dbldeferlist}% + \begingroup + \let\reserved@b\@dbldeferlist + \global\let\@dbldeferlist\@empty + \let\@elt\@sdblcolelt + \reserved@b + \endgroup + \ifx\@dbltoplist\@empty + \pcol@settextpage + \else + \setbox\@tempboxa\vbox{}% + \begingroup + \let\@elt\@comdblflelt + \@dbltoplist + \let\@elt\relax + \xdef\@freelist{\@freelist\@dbltoplist}% + \global\let\@dbltoplist\@empty + \@next\@currbox\@freelist{% + \global\setbox\@currbox\vbox{% + \unvbox\@tempboxa \vskip-\dblfloatsep \dblfigrule + \vskip\dbltextfloatsep}}% + \pcol@ovf + \global\count\@currbox\c@page + \global\dimen\@currbox\@colht + \global\skip\@currbox\pcol@topskip + \xdef\pcol@currpage{\@elt\@currbox}% + \endgroup + \fi +} + + +\def\pcol@outputpage#1{\begingroup + \def\@elt{\pcol@outputelt#1}\@tempswatrue \pcol@stopoutputfalse + \let\reserved@b\pcol@pages \gdef\pcol@pages{}% + \reserved@b + \endgroup} +\def\pcol@outputelt#1#2{% + \setbox\@outputbox\box\voidb@x + \def\@currbox{#2}% + \pcol@getpinfo\@currbox\c@page\@tempdima\@tempskipa + \ifdim\@tempdima<\z@ + \ifpcol@stopoutput + \@cons\pcol@pages\@currbox + \else + \setbox\@outputbox\box\@currbox + \@cons\@freelist\@currbox + \fi + \else\if@tempswa + \ifnum#1=\z@ \@tempswafalse \fi + \setbox\@outputbox\vbox to\textheight{% + \ifpcol@textonly\else + \@cons\@freelist\@currbox + \unvbox\@currbox + \fi + \hb@xt@\textwidth{% + \let\pcol@hfil\relax + \@tempcnta\z@ \@whilenum\@tempcnta<\pcol@ncol\do{% + \expandafter\@next\expandafter\@currbox + \csname pcol@shipped\number\@tempcnta\endcsname + \relax{\let\@currbox\voidb@x}% + \ifvoid\@currbox\else \@cons\@freelist\@currbox \fi + \pcol@hfil \hb@xt@\columnwidth{\box\@currbox\hss}% + \let\pcol@hfil\hfil + \advance\@tempcnta\@ne}}}% + \else + \pcol@stopoutputtrue + \ifpcol@textonly + \@cons\pcol@pages{{\@currbox}} + \else + \@cons\pcol@pages\@currbox + \fi + \fi\fi + \ifvoid\@outputbox\else + \@outputpage \global\advance\pcol@basepage\@ne + \fi} + +\def\pcol@startcolumn{% + \global\@colroom\@colht + \@tryfcolumn\@deferlist + \if@fcolmade\else \pcol@trynextcolumn \fi +} +\def\pcol@trynextcolumn{\begingroup + \let\reserved@b\@deferlist + \global\let\@deferlist\@empty + \let\@elt\@scolelt + \reserved@b + \endgroup} + + + +\let\pcol@latex@specialoutput\@specialoutput +\def\pcol@op@start{-10010} +\def\pcol@op@switch{-10011} +\def\pcol@op@flush{-10012} +\def\pcol@op@clear{-10013} +\def\pcol@op@end{-10014} +\def\pcol@specialoutput{% + \ifnum\outputpenalty=\pcol@op@start\relax + \let\reserved@a\pcol@output@start + \else\ifnum\outputpenalty=\pcol@op@switch\relax + \let\reserved@a\pcol@output@switch + \else\ifnum\outputpenalty=\pcol@op@flush\relax + \let\reserved@a\pcol@output@flush + \else\ifnum\outputpenalty=\pcol@op@clear\relax + \let\reserved@a\pcol@output@clear + \else\ifnum\outputpenalty=\pcol@op@end\relax + \let\reserved@a\pcol@output@end + \else \let\reserved@a\pcol@latex@specialoutput + \fi\fi\fi\fi\fi + \ifx\reserved@a\pcol@latex@specialoutput\else + \global\setbox\@holdpg\vbox{\unvbox\@holdpg \unvbox\@cclv + \setbox\@tempboxa\lastbox \unskip}% + \outputpenalty-\@M + \fi + \reserved@a} + +\def\pcol@output@start{% + \pcol@makenormalcol + \global\advance\@colht-\ht\@outputbox + \global\advance\@colht-\dp\@outputbox + \global\@colroom\@colht + \@next\@currbox\@freelist{\global\setbox\@currbox\box\@outputbox}\pcol@ovf + \global\count\@currbox\c@page \global\dimen\@currbox\@colht + \@tempdima\dp\@currbox \@tempskipa\z@ + \ifdim\ht\@currbox=\z@ \ifdim\dp\@currbox=\z@ + \@tempskipa\topskip + \fi\fi + \global\skip\@currbox\@tempskipa \global\topskip\@tempskipa + \xdef\pcol@currpage{\@elt\@currbox}\global\let\pcol@pages\@empty + \global\pcol@page\z@ \global\pcol@maxpage\z@ \global\pcol@basepage\z@ + \global\let\@dbldeferlist\@deferlist + \global\let\@deferlist\@empty + \pcol@floatplacement +% may fix begin + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \@next\@currbox\@freelist{\global\setbox\@currbox\vbox{% + \ifdim\topskip=\z@ \hrule\@height\z@\@width\z@ +% \kern-\@tempdima + \fi}} +% may fix end + \pcol@ovf + \pcol@setcurrcolnf + \global\count\@currbox\z@ + \global\dimen\@currbox\@colroom + \advance\pcol@currcol\@ne}% + \global\pcol@currcol\z@ + \pcol@getcurrcol + \@cons\@freelist\@currbox + \unvbox\@currbox} + +\def\pcol@makenormalcol{% + \ifvoid\footins \setbox\@outputbox\box\@holdpg + \else + \setbox\@outputbox\vbox{ + \boxmaxdepth\@maxdepth + \unvbox\@holdpg + \vskip\skip\footins + \color@begingroup + \normalcolor + \footnoterule + \unvbox\footins + \color@endgroup}% + \fi + \let\@elt\relax + \xdef\@freelist{\@freelist\@midlist}% + \global\let\@midlist\@empty + \@combinefloats} + +\def\pcol@floatplacement{% + \global\@mparbottom\z@ \global\@textfloatsheight\z@ + \@floatplacement} + + + +\def\pcol@output@switch{% + \@next\@currbox\@freelist{\global\setbox\@currbox\box\@holdpg}\pcol@ovf + \ifvoid\footins + \def\pcol@currfoot{\voidb@x}% + \else + \@next\pcol@currfoot\@freelist{% + \global\setbox\pcol@currfoot\box\footins + \global\count\pcol@currfoot\count\footins + \global\dimen\pcol@currfoot\dimen\footins + \global\skip\pcol@currfoot\skip\footins}\pcol@ovf + \fi + \ifnum\pcol@currcol=\z@ \pcol@setpageno \fi + \pcol@setcurrcol + \global\count\@currbox\pcol@page + \global\dimen\@currbox\@colroom + \@tempswafalse + \ifpcol@sync + \@tempswatrue + \if@nobreak + \@temptokena\everypar + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol \@nobreaktrue + \everypar\@temptokena + \pcol@setcurrcol + \advance\pcol@currcol\@ne}% + \fi\fi + \ifpcol@clear \@tempswatrue \fi + \if@tempswa \pcol@sync \fi + \ifpcol@clear\else \pcol@restartcolumn \fi} + +\def\pcol@restartcolumn{% + \global\pcol@currcol\pcol@nextcol + \pcol@getcurrcol + \global\pcol@page\count\@currbox + \global\@colroom\dimen\@currbox + \@cons\@freelist\@currbox + \pcol@getcurrpage + \ifvoid\pcol@currfoot\else + \insert\footins{\unvbox\pcol@currfoot}\@cons\@freelist\pcol@currfoot + \fi + \unvbox\@currbox + \if@nobreak \nobreak \else \addpenalty\interlinepenalty \fi} + +\def\pcol@getcurrcol{% + \expandafter\expandafter\expandafter\pcol@igetcurrcol + \csname pcol@col\number\pcol@currcol\endcsname} +\def\pcol@igetcurrcol#1#2#3#4#5#6#7#8{% + \def\@currbox{#1}\def\pcol@currfoot{#2}\global\pcol@prevdepth#3sp\relax + \gdef\@toplist{#4}\gdef\@midlist{#5}\gdef\@botlist{#6}\gdef\@deferlist{#7}% + \pcol@iigetcurrcol#8} +\def\pcol@iigetcurrcol#1#2#3#4#5#6#7#8#9{% + \global\@textfloatsheight#1sp\relax \global\@mparbottom#2sp\relax + \global\@topnum#3\relax \global\@toproom#4sp\relax + \global\@botnum#5\relax \global\@botroom#6sp\relax + \global\@colnum#7\relax + \global\@afterindentfalse \@nobreaktrue + \ifcase#8 + \@nobreakfalse \or + \global\@afterindenttrue \else + \relax + \fi + \global\everypar{#9}} +\def\pcol@setcurrcol{{\let\@elt\relax + \@tempcnta\if@nobreak\if@afterindent\@ne\else\tw@\fi\else\z@\fi + \expandafter\xdef\csname pcol@col\number\pcol@currcol\endcsname{% + {\@currbox}{\pcol@currfoot}{\number\pcol@prevdepth}% + {\@toplist}{\@midlist}{\@botlist}{\@deferlist}% + {{\number\@textfloatsheight}{\number\@mparbottom}% + {\number\@topnum}{\number\@toproom}{\number\@botnum}{\number\@botroom}% + {\number\@colnum}{\number\@tempcnta}{\the\everypar}}}}} +\def\pcol@setcurrcolnf{\def\pcol@currfoot{\voidb@x}\pcol@setcurrcol} +\def\pcol@getcurrfoot{% + \ifvoid\pcol@currfoot \global\setbox\footins\box\voidb@x + \else + \global\setbox\footins\box\pcol@currfoot + \global\count\footins\count\pcol@currfoot + \global\dimen\footins\dimen\pcol@currfoot + \global\skip\footins\skip\pcol@currfoot + \fi} + + + +\def\pcol@sync{% + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do\pcol@flushcolumn + \pcol@outputpage\@ne + \pcol@getcurrpinfo\@currbox{\global\c@page}{\global\@colht}{\global\topskip}% + \@tempdima-\maxdimen \@tempdimb-\maxdimen \pcol@colht-\maxdimen + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do\pcol@measurecolumn + \ifdim\@tempdima<\z@\else + \advance\@tempdimb\@tempdima + \@tempswafalse + \ifdim\@tempdimb<\@colht \ifpcol@clear\else + \@tempswatrue + \fi\fi + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do\pcol@synccolumn + \fi + \global\pcol@syncfalse} + +\def\pcol@flushcolumn{% + \pcol@getcurrcol + \ifnum\count\@currbox<\pcol@maxpage + \pcol@page\count\@currbox + \setbox\@cclv\box\@currbox + \pcol@getcurrfoot + \ifvoid\pcol@currfoot\else \@cons\@freelist\pcol@currfoot \fi + \pcol@getcurrpage + \@makecol + \global\setbox\@currbox\box\@outputbox + \expandafter\@cons\csname pcol@shipped\number\pcol@currcol\endcsname + \@currbox + \advance\pcol@page\@ne + \ifx\@deferlist\@empty\else + \@whilenum\pcol@page<\pcol@maxpage\do{% + \pcol@getcurrpage + \@makefcolumn\@deferlist + \if@fcolmade + \@next\@currbox\@freelist{\global\setbox\@currbox\box\@outputbox}% + \pcol@ovf + \expandafter\@cons + \csname pcol@shipped\number\pcol@currcol\endcsname\@currbox + \fi + \advance\pcol@page\@ne}% + \fi + \@next\@currbox\@freelist{\global\setbox\@currbox\vbox{}}\pcol@ovf + \pcol@floatplacement \global\@colroom\@colht + \ifx\@deferlist\@empty\else + \pcol@getcurrpage \global\@colroom\@colht + \pcol@trynextcolumn + \fi + \pcol@setcurrcolnf + \global\count\@currbox\pcol@page + \global\dimen\@currbox\@colroom + \fi %\ifnum\count\@currbox<\pcol@maxpage + \advance\pcol@currcol\@ne} + +\def\pcol@magicpenalty{12345} +\def\pcol@measurecolumn{% + \pcol@getcurrcol + \@tempswatrue + \setbox\@tempboxa\vbox{\penalty\pcol@magicpenalty + \unvcopy\@currbox \xdef\@gtempa{\number\lastpenalty}}% + \ifnum\@gtempa=\pcol@magicpenalty\relax \ifvoid\pcol@currfoot + \ifx\@toplist\@empty \ifx\@botlist\@empty + \@tempswafalse \skip\@currbox\z@ \pcol@prevdepth\z@ \pcol@setcurrcol + \fi\fi\fi\fi + \if@tempswa + \dimen@ii\ht\@currbox \advance\dimen@ii\dp\@currbox +% must fix begin + \ifnum\@gtempa=\pcol@magicpenalty\relax + \global\setbox\@currbox\vbox{\hrule\@height\z@ \kern-\topskip} + \pcol@prevdepth\z@ \pcol@setcurrcol + \fi +% must fix end + \dimen@\z@ \pcol@addflhd\@toplist\topfigrule + \skip\@currbox\dimen@ \advance\dimen@ii\dimen@ + \ifdim\dimen@ii>\@tempdima + \@tempdima\dimen@ii \@tempdimc\pcol@prevdepth \fi + \ifvoid\pcol@currfoot \dimen@\z@ + \else + \dimen@\ht\pcol@currfoot \advance\dimen@\dp\pcol@currfoot + \advance\dimen@\skip\pcol@currfoot + \fi + \pcol@addflhd\@botlist\botfigrule + \ifdim\dimen@>\@tempdimb \@tempdimb\dimen@ \fi + \advance\dimen@\dimen@ii + \ifdim\dimen@>\pcol@colht + \pcol@colht\dimen@ + \@pagedp\pcol@prevdepth + \ifvoid\pcol@currfoot\else \@pagedp\dp\pcol@currfoot \fi + \ifx\@botlist\@empty\else \@pagedp\z@ \fi + \fi + \fi %\if@tempswa + \advance\pcol@currcol\@ne} +\def\pcol@addflhd#1#2{\ifx#1\@empty\else + \let\@elt\pcol@hdflelt + #1\advance\dimen@-\floatsep \advance\dimen@\textfloatsep + \setbox\@tempboxa\vbox{#2}\advance\dimen@\ht\@tempboxa + \let\@elt\relax + \fi} +\def\pcol@hdflelt#1{\advance\dimen@\ht#1\advance\dimen@\dp#1% + \advance\dimen@\floatsep} + +\def\pcol@synccolumn{% + \pcol@getcurrcol + \if@tempswa + \@tempdimb\@tempdima \advance\@tempdimb-\@tempdimc + \advance\@tempdimb\pcol@prevdepth \advance\@tempdimb-\skip\@currbox + \global\setbox\@currbox\vbox{\vbox to\@tempdimb{\unvbox\@currbox \vfil}}% + \else + \global\setbox\@currbox\vbox{\unvbox\@currbox \vfill \penalty-\@M}% + \fi + \global\@topnum\z@ \pcol@setcurrcol + \advance\pcol@currcol\@ne} + + + +\def\pcol@output@end{% + \pcol@makelastpage\pcol@colht + \@tempswafalse + \if@fcolmade + \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox \vfil}% + \@outputpage %\c@page=OK + \pcol@flushfloats + \global\pcol@prevdepth\z@ + \@tempswatrue + \else\ifdim\pcol@colht<\z@ + \unvbox\@outputbox + \global\pcol@prevdepth\z@ + \else + \topskip\z@ \box\@outputbox + \global\pcol@prevdepth\@pagedp %\c@page=OK + \fi\fi + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol \@cons\@freelist\@currbox + \advance\pcol@currcol\@ne}% + \global\@colht\textheight + \global\@colroom\textheight + \global\let\@deferlist\@dbldeferlist \gdef\@dbldeferlist{}% + \pcol@floatplacement + \if@tempswa \@startcolumn \fi} + +\def\pcol@output@flush{% + \pcol@makelastpage\@colht + \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}% + \@outputpage %\c@page=OK + \global\@colht\textheight + \pcol@freshpage} + +\def\pcol@output@clear{% + \pcol@makelastpage\@colht + \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}% + \@outputpage %\c@page=OK + \global\advance\pcol@page\@ne + \pcol@flushfloats %\c@page=OK + \global\@colht\textheight + \begingroup + \@dblfloatplacement + \@makefcolumn\@dbldeferlist + \@whilesw\if@fcolmade\fi{\@outputpage + \@makefcolumn\@dbldeferlist}% + \endgroup %\c@page=OK + \pcol@freshpage} + +\def\pcol@makelastpage#1{% + \pcol@cleartrue \pcol@output@switch \pcol@clearfalse + \pcol@getcurrpinfo\@currbox{\global\c@page}{\global\@colht}\@tempskipa + \global\@fcolmadefalse + \setbox\@outputbox\vbox{% + \ifpcol@textonly\else + \@cons\@freelist\@currbox + \unvbox\@currbox + \fi + \ifdim#1<\z@ + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol + \ifx\@deferlist\@empty\else \global\@fcolmadetrue \fi + \advance\pcol@currcol\@ne}% + \else + \hb@xt@\textwidth{% + \let\pcol@hfil\relax \@colht#1\relax + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol + \ifx\@deferlist\@empty\else \global\@fcolmadetrue \fi + \ifvoid\pcol@currfoot\else \@cons\@freelist\pcol@currfoot \fi + \setbox\@cclv\box\@currbox + \pcol@getcurrfoot + \@makecol + \pcol@hfil \hb@xt@\columnwidth{\box\@outputbox\hss}% + \let\pcol@hfil\hfil + \pcol@setcurrcolnf + \advance\pcol@currcol\@ne}} + \fi}} + +\def\pcol@flushfloats{% + \@whilesw\if@fcolmade\fi{% + \setbox\@outputbox\vbox{\hb@xt@\textwidth{% + \let\pcol@hfil\relax + \@tempswafalse + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol + \@makefcolumn\@deferlist + \pcol@hfil \hb@xt@\columnwidth{\if@fcolmade \box\@outputbox \fi \hss}% + \ifx\@deferlist\@empty\else \@tempswatrue \fi + \let\pcol@hfil\hfil + \pcol@setcurrcolnf + \advance\pcol@currcol\@ne}% + \global\@fcolmadefalse + \if@tempswa \global\@fcolmadetrue \fi}}% + \@outputpage}} + +\def\pcol@freshpage{% + \global\pcol@page\z@ \global\pcol@maxpage\z@ \global\pcol@basepage\z@ + \gdef\pcol@pages{}\gdef\pcol@currpage{}% + \pcol@startpage \pcol@colht\@colht + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \pcol@getcurrcol \pcol@page\z@ \@colroom\pcol@colht + \pcol@getcurrpage + \pcol@floatplacement + \pcol@startcolumn + \@whilesw\if@fcolmade\fi{\pcol@opcol \pcol@startcolumn}% + \global\setbox\@currbox\vbox{}% + \global\count\@currbox\pcol@page \global\dimen\@currbox\@colroom + \pcol@setcurrcolnf + \advance\pcol@currcol\@ne}% + \global\pcol@currcol\pcol@nextcol + \pcol@restartcolumn} + + + +\def\pcol@invokeoutput#1{% + \penalty-\@Miv \@tempdima\prevdepth \vbox{}% + \global\pcol@prevdepth\@tempdima \penalty#1\relax + \prevdepth\pcol@prevdepth} + +\def\paracol#1{\par + \global\pcol@ncol#1\relax + \global\columnwidth\textwidth + \@tempdima\columnsep \multiply\@tempdima\pcol@ncol + \advance\@tempdima-\columnsep + \global\advance\columnwidth-\@tempdima \global\divide\columnwidth\pcol@ncol + \global\hsize\columnwidth \global\linewidth\columnwidth + \global\@twocolumntrue \global\@firstcolumntrue \col@number\pcol@ncol + \global\let\pcol@counters\cl@@ckpt + \let\@elt\pcol@remctrelt \pcol@gcounters + \let\@elt\pcol@thectrelt \pcol@counters + \let\@elt\relax + \let\clearpage\pcol@clearpage \pcol@topskip\topskip + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \expandafter\gdef\csname pcol@shipped\number\pcol@currcol\endcsname{}% + \pcol@savecounters \advance\pcol@currcol\@ne}% + \output{\pcol@output}% + \pcol@invokeoutput\pcol@op@start + \pcol@nextcol\z@ + \def\column{\pcol@defcolumn\nthcolumn{0}} + \@namedef{column*}{\pcol@defcolumn\@nameuse{nthcolumn*}{0}} + \@ifnextchar[%] + \pcol@mctext\relax} + +\def\pcol@gcounters{\@elt{page}} +\def\pcol@remctrelt#1{% + \expandafter\let\expandafter\reserved@a\csname cl@#1\endcsname + \expandafter\let\csname pcol@cl@#1\endcsname\reserved@a + \expandafter\ifx\csname c@#1\endcsname\c@page\else + \@namedef{cl@#1}{\pcol@stepcounter{#1}}% + \fi + \def\reserved@a{#1}\let\reserved@b\pcol@counters + \global\let\pcol@counters\@empty + {\let\@elt\pcol@iremctrelt \reserved@b}} +\def\pcol@iremctrelt#1{% + \def\reserved@b{#1}% + \ifx\reserved@a\reserved@b\else \@cons\pcol@counters{{#1}}\fi} +\def\pcol@thectrelt#1{% + \expandafter\let\expandafter\reserved@a\csname the#1\endcsname + \expandafter\let\csname pcol@thectr@#1\endcsname\reserved@a + \expandafter\let\expandafter\reserved@a\csname pcol@thectr@#10\endcsname + \ifx\reserved@a\relax\else + \expandafter\let\csname the#1\endcsname\reserved@a + \fi} + +\def\pcol@mctext[#1]{% + \@tempcnta\pcol@nextcol\relax + \global\pcol@synctrue \pcol@nextcol\z@ + \pcol@switchcol + \begingroup + \hsize\textwidth \col@number\@ne #1\par + \expandafter\global\expandafter\everypar\expandafter{\the\everypar}% + \endgroup + \pcol@nextcol\@tempcnta \global\pcol@synctrue \pcol@switchcol} + +\def\pcol@switchcol{% + \pcol@savecounters + \pcol@invokeoutput\pcol@op@switch + \ifnum\pcol@currcol=\z@ \global\@firstcolumntrue + \else \global\@firstcolumnfalse + \fi + \let\@elt\pcol@setctrelt + \csname pcol@counters\number\pcol@currcol\endcsname + \let\@elt\relax} + +\def\pcol@savecounters{\begingroup + \global\let\@gtempa\@empty + \let\@elt\pcol@savectrelt \pcol@counters + \let\@elt\relax + \expandafter\xdef\csname pcol@counters\number\pcol@currcol\endcsname{% + \@gtempa}% + \endgroup} +\def\pcol@savectrelt#1{\@cons\@gtempa{{#1}{\number\csname c@#1\endcsname}}} + +\def\pcol@setctrelt#1#2{% + \setcounter{#1}{#2}% + \expandafter\ifx\csname pcol@thectr@#1\number\pcol@currcol\endcsname\relax + \expandafter\let\expandafter\reserved@a\csname pcol@thectr@#1\endcsname + \else + \expandafter\let\expandafter\reserved@a + \csname pcol@thectr@#1\number\pcol@currcol\endcsname + \fi + \expandafter\let\csname the#1\endcsname\reserved@a} + +\def\pcol@stepcounter#1{\begingroup + \let\@elt\@stpelt \csname pcol@cl@#1\endcsname + \pcol@currcol\z@ \@whilenum\pcol@currcol<\pcol@ncol\do{% + \let\@elt\pcol@stpldelt \csname pcol@counters\number\pcol@currcol\endcsname + \let\@elt\pcol@stpclelt \csname pcol@cl@#1\endcsname + \pcol@savecounters + \advance\pcol@currcol\@ne}% + \endgroup} +\def\pcol@stpldelt#1#2{\csname c@#1\endcsname#2\relax} +\def\pcol@stpclelt#1{\csname c@#1\endcsname\z@} + +\def\definethecounter#1#2#3{\@namedef{pcol@thectr@#1#2}{#3}} +\def\globalcounter#1{\@cons\pcol@gcounters{{#1}}} + +\def\endparacol{\par + \pcol@nextcol\z@ \pcol@switchcol + \pcol@invokeoutput\pcol@op@end + \global\columnwidth\textwidth + \global\hsize\columnwidth + \global\linewidth\columnwidth + \global\@twocolumnfalse + \global\topskip\pcol@topskip} + +\def\switchcolumn{\par + \@tempcnta\pcol@currcol \advance\@tempcnta\@ne + \ifnum\@tempcnta<\pcol@ncol\else \@tempcnta\z@ \fi + \@ifnextchar[%] + \pcol@switchcolumn{\pcol@switchcolumn[\@tempcnta]}} +\def\pcol@switchcolumn[#1]{% + \pcol@nextcol#1\relax + \ifnum#1<\pcol@ncol\else + \PackageError{paracol}{% + Column number \number#1 must be less than\number\pcol@ncol}\@eha + \pcol@nextcol\z@ + \fi + \@ifstar\pcol@iswitchcolumn\pcol@switchcol} +\def\pcol@iswitchcolumn{% + \global\pcol@synctrue + \@ifnextchar[%] + \pcol@mctext\pcol@switchcol} + +\def\pcol@defcolumn{% + \gdef\column{\switchcolumn\relax}% + \global\@namedef{column*}{\switchcolumn*}} +\def\nthcolumn#1{\switchcolumn[#1]\relax} +\@namedef{nthcolumn*}#1{\switchcolumn[#1]*} +\def\leftcolumn{\switchcolumn[0]\relax} +\@namedef{leftcolumn*}{\switchcolumn[0]*} +\def\rightcolumn{\switchcolumn[1]\relax} +\@namedef{rightcolumn*}{\switchcolumn[1]*} + +\let\endcolumn\par +\expandafter\let\csname endcolumn*\endcsname\par +\let\endnthcolumn\par +\expandafter\let\csname endnthcolumn*\endcsname\par +\let\endleftcolumn\par +\expandafter\let\csname endleftcolumn*\endcsname\par +\let\endrightcolumn\par +\expandafter\let\csname endrightcolumn*\endcsname\par + +\def\flushpage{\par + \pcol@nextcol\pcol@currcol + \pcol@invokeoutput\pcol@op@flush} +\def\pcol@clearpage{\par + \pcol@nextcol\pcol@currcol + \pcol@invokeoutput\pcol@op@clear} + -- cgit v1.2.3