原始问题是:如何在 LaTeX 中获取两列不同宽度的列?
我知道这个老问题:如何创建两列布局,且两列的宽度(和文本)不同?但实际上并不需要双列布局,而只需要边缘处的图片。
其实单独设置列宽并不难,我可以用 LaTeX 手动设置,也可以用flowfram
包来方便设置。但是 columnbreak 处似乎有点奇怪,\hsize
直到新段落才会改变。举个例子:
\documentclass{article}
\usepackage{microtype}
\usepackage{lipsum}
\usepackage{flowfram}
\onecolumntopinarea{static}{0pt}{.3\textwidth}{\textheight}{0pt}{0pt}
\onecolumntopinarea{static}{0pt}{.6\textwidth}{\textheight}{.4\textwidth}{0pt}
\begin{document}
\lipsum
\end{document}
然后我必须进行试运行,\par
在列断点处手动添加,并\noindent
在下一列的开头添加。但我认为它应该是自动的,即使是这种愚蠢的方法。
我知道在 LaTeX 中这可能非常困难。我不熟悉 LaTeX 的输出路径。我只想知道它是否可能的自动完成此操作? 有没有什么新方法可以实现此目的?
我对 ConTeXt 了解不多。不容易在 ConTeXt 中使用可变列宽。但我注意到手册中的一个图元乐趣:
因此,在 MetaPost 的帮助下(或者没有?)这似乎是可能的。
欢迎提供任何信息。
答案1
我不知道如何使用 Lua,但我怀疑你想要的东西在 pdfTeX 中是不可能实现的。正如 Joseph 指出的那样,你不能在段落中间更改一些参数。\hsize
段落末尾有效的参数是在 TeX 段落生成器中使用的参数。
至于分栏符,TeX 会在其“主垂直列表”中累积垂直材料,直到足以填满一页,然后运行输出例程。(这是简化;请参阅TeXbook或者TeX 按主题分类了解详细信息。)这意味着段落已被拆分成宽度的框\hsize
并添加到垂直列表中(以及它们之间的一些胶水以保持基线\baselineskip
分开)。因此,当 TeX 开始决定第一列的断点时,最后一列中将出现的内容已经排版完毕。
编辑:
在评论中,亨德里克询问了滥用输出例程和拆箱的问题。即使忽略了准确找到需要拆箱的材料的难度,我也想不出处理连字符的好方法:
\setbox0\vbox{
\hsize40pt
\rightskip=5pt
\parindent=0pt
hyphen\-ation
}
\setbox0\vbox{
\unvbox0
\global\setbox1\lastbox
\unskip
\unpenalty
\setbox2\lastbox
\global\setbox1\hbox{%
\unhbox2
\unskip
\
\unhbox1
\unskip
\unskip
\unpenalty
}
}
\unhbox1
\bye
这里我们设置框 0 具有已知内容。
\vbox(18.94444+0.0)x40.0 .\hbox(6.94444+1.94444)x40.0 ..\hbox(0.0+0.0)x0.0 ..\tenrm h ..\kern-0.27779 ..\tenrm y ..\tenrm p ..\tenrm h ..\tenrm e ..\tenrm n ..\自由裁量 ..\tenrm - ..\glue(\rightskip) 5.0 .\罚款400 .\glue(\baselineskip) 3.37697 .\hbox(6.67859+0.0)x40.0,胶合组12.77771fil ..\tenrm a ..\tenrm t ..\tenrm 我 ..\tenrm o ..\tenrm n ..\罚款10000 ..\glue(\parfillskip) 0.0 加 1.0fil ..\glue(\rightskip) 5.0
因为我们知道它有两条线,所以我们可以直接将它拉开并将内容塞进盒子 1 中。
\hbox(6.94444+1.94444)x60.5557 .\hbox(0.0+0.0)x0.0 .\tenrm h .\kern-0.27779 .\tenrm y .\tenrm p .\tenrm h .\tenrm e .\tenrm n .\自由裁量 .\tenrm - .\glue 3.33333 加 1.66666 减 1.11111 .\tenrm a .\tenrm t .\tenrm 我 .\tenrm o .\tenrm n
如果这个词没有连字符,这个句子就会起作用,但在这里我们得到的是
“hyphen-ation”