【问题标题】:Convert non-ASCII/UTF-8 characters into LaTeX codes将非 ASCII/UTF-8 字符转换为 LaTeX 代码
【发布时间】:2016-07-26 10:40:00
【问题描述】:

我们必须将非 ASCII、UTF-8 或命名实体字符转换为 LaTeX 代码。现在我们使用非 ASCII 到 Unicode,然后使用 Perl 脚本将 Unicode 到 LaTeX/entity。

例如:

 ó --> \'{o}
 ó --> \'{o}
 ó --> \'{o}

在 Perl 程序/脚本中是否有任何从非 ASCII 或 UTF-8 到 LaTeX 代码的直接转换?

【问题讨论】:

  • 你的条款很模糊。 UTF-8 是非 ASCII,Unicode 根本不是编码。

标签: perl latex entity


【解决方案1】:

使用XML::Entities 模块解码实体,并使用LaTeX::Encode 模块将它们重新编码为LaTeX,这非常简单

请注意,我已经为解码函数显式创建了别名xml_decode,因为导出的名称只是decode,这太不精确了

use utf8;
use strict;
use warnings 'all';
use feature 'say';

use XML::Entities ();
use LaTeX::Encode 'latex_encode';
*xml_decode = \&XML::Entities::decode;

for my $s ( 'ó', 'ó', 'ó' ) {
    my $reencoded = latex_encode(xml_decode('all', $s));
    say $reencoded;
}

输出

{\'o}
{\'o}
{\'o}

【讨论】:

  • 你的皇冠上的另一颗钻石......太好了......!
  • {\'o} {\'o} 在 C:/Perl/site/lib/LaTeX/Encode 替换 (s///) 格式错误的 UTF-8 字符(字符串的意外结尾) .pm 第 1 行 第三个打印此 -- >01。 C:/Perl/site/lib/LaTeX/Encode.pm 第 101 行的格式错误的 UTF-8 字符(致命)。
  • @Mahe_sundar:听起来您没有正确读取和解码您的输入字符串。您需要提出一个新问题并显示您的代码和数据。
  • 刚才我复制了上面的代码,在我的windows机器上试了一下。因此,我得到了足够的警告信息。
  • @Mahe_sundar:好吧,我的猜测是,虽然您的代码包含 use utf8 表示源文件是 UTF-8 编码的,但它实际上是 ISO-8859-1 或 Windows-1252 或类似的.您可以将编辑器更改为使用 UTF-8,也可以使用 Encode 模块对程序中的非 ASCII 字符串进行解码。另一方面,如果您的所有数据都来自外部来源,那么只需对其进行适当的解码就足够了,一切都应该正常工作。
【解决方案2】:

我需要大约 2 个小时才能找到我的错误。 Perl 没有检测到我的输入字符串是用 UTF-8 编码的。

您可以帮助 perl 将输入字符串视为 utf-8 和: 使用 open ( ":encoding(UTF-8)", ":std" );

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2015-08-06
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多