Um documento LaTeX pode ser dividido em partes. Isto facilita na edição e organização, imagine que você tem um documento grande (50 ou mais páginas) chamado documento.tex e ele está estruturado conforme o exemplo abaixo:

\begin{document}

\include{introducao}

\include{visao-geral}

\include{teoria}

\include{desenvolvimento}

\include{conclusao}

\include{bibliografia}

\end{document}

Cada um dos “include” é um arquivo .tex (introducao.tex, visao-geral.tex, teoria.tex, desenvolvimento.tex, conclusao.tex, bibliografia.tex).

Desta forma você mantêm seu trabalho organizado pois cada parte (capítulo ou subcapítulo) fica em um arquivo separado. Na hora de gerar o arquivo .dvi basta compilar o arquivo principal:

latex documento.tex

Apesar dos templates para hash_set e hash_map não serem padronizados, ambos são relativamente comuns, estando disponíveis tanto na implementação GNU (ie, no GCC) quanto no Visual C++ no Windows. Existem algumas diferenças, como o namespace um pouco mais escondido no GNUC (__gnu_cxx vs stdext) e alguns métodos que existem em um mas não em outro (p.ex.: reverse_iterator que não existe no GCC); mas a maioria das vezes servem para o serviço.

Um problema comum com essas classes no GCC é um erro meio criptico quando tentamos usar __gnu_cxx::hash_set<std::string> ou __gnu_cxx::hash_map<std::string>:

/usr/include/c++/4.2/ext/hashtable.h:595: error: no match for call to ‘(const __gnu_cxx::hash<std::basic_string<char, std::char_traits, std::allocator > >) (const std::basic_string<char, std::char_traits, std::allocator >&)’

Este erro ocorre porque a libstdc++ não define uma função de hash para std::string. A solução é definir uma (O RLY?). Felizmente a biblioteca padrão define uma função de hash para strings do tipo char*, então podemos aproveitá-la:

struct string_hash : public std::unary_function<std::string,size_t>
{
  size_t operator() (const std::string &v) const
  {
    return __gnu_cxx::hash()(v.c_str());
  }
};
typedef __gnu_cxx::hash_set<std::string,string_hash> string_hash_set;

Para obter ponteiros a métodos ou funções sobrecarregadas, como exemplo:

class Foo
{
public:
void bla(int a);
int bla() const;
};

Se tentarmos usar o nome da função diretamente, o compilador não saberá a qual dos métodos você se refere. Para sair da ambiguidade, necessitamos usar a “assinatura” (os tipos dos parâmetros e do valor retornado) da função indiretamente, possivelmente com o uso de variáveis temporárias:

void (Foo::*ptr1)(int)= &Foo::bla;
int (Foo::*ptr2)() const= &Foo::bla;

Muitas vezes é necessário fazer um insert de dados em uma tabela trazendo resultados de outra na mesma base ou em bases diferentes. Como fazer? Simples:

INSERT INTO banco.tabela-destino (campo1, campo2, campo3...)
SELECT campo1,campo2,campo3... FROM banco.tabela-origem;

Atente-se para que os campos estejam na mesma seqüência tanto na instrução INSERT quanto na instrução SELECT pois é seguida a seqüência de campos em ambas as instruções. Também não se esqueça do ponto e vírgula no final da última instrução. Imprescindível.

Para incluir imagens com extensão .png e .jpg em seu documento LaTeX, coloque o parâmetro dvipdfm em \documentclass, em seguida declare o pacote graphicx.

\documentclass[a4paper,12pt,dvipdfm]{report}
\usepackage{graphicx}

Para inserir a figura é necessário transformá-la do formato original (.png,
.jpg) para o formato bounding box (.bb). Suponha que o nome da imagem seja grafico.png. Para transformá-la em .bb basta abrir o Prompt e digitar:

ebb grafico.png

Isto criará um arquivo grafico.bb. Supondo que o arquivo TeX chama-se documento.tex, abra-o e insira as linhas:

\begin{figure}[!htb]
     \centering
     \includegraphics[scale=1]{images/grafico.png}
     \caption{Legenda da Imagem}
     \label{Label de referência para a imagem}
\end{figure}

Compile o documento:

latex documento.tex

Será gerado o arquivo documento.dvi, porém a figura não aparecerá nele. É preciso que seja transformado em .pdf, com o seguinte comando:

dvipdfm documento.dvi

Será criado o documento.pdf com a imagem grafico.png. Com esta dica você não fica restrito a inserir somente figuras .eps no seu documento.

A dica é realmente interessante e já me ajudou em outros momentos. Existem momentos que vocês simplesmente deseja fazer aquela “alteração de estilo” no site sem ter que fazer aquele famigerado reload da página. Então, como fazer isso sem usar AJAX?

Pode parecer simples… e é! Basicamente basta chamar a função loadCSS descrita abaixo. A função se baseia apenas no bom e velho DOM e nada mais.

function loadCSS(url) {
    var lnk = document.createElement(’link’);
    lnk.setAttribute(’type’, “text/css” );
    lnk.setAttribute(’rel’, “stylesheet” );
    lnk.setAttribute(’href’, url );
    document.getElementsByTagName(”head”).item(0).appendChild(lnk);
}

NOTA: Só testei no IE 7 e no Firefox 2. Se alguém fizer testes em outros browsers e também funcionar avise e comente.

Uma forma de obter velocidade na execução de tabelas, principalmente as temporárias, é criá-las em memória. Como estas tabelas são usadas e depois descartadas, é possível obter um ganho de performance muito grande com este truque.

Para criar uma tabela temporária em memória, faça:

CREATE TEMPORARY TABLE <nome_da_tabela> (<campos>) ENGINE=MEMORY;

Observe a necessidade obrigatória de informar o tipo de engine usado. Neste caso, a memória do servidor.

Esta dica também é válida para a criação de tabelas comuns (não-temporárias), bastando remover o argumento TEMPORARY. Mas cuidado, se o servidor cair, os dados são perdidos e não é possível recuperá-los.

Para determinar qual encoding seu script deve rodar, use na primeira linha:

encoding system [tabela]

Exemplo:

encoding system utf-8

Para listar as tabelas disponíveis:

encoding names

Exemplo de listagem:

foreach i [encoding names] {
    puts "A tabela $i está disponível neste sistema"
}
Add to Technorati Favorites

a