我怕用纯文字讲不清楚,所以就用下述javascript伪代码的方式给出我想实现的算法。 还是先用文字描述一下吧。我现在想实现类似期刊的密排板式,就是根据每篇文章排到最后一页的内容消耗的版心高度百分比 $h$ ,来判断当前页和下一页的排版行为。 具体而言如下: 如果 $h > 0.5$ 则该尾页内容允许排在当前页;-------(1) 否则,需要判断前文是否有适当的空位可容纳该尾页内容, --若有,则将该尾页内容前移至可容纳页;-------(2) --若无,则将该尾页内容底部对齐,并**本页**顶部继续排版下一篇文章-------(3) 其中情形(3)的效果图如下 ![](https://pics.latexstudio.net/data/images/202004/3f65b5fd12367d6.png) 如果上述文字描述得不够清楚,可以参考一下下面算法的伪代码 ```javascript var 剩余空间队列 = [] // 一个保存每篇文章剩余空间的数据结构 const TEXT_HEIGHT = 15 // 该数值是模拟,届时在程序中直接由\textheight给定 const 文章库 = [file('article1.tex'), file('article2.tex'), ...] // 届时在程序中对应\input{article1.tex}... function 找可容纳页(已用空间占比) { for (剩余空间对象 in 剩余空间队列) { let 其他文章剩余空间 = 1 - 剩余空间对象.height if 其他文章剩余空间 - 0.1 < 已用空间占比 < 其他文章剩余空间: return 剩余空间对象.page } // for return 0 } // 找可容纳页 for (文章 in 文章库) { let 排好的文章 = 从当前页面顶部开始排版(文章) let 尾页内容 = 最后一页的内容(排好的文章) let 已用空间占比 = 尾页内容.已用高度 / TEXT_HEIGHT if (已用空间占比 > 0.9) newpage() // \newpage命令 else if (已用空间占比 > 0.5) { let height = 剩余纵向空间(尾页内容) // 百分比 剩余空间队列.push({ 'height': height, 'filename': 文章.文件名, 'page': 尾页内容.page }) newpage() } // else if else { // 已用空间占比 < 0.5 let page = 找可容纳页(已用空间占比) if (page > 0) { 将内容移至指定文章页底部(尾页内容, page) /* 忽略可能带来的额外的纵向间距,这个移动只能向前移,势必会改动已排好的页面, * 但tex编译器不会回溯修改已排好的页面,所以此处允许参考交叉引用或参考文献 * 的方式设计算法,生成临时文件,并进行2-4次编译。即将 * last_page_content的内容先写入临时文件,在下一次编译的时候才写入指定页page */ newpage() } // if else 将内容移至本页底部(尾页内容) // 忽略可能带来的额外的纵向间距 } // else } // for ``` 鉴于网站的贴代码功能还没成熟,开头的空格缩进会被吃掉,所以我又贴了一份代码去[http://paste.ubuntu.com](http://paste.ubuntu.com) 。链接自2020年4月12日起一年内有效。 [javascript版本](https://paste.ubuntu.com/p/pq4FNCd7j3/ "javascript版本") [python版本](https://paste.ubuntu.com/p/tjsktSZYXp/ "python版本")

3 回答3

0
不懂 javascript
  • 回复 undefined :我另外提交了一份伪代码去 https://paste.ubuntu.com/p/tjsktSZYXp/ 和 https://paste.ubuntu.com/p/pq4FN – zhaochongbin 2020-04-12 22:18 回复
  • 回复 undefined :嗯,理解……其实大致能知道你想做什么,但我没见过有用 latex 做它的。你可以问问群主他以前的业务里是否做过这个,另外可以把网站代码块缩进功能反馈给他 – 啸行 2020-04-12 21:52 回复
  • 问题已补充完整。本来我想用python的,但是网站的代码块功能直接忽视掉开头的空格和缩进,用python会产生歧义,所以就没用了 – zhaochongbin 2020-04-12 21:50 回复
0
可以做。请网站修复「代码中的行首空格被吃掉」的问题
  • 另外提交了一份伪代码去 https://paste.ubuntu.com/p/tjsktSZYXp/ 和 https://paste.ubuntu.com/p/pq4FNCd7j3/ – zhaochongbin 2020-04-12 22:17 回复
0
记得林前辈好像有一个计算浮动体的例子吧,在搜一下。

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。