当我从windows命令行手动调用pdflatex时,它会生成所需的pdf。相反,当我从perl脚本调用pdflatex时,它没有:
system("pdflatex $fileName");。。结果:
Sorry, but pdflatex did not succeed.
You may want to visit the MiKTeX project page, if you need help.
utf8 "\x80" does not map to Unicode at C:/strawberry-perl/perl/site/lib/Encode.pm line 200.该脚本以前在unix上运行,并且运行良好。现在,在将它迁移到windows系统之后,它就不会了,tex-input-file的内容也是由脚本生成的。我的Mac上的“文件”-command告诉我这个文件被编码为"us-ascii“。因此,我尝试让perl将其编码为"utf-8",但不起作用:
open(FH, "> :encoding(utf-8)", $fileName);或
binmode(FH, ":utf8");文件仍在使用us-ascii编码生成。我如何才能改变这一点?
到目前为止,编码是我唯一的线索。还会有什么问题呢?
发布于 2016-07-19 20:18:26
如果这在手动输入命令行时运行良好,这可能是由于perl在将命令传递给系统之前插入引号的方式所致。你有没有试过打印你发出的调用,以测试它是否提供了与手动输入完全相同的输入?否则,为了通过perl中的系统命令将参数传递给程序,我总是将它们分开,如下所示,以避免任何插值错误:
#...
my $prog = "Z.*";
my $arg1 = "X";
my $arg2 = "Y";
#...
my $file = "W.*";
system("$prog", ("$arg1", "$arg2", ..., "$file"));
#...如果这不起作用,另一个解决方案可能是将文件内容导入到一个变量中,然后尝试用perl‘手动’编码它,如下所示:
use Encode;
use utf8;
use charnames qw( :full :short );
my $encodedfile = encode("utf8", $filecontents);如果您碰巧在文件中有任何活动字符,这可能会影响pdflatex处理最终输出的方式(例如,在perl \ gives \ to pdflatex中,最终结果是),您可以将以下内容附加到编码中:
my $str = $encodedfile;
my $find = "\\N{U+005C}";
my $replace = "\\textbackslash ";
$str =~ s/$find/$replace/g;
my %special_characters;
$special_characters{"\\N{U+0025}"} = "\\pourcent ";
$special_characters{"\\\$"} = "\\\$";
$special_characters{"\\N{U+007B}"} = "\\{";
$special_characters{"\N{U+007D}"} = "\\}";
$special_characters{"\N{U+0026}"} = "\\&";
$special_characters{"\\N{U+005F}"} = "\\textunderscore ";
$special_characters{"\\N{U+002F}"} = "\/";
$special_characters{"\\N{U+005B}"} = "\[";
$special_characters{"\\N{U+005D}"} = "\]";
$special_characters{"\\N{U+005E}"} = "\\textasciicircum ";
$special_characters{"\\N{U+0023}"} = "\\#";
$special_characters{"\\\N{U+007E}"} = "\\textasciitilde ";
$special_characters{"\\\N{U+0021}"} = " \\newline ";
my $string = $str;
foreach my $char (keys %special_characters) {
$string =~ s/$char/$special_characters{$char}/g;
}希望这能有所帮助。
https://stackoverflow.com/questions/35135943
复制相似问题