据我所知,LaTeX
首先使段落美观,然后使页面美观。因此,如果分页符恰好出现在带连字符的单词内,LaTeX
则可以更改分页符(如果\brokenpenalty
确实很大或impnattypo
使用包)并将一行或多行放在下一页。但LaTeX
不会再次重建段落以使其看起来不同。
此外,偶数页上的连字符最后一个单词并不像奇数页上的连字符那么难看(您不必翻页)。
问题是:是否可以让LaTeX
(甚至是其他程序)发出警告或将信息写入某些外部文件,其中包含以连字符结尾的奇数页的信息?
答案1
解决方案可能如下。
首先,我们将 pdf 导出为 txt,其中包含有关坐标的所有信息:
pdftotext -bbox myTeX.pdf myTeX.txt
然后我们编写一个Perl
程序来查找以连字符结尾的单词,并且该单词之后要么分页,要么下一个单词不太近(不在下一行 - 我们与脚注和页脚有一些分离)。这是由$minDelta
(以点为单位)定义的。并且,正如问题中所述,我们只对奇数页执行此检查。
#!/usr/bin/perl
use strict;
use warnings;
my $file = $ARGV[0] or die "Tell me the filename\n";
open(my $data, '<', $file) or die "Could not open '$file' $!\n";
my $page=0;
my $page_pattern='<page width=\"[0-9.]*\" height=\"[0-9.]*\">';
my $hyph_pattern='-</word>';
my $word_pattern='<word';
my $split_pattern="\"|<|>";
my $minDelta = 15;
my $delta=0;
while (my $line = <$data>) {
chomp $line;
if ($line =~ "$page_pattern") { $page++; }
if ($page % 2 == 1)
{
if ($line =~ "$hyph_pattern")
{
my @fields = split $split_pattern, $line;
my $yMax = $fields[8];
my $word = $fields[10];
$line = <$data>;
chomp $line;
if ($line =~ "$word_pattern")
{
@fields = split $split_pattern, $line;
$delta = abs($fields[8]-$yMax);
if ( $delta > $minDelta)
{ print "page: $page, word: «$word», delta=$delta\n"; }
}
else { print "page: $page, word: «$word», delta=$delta\n"; }
if ($line =~ "$page_pattern") {$page++; print "page: $page\n";}
}
}
}
print "done\n";
<
这可能与文本中包含的文件存在一些错误,但在简单的情况下这应该可以起作用。