найти и заменить числа на фракции LaTeX правильно - PullRequest
0 голосов
/ 31 декабря 2018

Мой Perl-скрипт принимает данные и сохраняет их в виде массива.Затем скрипт берет эти данные и преобразует их в код, который я затем могу скопировать в LaTeX.

Часть моих данных включает в себя числа, такие как 4.25, 6.5, 6.75, и я хочу найти и заменить,так что 4.25 записывается как 4 1/4 при вставке в LaTeX.У пользователя запрашивается номер, который хранится как $variable.Поиск и замена выполняется следующим образом:

$variable =~ s/\b.25\b/\\sfrac{1}{4}/;
$variable =~ s/\b.5\b/\\sfrac{1}{2}/;
$variable =~ s/\b.75\b/\\sfrac{3}{4}/;                  

Я хочу заменить 4.25 на код 4\sfrac{1}{4}, 6.5 на код 6\sfrac{1}{2} и * 1011.* с кодом 6\sfrac{3}{4}.

Однако при запуске он корректно заменяет .25 и .5, а .75 заменяется .\sfrac{1}{2}.Я запутался в том, что он делает.

Я изменил код примерно на:

$variable =~ s/\b.25\b/\\sfrac{1}{4}/;
$variable =~ s/\b.75\b/\\sfrac{3}{4}/;                  
$variable =~ s/\b.5\b/\\sfrac{1}{2}/;

, и это облегчает вышеуказанную проблему, но когда я ввожу число 5.5, оно тогдазаменяет this на \sfrac{1}{2}.5, а не 5\sfrac{1}{2}.

Кроме того, если мне нужно преобразовать @variable в строку, как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Кроме того, вы не должны сканировать ввод несколько раз, как это.Вот гораздо лучшее решение:

my %map = (
   ".25" => "\\sfrac{1}{4}",
   ".5"  => "\\sfrac{1}{2}",
   ".75" => "\\sfrac{3}{4}",
);

my $alt = join "|", map quotemeta, keys %map;    
my $re = qr/\b($alt)\b/;

$var =~ s/$re/$map{$1}/g;
0 голосов
/ 31 декабря 2018

Неэкранированная точка соответствует любому символу (кроме новой строки).Чтобы соответствовать литеральной точке в регулярном выражении, вы хотите, чтобы \. или [.].

Например, \b.5\b соответствует 75 в 0.75, поскольку точка может соответствовать 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...