跨页连字:最后一个单词带连字的奇数页摘要

跨页连字:最后一个单词带连字的奇数页摘要

据我所知,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";

<这可能与文本中包含的文件存在一些错误,但在简单的情况下这应该可以起作用。

相关内容