shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

situação intrigante - desafio


From: Leslie Watter
Subject: situação intrigante - desafio
Date: Tue, 30 Apr 2013 14:10:21 -0300

Olá distintos membros da lista ...

tenho um problema / desafio e gostaria de sugestões de como resolver.

Tenho um texto em latex com uma série de comandos  e preciso substituir o
texto pelo trecho correto.

Exemplo:

Definição de comando:

-----
\newcommand{\pts}[1]{\left(\hspace{-4pt} #1 \hspace{-4pt}\right)}
-----

uso dele:

-----
$A=\pts{\begin{array}{cc} 1 & 0 \\ 0 & 5 \end{array}}$
-----

O que eu preciso:

-----
$A=\left(\hspace{-4pt} \begin{array}{cc} 1 & 0 \\ 0 & 5 \end{array}
\hspace{-4pt}\right) $
-----

Notem que preciso trocar o \pts{ pelo trecho antes do #1 e a chave que
fecha o \pts{} pelo trecho que vem após o #1.

Pensei em usar o sed para encontrar o trecho e substituí-lo, mas ainda não
descobri como tratar de encontrar a última } referente ao \pts
(pode ser que ela não seja a última na linha), e *pior, pode ser que a
chave de fechamento esteja nas próximas linhas*  como em:

-------
f(x)=\pts{\begin{array}{c} 2x_1(x_1^2-x_2)+x_1-1 \\
x_2-x_1^2 \end{array}}\quad\mbox{e}\quad
-----               ^-- aqui fecha o \pts

O que eu imaginei foi:

    procurar por \pts
    substitua \pts{ pelo lado esquerdo da expressão #1

    numchaves=0
     INICIO
     Lê o prox caractere c
     se c={ então
       numchaves++
       vá para INICIO
     fimse
     se c=} e numchaves=0 então
       substitua a } pelo lado direito do #1 e vá para FINAL
     senão
       numchaves--
     fim
 Vá para INICIO
 FINAL

A questão toda está em fazer essa iteração, seja em sed, awk, ou outra
ferramenta.
Pensei em usar regexps para casar com as expressões internas no caso de
usar o sed.

Enfim, alguém tem alguma sugestão ? Eu não queria ter que apelar para o
elisp logo de cara.

[]s

LEslie

-- 
Leslie H. Watter


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]