大格式文档上的 Multicol

大格式文档上的 Multicol

我正在尝试创建一个海报大小的文档(24"x36"、27"x40"),其中的代码列在 10-15 列中。我尝试过multicolsmulticols*环境,但一旦扩展在一个方向或另一个方向上变得太大,两者最终都会失败 -multicols当列的高度需要超过约 18" 时会失败,multicols*当填充的列数超过约 14" 的宽度时会失败。

失败模式是填满第一页并溢出到第二页(或多页),并且除最后一页之外的所有页都会以相同的方式失败 - 通常最后一页不会失败,因为内容足够小,可以适应上述限制。

这是一个multicols*失败的例子:

multicols* 你怎么了?!

这是一个失败的例子multicols

multicols 你怎么了?!

如果我能遵守这些神秘的限制,比如减小字体大小,布局就令人满意。我只是希望能够填满更多的页面。

在此处输入图片描述

这些尺寸对于来说是否太大了multicols

更新:感谢您在评论中提供的早期帮助。以下是包含此问题的最小文档:

\documentclass{article}
\usepackage{tikz}

\usepackage{fp}
\usetikzlibrary{calc}

\usepackage[showframe]{geometry}
\geometry{paperwidth=24in,paperheight=36in,margin=2cm}

\usepackage{multicol}

% make a label command
\newcommand{\lbl}[1]{\tikz[remember picture,inner sep=0pt] \node(#1) {};}%
\newcommand{\addr}[1]{\lbl{ADDR_#1}}%
\newcommand{\data}[1]{\texttt{#1}}%
\newcommand{\op}[1]{\texttt{#1}}%

\begin{document}
\noindent
\begin{multicols}{13}

{\ttfamily\fontsize{4.5}{5}\selectfont\setlength{\parindent}{0cm}

% new block
{\hspace*{-2em}DATA\_00000107:}\\
{\hspace*{-2em}CATCH\_00000200:}\\
\addr{0x200}nop\\
bra.b \#-\$4\lbl{JMP_0x202}\\

% new block
{\hspace*{-2em}TRAP\_0000020c:}\\
\addr{0x20c}rte\\
{\hspace*{-2em}MAIN:}\\
\addr{0x20e}tst.l (\#\$a10008).l\\
bne.b \#\$6\lbl{JMP_0x214}\\
tst.w (\#\$a1000c).l\\
{\hspace*{-2em}LABEL\_0000021c:}\\
\addr{0x21c}bne.b \#\$7c\lbl{JMP_0x21c}\\
lea (\#\$7c, PC), A5\\

% a real listing has >10k additional lines

}
\end{multicols}
\end{document}

正如@ulrike-fischer 指出的那样,我确实遇到了Dimension too large.错误:

! Dimension too large.
\set@mult@vsize ...dima \vsize \col@number \vsize 
                                                  \advance \vsize -\@tempdim...

l.20 
   
? r
OK, entering \nonstopmode...

Underfull \hbox (badness 10000) in paragraph at lines 23--26


Underfull \hbox (badness 10000) in paragraph at lines 27--36

! Dimension too large.
\endmulticols ...@botmark }\else \ifdim \pagegoal 
                                                  =\maxdimen \ifvoid \colbre...

l.40 \end{multicols}
                  
[1{/opt/local/var/db/texmf/fonts/map/pdftex/updmap/pdftex.map}]
(./sample-listing.aux))

正如@david-carlisle所建议的,我确实缩小了文档的大小并适当缩放了所有内容,现在我可以生成没有错误的PDF。我认为这暂时可以让我应付过去。使用如此小的尺寸工作很奇怪,但最终输出似乎缩放正确。

在此处输入图片描述

如果我按照工作原理multicol操作,文本首先会呈现为全部在单列中,36 英寸高位于\maxdimen7ᵀᴴ 列的某个位置。我没有想过“如何操作”。是否multicol*也需要进行此计算?我想它需要完整的维度来找到列中断最终出现的位置,以避免“完整”列的底部参差不齐?

的值是否存在技术限制,\maxdimen或者如何配置为更高的值?

再次感谢。这绝对让我更接近我想要的最终输出效果。

答案1

您可以将文档设为四分之一大小,然后\mag按最终尺寸缩放

pdfinfo 确认页面宽度为 24 英寸(1728bp),尽管指定geometry6in

$ pdfinfo file.pdf 
...
Page size:      1728 x 2592 pts

在此处输入图片描述

\mag4000
\documentclass{article}
\usepackage{lmodern}
\usepackage[papersize={6in,9in},margin=5pt]{geometry}
\usepackage{multicol}
\begin{document}

\fontsize{1.2pt}{1.3pt}\selectfont
\begin{multicols}{15}

 \loop
  \ifnum\value{enumi}<1500
   \stepcounter{enumi}
   \roman{enumi}\par\Roman{enumi}\par\arabic{enumi}\par
   \roman{enumi}\par\Roman{enumi}\par\arabic{enumi}\par
  \repeat
\end{multicols}
\end{document}

答案2

TeX 基元\setbo0=\vbox{...}能够构建\vbox任意高度的。然后,您可以使用 TeX 基元\vsplit0读取累积材料的一部分并将其设置到列中。\maxdimen使用这些基元时没有限制。

我尝试用你的文档进行此操作。我仅将你的\begin{multicols}{13}文档 替换为\setbox0=\vbox\bgroup \hsize=3cm,将\end{multicols}替换为\egroup。然后我向你的列中添加了一个材料:

\count0=1
\loop 
   \the\count0 \par 
   \advance\count0 by1 
   \ifnum\count0<10000 \repeat
   % a real listing has >10k additional lines

最后,我在 后面添加了以下例程\endgroup。它将累积的材料打印到列中:

\hbox{\count0=1
   \loop
      \vsplit0 to\vsize
      \advance\count0 by1
      \ifnum\count0<20 \repeat
}

没有\maxdimen达到限制,打印了 20 个非常长的列。

相关内容