[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]
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- situação intrigante - desafio,
Leslie Watter <=