extrair strings de arquivos LaTeX

1

Estou procurando a noite toda, mas não consegui encontrar uma solução. (Eu também leio Remova um comando de látex específico do texto E colchetes de fechamento atrás dele )

Eu tenho muitos arquivos LaTeX dos quais eu adoraria extrair o argumento de um comando especial para o segundo arquivo.

Por favor, imagine um arquivo LaTeX com muitas linhas "curtas", isto é, uma quebra de linha de todos os 80 caracteres. Assim, é mais do que provável que o argumento do comando em questão abranja mais de uma linha no arquivo de origem. Além disso, pode haver alguns comandos extras do LaTeX com chaves adicionais, que também devem ser extraídos.

Lorem ipsum dolor sit amet, \ltxcmd{consetetur sadipscing} elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
erat, sed diam voluptua. At vero eos et accusam et justo \ltxcmd{duo
dolores \emph{et ea rebum}}. Stet clita kasd gubergren, \ltxcmd{sea takimata
\textbf{sanctus} \emph{est} Lorem} ipsum dolor sit amet. Lorem ipsum dolor sit
amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor
invidunt ut labore et dolore magna aliquyam erat, sed diam
voluptua. At vero eos et accusam et justo duo dolores et ea
rebum.

Isso deve retornar os três argumentos da seguinte forma:

{consetetur sadipscing}
{duo dolores \emph{et ea rebum}}
{sea takimata \textbf{sanctus} \emph{est} Lorem}

Eu tentei primeiro

cat file1.tex | sed -n 's/.*\ltxcmd\({[[:alnum:] ]*}\).*//p'

mas isso acabou com a pesquisa no final da linha, por isso tentei

tr \n ' ' < file1.tex | sed -n 's/.*\ltxcmd\({[[:alnum:] ]*}\).*//p'

que retornou a primeira ocorrência, mas deixa o restante intocado.

A próxima tentativa foi para um g no final da expressão sed, para iniciar a pesquisa novamente - não é útil.

Alguma dica? bash e sed seriam bem-vindos.

    
por Jan 04.04.2018 / 23:29

1 resposta

1

Isso não responde à sua pergunta, mas é muito longo para um comentário.

Será complexo no Bash ou em qualquer linha de comando. A principal dificuldade, eu acho, é que você terá que contar { para decidir qual é o colchete de fechamento } , já que eles podem ser aninhados e em linhas diferentes. Eu recomendaria um script Python como a melhor ferramenta para resolver este problema.

Para brincar com as expressões regulares, você pode usar o Notpad ++ (funciona com vinho). Algo como \ltxcmd(\{.*\}) funcionaria se não fosse pelo aninhado {} que mencionei.

Um ponto de partida para pesquisa de expressão regular em Python link

    
por 05.04.2018 / 15:18

Tags