Imagens e links quebrados🔗

Sintoma. Você moveu a pasta, trocou de máquina ou recebeu um mapa de alguém, e as imagens sumiram ou os links não abrem nada.

O que você vai aprender

  • Entender por que caminhos absolutos quebram ao mover ou compartilhar
  • Converter um mapa existente para caminhos relativos
  • Organizar a pasta de forma que o mapa vire uma unidade portátil

Causa. Caminhos absolutos.

Entendendo o problema🔗

Um link absoluto aponta para um lugar específico do disco:

/home/ana/projetos/aurora/img/diagrama.png

Isso funciona na máquina da Ana, na pasta original. Em qualquer outro lugar, não.

Um link relativo aponta a partir do mapa:

img/diagrama.png

Isso funciona onde quer que a pasta esteja, desde que a estrutura interna se mantenha.

Diagnóstico🔗

# Quantos links absolutos existem?
grep -o 'LINK="[^"]*"' mapa.mm | grep -c '="/\|="[A-Z]:\\'

# Quais são?
grep -o 'LINK="[^"]*"' mapa.mm | sort -u

Links começando com / (Unix) ou C:\ (Windows) são absolutos.

Conserto: ativar caminhos relativos🔗

Primeiro, evite repetir o problema:

  1. Ferramentas → Preferências → Ambiente → Arquivos
  2. Ative a opção de salvar links como relativos.

A partir daí, links novos nascem relativos.

Conserto: converter os existentes🔗

Caminho 1 — pelo Freeplane. Reabra cada link (Ctrl+K) e escolha o arquivo de novo, agora com a opção de relativos ativa. Correto, mas tedioso.

Caminho 2 — em massa, por script de texto. Como o .mm é XML, um sed resolve:

cp mapa.mm mapa.mm.bak
sed -i 's|LINK="/home/ana/projetos/aurora/|LINK="|g' mapa.mm

Confira antes de confiar:

grep -o 'LINK="[^"]*"' mapa.mm | sort -u
xmllint --noout mapa.mm && echo válido

Caminho 3 — por script Groovy, quando a conversão exige lógica:

def base = node.map.file.parentFile.toPath()
node.map.root.branch.each { n ->
    def l = n.link?.text
    if (l && l.startsWith('/')) {
        try {
            n.link.text = base.relativize(new File(l).toPath()).toString()
        } catch (ignored) {
            n.icons.add('messagebox_warning')   // marca o que não deu
        }
    }
}

Os nós marcados com o ícone de aviso são os que apontavam para fora da pasta e precisam de decisão manual.

Organizando a pasta🔗

A estrutura que sobrevive a mudanças:

projeto/
├── mapa.mm
├── img/
│   ├── diagrama.png
│   └── foto.jpg
└── docs/
    ├── contrato.pdf
    └── especificacao.odt

Tudo dentro de uma pasta, referenciado relativamente. A pasta inteira é a unidade que você copia, envia, versiona e sincroniza.

Um script que testa se cada arquivo referenciado existe:

def base = node.map.file.parentFile
def quebrados = []
node.map.root.branch.each { n ->
    def l = n.link?.text
    if (l && !l.startsWith('http') && !l.startsWith('mailto') && !l.startsWith('#')) {
        def f = l.startsWith('/') ? new File(l) : new File(base, l)
        if (!f.exists()) { quebrados << n; n.icons.add('messagebox_warning') }
    }
}
c.statusInfo = "${quebrados.size()} link(s) quebrado(s)"

Rode-o depois de qualquer reorganização de pastas.

Imagens: embutir como alternativa🔗

Quando o mapa precisa ser um arquivo único — enviado por e-mail, anexado a um chamado —, embutir resolve, ao custo do tamanho.

O formato .mmx faz isso de forma organizada: empacota mapa e anexos num único arquivo, sem inchar o XML com base64.

Ver Imagens e mídia para a comparação completa.

Recebendo um mapa de outra pessoa🔗

Se chegou um .mm com links absolutos da máquina de outra pessoa:

  1. Peça a pasta inteira, não só o .mm.
  2. Ou peça um .mmx, que traz os anexos junto.
  3. Ou aceite que os links de arquivo não vão funcionar — links web continuam abrindo normalmente.

Você aprendeu

  • A causa é quase sempre caminho absoluto, não arquivo perdido
  • Links relativos tornam a pasta inteira portátil
  • A opção fica em Preferências → Ambiente e vale ligar antes do primeiro anexo
  • Uma estrutura de pastas previsível (img/, docs/) é metade da solução

Perguntas para reflexão

  1. Por que um caminho absoluto funciona na sua máquina e falha na de outra pessoa?
  2. Onde se liga a opção de links relativos?
  3. Que estrutura de pastas torna um mapa com anexos portátil?
  4. Qual é o teste que prova que a portabilidade funcionou?

Artigos relacionados

Referências🔗

  1. Freeplane — External objects (arquivo)
  2. Freeplane — Working with mind map files