![¿Cómo puedo crear un índice o TOC usando latexdb y mysql?](https://rvso.com/image/266389/%C2%BFC%C3%B3mo%20puedo%20crear%20un%20%C3%ADndice%20o%20TOC%20usando%20latexdb%20y%20mysql%3F.png)
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 \Large
no 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 \labelname
obtiene la primera letra y hace un \label
si 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 \pageref
cada 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}