对于为期一年的计算机科学毕业设计,我必须做一些“原创研究”。我仍然不完全确定这意味着什么,但我突然想到,也许我可以做研究,同时帮助我真正相信的唯一开源项目。
TeX 或 LaTeX 中是否存在一些未解决的问题,我可以在一年内尝试解决它们?
如果可能的话,每个答案对应一个问题。(请注意,您仍然可以发布多个答案。)
澄清一下,我不是寻找能够制作出很酷的软件包的想法。我并不想在 CTAN 上添加一些漂亮的软件包;这还不够基础。我甚至也不在寻找高规模的编程项目;那些都是你可以直接完成的东西(BibLaTeX 样式的编辑器可能除外;我知道那是一件大事)。我正在寻找能够
- 对问题有(或需要)明确的定义
- 基本上适用于核TeX 的排版(澄清一下,我不是期待为此重新编码 TeX,但这并非不可能。无论谁做,‘河流’问题都可能导致这种情况。)
- 属于本科/研究生最后一年的范围。(我上的是一所奇怪的学校;我们在本科阶段进行了一些相当惊人的研究。参见该项目的官方规范,记住每个部门都有自己的特色。)
我最终决定以“重新评估和改进 Knuth-Plass 以适应现代硬件”作为我的提案,我的顾问对此很感兴趣(至少在意识到我不想延长语言TeX)。所以我开始研究,然后,瞧,它已被查看!(这并不奇怪,但绝对令人沮丧。)也许这个算法可以在较新的 TeX 引擎之一中实现,但这超出了 CS 研究的范围。(例如,它可以用于避免河流和堆栈,改善分页等。)感谢您的所有建议!
答案1
我不知道这些是否是未解决的问题,但既然您正在寻找顶点项目,您可能有兴趣探索 TeX 的基本算法方面是否可以改进。
换行算法。目前的换行算法是所有换行软件都效仿的黄金标准,但它是换行的最佳方法吗?Knuth 和 Plass 的算法具体说明了过早的优化选择(双关语!)例如将分页符与换行符分开,根据行的粗糙度分配不良性但不考虑河流等。从那时起唯一真正的进步是字符突出,据我所知,它仍然遵循相同的基本换行算法。现在不要误会我的意思。我并不是说这些选择是错误的。但很多这样的选择都是因为当时的计算资源无法真正处理任何更复杂的东西。但现在我们的计算机比 70 年代的计算机强大 1000 倍,应该可以探索其他选项,看看是否可以通过考虑更多因素来改进换行算法,尤其是分页、脚注、旁注和浮动。哪个更好,完美的换行符但巨大的垂直空间来平衡页面,还是略微不完整的行但没有垂直空间?在当前框架中无法解决这些问题(如果我错了,请纠正我)。
自动打破显示方程。目前,该
breqn
软件包实现了 Michael J Downes 的想法,但据我所知,算法方面不如文本换行那么容易理解。是否可以将显示方程的换行视为优化问题,并根据惩罚和不良程度确定解决方案?解析自然数学。经常有人问是否可以自动翻译
<=
成\le
、sin(x/y)
到\sin\left(\frac{x}{y}\right)
等。虽然可以使用 TeX 和 LuaTeX(例如calcmath
ConTeXt 中的模块)在不同程度上实现这一点,但我还没有看到任何尝试理解如何在没有标记的情况下解析数学的工作。鉴于当前 NLP 技术非常复杂,应该可以做得比简单的启发式方法更好,以解析自然数学。
答案2
我认为解决河流问题可能相当有趣。我不能 100% 确定这个项目目前处于什么状态。
但这将是对 TeX 功能的巨大改进(我认为这是一个非常有趣的数学挑战)。@Raphink 对此进行了深入研究,如果对此感兴趣,您可以考虑与他交谈。
答案3
在固定基线网格中排版。
我知道有一些软件包可以解决这个问题,但要让网格上的线条清晰可见,仍然需要大量的手动编辑。如果有一个完全自动化的解决方案,支持标题、多列、浮动、脚注、边注等,那就太好了。
这是什么意思?为什么这很重要?
在固定基线网格中排版意味着每一行(或至少是正文的行,有时标题除外)都必须遵循固定且等距的网格,每一页都是如此。如果文本被图形、表格、方程式(标题)或类似内容打断,则此元素周围的间距必须使正文的下一行再次位于网格上。使用固定网格的主要原因是它提高了可读性:页面背面的线条几乎总是透过来,在正面也清晰可见,这或多或少取决于纸张的克重。如果线条没有固定在网格上,背面的线条会干扰正面线条的可见性和可追溯性。
对于这两幅图像,我为后面的诗句使用了相同的设置(颜色和模糊),但你可以看到,你的眼睛可以更好地跟随下面的示例(带有网格),而不是上面的示例。虽然这个例子有点不自然,无法说明我的意思,但它并没有那么夸张……
除此之外,它还有美学方面的原因,特别是在多列布局中。当多列的线条遵循相同的基线网格时,看起来会更好。
对此使用固定网格被认为是好的排版。
答案4
LaTeX(宏)调试器
在一些不可提及的事情中,它可以允许一个人按顺序执行代码,以识别宏参数和内容,从而避免使用\typeout
和\def
-to-\show
进行验证,或者理解有时复杂的追踪功能输出。