我正在处理一份包含许多简短希腊语段落以及单个单词和表达的文档。将所有带有\gr{...}
(用 定义
\def\gr#1{{\otherlanguage{polutonikogreek}#1}}
)的段落都包含进去是不切实际的,因为这很乏味,而且很容易忘记一些,所以我需要一个脚本来执行此操作。该命令只应用于英语单词中的希腊语,而不应用于仅包含希腊语(和 TeX 命令)的段落,对于这些段落,其他语言环境更合适。它应该考虑到希腊语段落可能包含标点符号和换行符(硬换行)。这里有一个可以尝试的 lipsum。希腊语 Unicode 范围是 0x0370--0x03FF 和 0x1F00--0x1FFF。如果有人有解决方案,我将不胜感激。
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque
ἐπεὶ οὖν ἄμφω doctrina philosophi Graeco sermone tractavissent,
ea Latinis litteris mandaremus, fore ut hic noster labor in
varias κινήσεις εἰ μὲν ἕτεραι ἐν reprehensiones incurreret. nam
quibusdam, et iis quidem non admodum indoctis, totum hoc displicet
philosophari. quidam autem non tam id reprehendunt, si remissius
agatur, sed tantum studium τίνι ἢ γὰρ, ἄμφω· ἐν τῷ πάσχοντι καὶ
κινουμένῳ `ἢ ἡ μὲν ποίησις' ἐν τῷ tamque multam operam ponendam in
eo non arbitrantur. erunt etiam, et ii quidem eruditi Graecis
litteris, contemnentes Latinas, qui ποιοῦντι ἡ δὲ πάθησις ἐν τῷ
πάσχοντι se dicant in Graecis legendis operam malle consumere.
postremo aliquos futuros suspicor, qui me ad alias litteras
vocent, genus hoc scribendi, etsi sit elegans, personae tamen et
dignitatis esse negent.
Contra quos omnis dicendum breviter existimo. Quamquam
philosophiae quidem vituperatoribus satis responsum est eo libro,
(εἰ δὲ δεῖ καὶ ταύτην ποίησιν καλεῖν ὁμώνυμος ἂν εἴη;) quo a nobis
philosophia defensa et collaudata est, cum esset accusata et
vituperata ab Hortensio. qui liber cum et tibi probatus videretur
et iis, quos ego posse iudicare arbitrarer, ἀλλὰ μὴν εἰ τοῦτο ἡ
plura suscepi veritus ne movere hominum studia viderer, retinere
non posse. Qui autem, si maxime hoc placeat, moderatius tamen id
volunt fieri, difficilem quandam temperantiam postulant in eo,
κινοῦντι ἔσται (ὁ γὰρ. αὐτὸς λόγος quod semel admissum coerceri
reprimique non potest, ut propemodum iustioribus utamur illis, qui
omnino avocent a ἐπὶ κινοῦντος philosophia, quam κίνησις ἐν his,
qui rebus τῷ infinitis modum constituant in reque eo meliore, quo
maior sit, mediocritatem desiderent.
PS. 我想要的更精确的描述:相当于以下过程:转到下一个希腊字符;查看紧接在它前面的是否是\gr{
;如果是,则转到匹配
}
并重复;否则:插入\gr{
;找到下一个拉丁字符;返回到最后一个希腊字符;}
在它后面插入。重复。
PS II. 我现在正在使用
#!/usr/bin/perl
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
my $g=qr/[\x{0370}-\x{03FF}\x{1F00}-\x{1FFF}]/;
my $L=qr/[^a-zA-Z]/;
while (<>)
{
s/( (?: $g $L* $g) )/\\gr{$1}/xg;
print
}
必须使用命令行选项来调用它-0
。除了一个小的美学问题外,这个方法可以正常工作:模式不知道它末尾的括号是否属于里面。
答案1
$p
这是您的脚本。只需将您的内容通过管道传输即可。在逗号后添加您可能需要的任何其他标点符号[,]
。
#!/usr/bin/perl
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
my $g = qr/\p{Greek}/;
my $p = qr/[,]/;
while ( <> )
{
s/( (?: ($g+$p*\s+$g+$p*\s*)+ | $g+$p* )+ )/\\gr{$1}/xg;
print
}
输出:
Non eram nescius, Brute, cum, quae summis ingeniis exquisitaque
\gr{ἐπεὶ οὖν ἄμφω} doctrina philosophi Graeco sermone tractavissent,
ea Latinis litteris mandaremus, fore ut hic noster labor in
varias \gr{κινήσεις εἰ μὲν ἕτεραι ἐν} reprehensiones incurreret. nam
quibusdam, et iis quidem non admodum indoctis, totum hoc displicet
philosophari.
答案2
使用可直接使用该alphabeta
包来编写 Unicode 希腊语。
\documentclass {article}
\usepackage [utf8] {inputenc}
\usepackage [greek, english] {babel}
\usepackage {alphabeta}
\begin {document}
Text in Greek: τίνι ἢ γὰρ, ἄμφω
\end {document}