Remove um comando de látex específico do texto E colchetes de fechamento atrás dele

1

Como remover um comando de látex específico do texto E fechar o colchete por trás dele, mas manter o texto dentro dos colchetes? O comando no exemplo a seguir para remover é \edit{<some staff>} . \edit{ e } devem ser removidos, enquanto <some staff> deve ser deixado inalterado.

Por favor, preencha gratuitamente para sugerir SED, ou AWK, ou Perl ou o que quer que faça o trabalho

exemplo sem sentido:

We \edit{Introduce a} model for analyzing \emph{data} from various
experimental designs, \edit{such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}}.

Observe que pode haver um ou mais comandos latex no formulário \command{smth} inside \edit{} statements. \command{smth} deve ser deixado como estava

Saída:

We Introduce a model for analyzing \emph{data} from various
experimental designs, such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}.

PS. Eu estou introduzindo um monte de pequenas edições no meu arquivo tex. Quero que essas edições sejam destacadas, para que meu colaborador possa vê-las. Mas depois eu gostaria de remover todos os destaques e enviar o texto para um revisor.

A pergunta foi feita originalmente em AWK / SED Remova um comando de látex específico do texto E colchetes de fechamento atrás dele . Mas o exemplo foi muito mole

    
por den2042 27.06.2017 / 23:42

1 resposta

2

Aqui está um que funciona no caso simples de apenas um nível de comandos dentro de um \edit{...} , no máximo:

perl -00 -lpe 's,\edit\{( (?: [^}\]* | \[a-z]+\{[^}]*\} )+ )\},$1,xg'

A parte do meio (?: [^}\]* | \[a-z]+\{[^}]*\} )+ tem que alternativas: [^}\]* corresponde a qualquer string sem chave de fechamento ou barra invertida (texto normal); e \[a-z]+\{[^}]*\} corresponde a qualquer coisa com barra invertida, letras minúsculas e, em seguida, um par de chaves correspondente (como \url{whatever...} ). O agrupamento (?:...)+ repete essas alternativas e a captura de parênteses externa, para que possamos substituir a correspondência apenas com a parte dentro de \edit{...} .

-00 diz ao Perl para manipular a entrada de um parágrafo no tempo, com linhas vazias separando parágrafos. Se você precisar manipular tags que abrangem parágrafos, altere para -0 para manipular toda a entrada de uma só vez.

Para o seu exemplo, isso parece funcionar, dando:

We Introduce a model for analyzing \emph{data} from various
experimental designs, such as paired or \url{http://www/}
longitudinal; as was done 1984 by NN \cite{mycitation} and by NNN
\cite{mycitation2}.

No entanto, ele (previsivelmente) falha por uma entrada com dois níveis de comandos dentro do \edit{...} :

Some \edit{\somecmd{\emph{nested} commands} here}.

Vira para:

Some \somecmd{\emph{nested} commands here}.

(a chave de fechamento errada é removida)

Na verdade, o manuseio de parêntesis equilibrados é um pouco mais complicado. nesta pergunta sobre SO: Expressão regular Perl: combine colchetes aninhados .

    
por 28.06.2017 / 00:44