我的目标是制作一个 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
...
看起来像