从 LaTeX 获取自动生成的换行符和分页符

从 LaTeX 获取自动生成的换行符和分页符

我的目标是制作一个 html 文件,其文本与 LaTeX 生成的 pdf 相同 - html 应代表 pdf 的分页和换行结构:当 pdf 中有一个换行符时,我想在<br>html 中生成一个,当 pdf 中有一个段落时,我想<p>在 html 中生成一个,当 pdf 中有一个新页面时,我想在 html 中生成一条水平线。

处理段落很容易,因为它们是在输入文件中定义的。但换行和分页取决于字体以及文档的宽度和高度(也许还取决于一些我甚至无法想象的其他东西)。

有没有办法让 LaTex 告诉我哪里断行了以及哪里开始新的一页?

答案1

该乳胶:

\documentclass{article}
\showoutput
\usepackage{lipsum}
\begin{document}

\lipsum

\end{document}

生成一个日志文件,显示所有输出的位置:

.....
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 4.
LaTeX Font Info:    ... okay on input line 4.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 4.
LaTeX Font Info:    ... okay on input line 4.

Completed box being shipped out [1]
\vbox(633.0+0.0)x407.0
.\glue 16.0
.\vbox(617.0+0.0)x345.0, shifted 62.0
..\vbox(12.0+0.0)x345.0, glue set 12.0fil
...\glue 0.0 plus 1.0fil
...\hbox(0.0+0.0)x345.0
..\glue 25.0
..\glue(\lineskip) 0.0
......
...\hbox(6.94444+1.94444)x345.0, glue set 0.85849
....\hbox(0.0+0.0)x15.0
....\OT1/cmr/m/n/10 L
....\OT1/cmr/m/n/10 o
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 m
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 p
.......

因此,使用一点 perl(在实际示例中可能需要使其更智能),您可以重新构建文本,添加所请求的行和段落标记:

#!/usr/bin/perl
while(<>){
    chomp();
    if(m@^\.[^ ]* (.)\s*$@){
    print "$1";
    }
    if (m@ligature ([^ ]*)\)\s*$@){
    print "$1";
    }
    if(m@^\.*\\glue ([0-9.]*)@){
    print " " if ($1 > 2);
    }
    print"\n<br>" if (m@\\baselineskip@);
    print"\n<p>" if (m@\\parskip@);

    print "\n\n<hr>\n\n" if (m@Completed box being shipped@);
}

然后perl zz.pl zz.log > zz.html产生:

.....
<br>fau-cibus. Morbi do-lor nulla, male-suada eu, pul-v-inar at, mol-lis ac, nulla. Cur-
<br>abitur auc-tor sem-per nulla. Donec var-ius orci eget risus. Duis nibh mi, congue
<br>eu, ac-cum-san eleifend, sagit-tis quis, diam. Duis eget orci sit amet orci dig-nis-sim
<br>rutrum.
<p>
<br>Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi
<br>auctor lorem non justo. Nam lacus libero, pretium at, lobortis vitae, ultric
...

看起来像

在此处输入图片描述

相关内容