¿Cómo puedo crear un índice o TOC usando latexdb y mysql?

¿Cómo puedo crear un índice o TOC usando latexdb y mysql?

Tengo una base de datos llena de nombres, direcciones, etc. Los usamos en mi trabajo para asegurarnos de que solo las personas en la base de datos puedan ingresar (o se les niegue la entrada, si alguna vez han hecho algo mal). Creé un documento con pdflatexdb y, al usar longtable, ahora tengo un documento "de trabajo" con el que puedo vivir si es necesario.

Sin embargo, a medida que agregamos personas a la base de datos todos los días, la "lista" se vuelve más grande y menos manejable en lo que respecta a la búsqueda de un nombre o número de identificación y similares. Lo que me gustaría descubrir es cómo crear un "índice" que muestre con qué páginas comienzan los apellidos (un campo en la base de datos)... Es decir, los nombres que comienzan con A están en la página uno, en la página B 50 , C página 60, etc. Aquí hay un ejemplo práctico:

\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}

Soy relativamente n00b para LaTeX, así que tenga cuidado si mi documento tiene errores evidentes (supongo que parte de mi código es redundante o incluso inútil).

Gracias.

Respuesta1

Sin embargo, no es posible ejecutar el código sin el paquete de conexión y algo a lo que conectarse.

\Large{Ordered by name}

Los comandos de tamaño como \Largeno toman un argumento, por lo que si los usa de esa forma {}no delimitan un argumento sino que crean un grupo que es inofensivo en este caso pero confuso, es mejor omitir las llaves.

Pero supongo que puedes reemplazar

\texttt{##lname,} 

por

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

donde \labelnameobtiene la primera letra y hace un \labelsi es nuevo, algo así 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}

luego, al final, solo necesitas usar \pagerefcada letra por turno:

\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}

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

información relacionada