td

May 10, 2010

[Warning: This post is a backup recovery from my previous Wordpress blog. All content was automatically converted accessing a MySQL database using a Python script (details). Mostly are in Portuguese but if you are interest I can translate to English. If you found any problem dont’t hesitate to contact me in comments.]

Estou utilizando o Vim et all, para escrever o texto do meu trabalho de concluso de curso (conhecido tambm como trabalho de diploma, td), so basicamente as ferramentas:

  1. vim - editor
  2. aspell - correo ortogrfica
  3. bibtex - referencias textuais
  4. latex - processador de texto
  5. abntex - padro do documento

A norma (!) diz que as palavras estrangeiras devem ser escritas em itlico. Como um texto tcnico, h o uso frequente de palavras in english e o risco de deixar uma para trs grande. Como a motivao para no escrever maior, dispersei e acabei fazendo um programa que a partir de uma entrada (CSV) varre o texto e insere o itlico quando for necessrio. O prottipo at agora esta assim:

O cdigo ainda no est limpo para torn-lo acessvel num repositrio on-line. Alm disso, acho que h outras maneiras mais eficazes: sed, python, etc. Como no sei quando vou ter tempo para torn-lo til de verdade, vou colar aqui as duas partes do cdigo que achei interessante.

A alterao no texto simples: primeiro varremos o texto procurando pelo termo (*palavra um iteraror da QStringList) e associamos um ndice para cada ocorrncia (indexOf) adicionando em uma lista (pos um QList<int>). Antes de fazermos a troca (replace) comparamos com outra lista (blacklist) se essa insero j no est dentro de um \textit. Se isso no acontecer, pode existir casos do tipo: \textit{\textit{itlico}}.

while ((i=s.indexOf(*palavra,i+1)) != -1)
	pos << i;

for (index=0, offset=0; index < pos.length() ; index++)
	if (blacklist.contains(pos.at(index)) == false) {
		str = "\\textit{" + *palavra + "}";
		s.replace(pos.at(index)+offset,(*palavra).length(),str);
		offset += 9;
	}

A construo da blacklist pode tambm ser aproveitada para evitar outros contextos, como notas de rodap. Apenas trocar o \\textit pelo \\footnote.

while ((a=s.indexOf("\\textit{",b+1)) != -1) {
	b = s.indexOf("}",a);
	if ((c=s.indexOf(*palavra,a)) < b)
		blacklist << s.indexOf(*palavra,a);
}

Concluso: esse post nem era para existir, mas quem sabe eu no invento algum programa que escreva o texto sozinho :P

At mais!