Eu tenho uma solução rápida que é útil muitas vezes. Observe que é apenas para uso pessoal (1); poderia ser refinado, adicionado edição no local, controle de erros, qualquer coisa. Mas eu acho que é útil como é também. A ideia é aproveitar a própria numeração do LaTeX.
Portanto, antes de tudo, você precisa adicionar marcadores ao seu documento (o que é bom, no entanto):
\documentclass[12pt]{article}
\begin{document}
\section{a}
\label{sec:a}
\section{b}
\label{sec:b}
\subsection{b a}
\label{sec:ba}
\newpage
\subsection{b b}
\label{sec:bb}
\section{c}
\label{sec:c}
\end{document}
Em seguida, execute o latex como sempre, suponha que ele seja chamado de walla.tex
. Agora você executa este pequeno script python:
#!/usr/bin/env python
#
#
import sys
import re
labels=[]
# build a list of label
for l in open(sys.argv[1] + ".aux"):
if l.find("newlabel{") != -1:
m = re.search(r'\newlabel{(.*?)}{{(.*?)}{(.*?)}}', l)
if m:
labels.append("label: %s will be number: %s at page: %s" % (
m.group(1), m.group(2), m.group(3)))
else:
labels.append(l)
# scan input file
for l in open(sys.argv[1] + ".tex"):
if l.find("\label") != -1:
# we have a label, try to match it
m = re.search(r'\label{(.*?)}', l)
# if not m: continue ERROR not managed here
key = m.group(1)
for lab in labels:
if lab.find(key) != -1:
# modify this to pretty print
sys.stdout.write("%%%%%% %s\n" % lab.strip())
break
# output the tex file avoiding old ones
if not l.startswith(r'%%% label'):
sys.stdout.write(l)
Chame find_tex_labels
, torne-a executável e execute-a como find_tex_labels walla > walla_annotated.tex
(note, sem extensões nos argumentos).
Você terá seu arquivo LaTeX anotado na saída:
\documentclass[12pt]{article}
\begin{document}
\section{a}
%%% label: sec:a will be number: 1 at page: 1
\label{sec:a}
\section{b}
%%% label: sec:b will be number: 2 at page: 1
\label{sec:b}
\subsection{b a}
%%% label: sec:ba will be number: 2.1 at page: 1
\label{sec:ba}
\newpage
\subsection{b b}
%%% label: sec:bb will be number: 2.2 at page: 2
\label{sec:bb}
\section{c}
%%% label: sec:c will be number: 3 at page: 2
\label{sec:c}
\end{document}
... isso funcionará para todos os rótulos. Eu acho bastante útil para a equação de referência cruzada etc quando estou editando em um dispositivo que não possui LaTeX. Agora você pode substituir o walla.tex original pelo novo.
É sua responsabilidade manter as coisas em sincronia ... e não usar "%%% label" comentários em nenhum lugar.
Notas de rodapé:
(1) Prometo o refinamento muitas vezes. Então, dado que eu sou o único a usá-lo, corrijo os erros se e quando eles saem ... e nunca encontro tempo para limpá-lo.