Como posso criar um índice ou TOC usando latexdb e mysql?

Como posso criar um índice ou TOC usando latexdb e mysql?

Eu tenho um banco de dados cheio de nomes, endereços, etc. Nós os usamos no meu trabalho para garantir que apenas as pessoas no banco de dados tenham permissão para entrar (ou entrada negada, caso tenham feito algo errado). Criei um documento com pdflatexdb e, usando longtable, agora tenho um documento 'funcional' com o qual posso conviver se for necessário.

No entanto, à medida que adicionamos pessoas ao banco de dados todos os dias, a “lista” fica maior e menos gerenciável no que diz respeito à busca por um nome ou número de identificação e assim por diante. O que eu gostaria de descobrir é como criar um "índice" que mostre com quais páginas os sobrenomes (um campo no banco de dados) começam ... IE - nomes que começam com A estão na página um, na página B 50 , C página 60 e assim por diante. Aqui está um exemplo prático:

\documentclass[10pt,twoside]{report}

\usepackage{longtable}
\usepackage[left=.5in, right=.5in, top=1cm, bottom=.8in]{geometry}

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\fancyfoot[RE, RO]{\thepage}
\fancyfoot[C]{Generated: \today}

\renewcommand{\headrulewidth}{0pt}
\texdbconnection{CONNECTION STUFF}

%% BEGIN TeXDBdef
\texdbdef{##query}{select lname, fname, license_no, comments from visitors where redsheet='Allow' order by lname}{##lname,##fname,##license,##comments}

%% EHD TeXDBdef

\begin{document}
\begin{center}\section*{These people are allowed inside the building.}\end{center}
\begin{center}\Large{Ordered by name}\end{center}
\begin{longtable}{@{\extracolsep{\fill}}llp{8cm}l}
    \Large{Name} & \Large{License \#} & \Large{Comments} \vspace{1em} \\     \hline \vspace{.2em}
    \endhead
    \vspace{.8em}
    \texdbfor{##query}{\texttt{##lname,} \texttt{##fname} & \texttt{##license} & \texttt{\textit{##comments}} \\ \vspace{.5em}}
\end{longtable}

\end{document}

Eu sou relativamente n00b LaTeX, então, por favor, seja gentil se meu documento apresentar erros gritantes (presumo que parte do meu código seja redundante ou até mesmo inútil).

Obrigado.

Responder1

Não é possível executar o código sem o pacote de conexão e algo para se conectar

\Large{Ordered by name}

comandos de tamanho como \Largenão aceitar um argumento, portanto, se você usar dessa forma, {}não estará delimitando um argumento, mas formando um grupo que é inofensivo neste caso, mas confuso, é melhor deixar de fora os colchetes.

Mas eu acho que você pode substituir

\texttt{##lname,} 

por

\labelname{##lname}\texttt{##lname,} 

where \labelnamepega a primeira letra e faz um \labelif for new, algo como

\def\labelname#1{\xlabelname#1.\relax}
\def\xlabelname#1#2\relax{%
\def\tmp{#1}%
\ifx\tmp\firstletter
\else
\global\let\firstletter\tmp
\label{letter-#1}%
\fi}

então, no final, você só precisa usar \pagerefcada letra por vez:

\documentclass{article}

\def\labelname#1{\xlabelname#1.\relax}
\def\xlabelname#1#2\relax{%
\def\tmp{#1}%
\ifx\tmp\firstletter
\else
\global\let\firstletter\tmp
\label{letter-#1}%
\fi}

\begin{document}

\labelname{Alan}Alan
\labelname{Brian}Brian
\labelname{David}David

\newpage

\labelname{Duncan}Duncan
\labelname{Fred}Fred


\section{Name index}

\makeatletter
\def\refnameletter#1{%
\expandafter\ifx\csname r@letter-#1\endcsname\relax\else
\par\noindent#1: \pageref{letter-#1}\par
\fi
\if Z#1\else\expandafter\refnameletter\fi}

\refnameletter ABCDEFGHIJKLMNOPQRSTUVWXYZ

\end{document}

insira a descrição da imagem aqui

insira a descrição da imagem aqui

informação relacionada