Wie kann ich mit LatexDB und MySQL einen Index oder ein Inhaltsverzeichnis erstellen?

Wie kann ich mit LatexDB und MySQL einen Index oder ein Inhaltsverzeichnis erstellen?

Ich habe eine Datenbank voller Namen, Adressen usw. Wir verwenden sie bei meiner Arbeit, um sicherzustellen, dass nur Personen in der Datenbank hineingelassen werden (oder der Zutritt verweigert wird, wenn sie jemals etwas falsch gemacht haben). Ich habe ein Dokument mit pdflatexdb erstellt und durch die Verwendung von longtable habe ich jetzt ein „funktionierendes“ Dokument, mit dem ich notfalls leben kann.

Da wir jedoch jeden Tag neue Leute zur Datenbank hinzufügen, wird die „Liste“ länger und weniger handhabbar, was das Suchen nach Namen oder ID-Nummern usw. betrifft. Ich möchte herausfinden, wie man einen „Index“ erstellt, der anzeigt, mit welchen Seiten Nachnamen (ein Feld in der Datenbank) beginnen ... IE – Namen, die mit A beginnen, stehen auf Seite eins, B auf Seite 50, C auf Seite 60 und so weiter. Hier ist ein funktionierendes Beispiel:

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

Ich bin ein relativer Neuling in LaTeX, also seien Sie bitte nachsichtig, wenn mein Dokument eklatante Fehler enthält (ich gehe davon aus, dass ein Teil meines Codes überflüssig oder sogar nutzlos ist).

Danke.

Antwort1

Es ist jedoch nicht möglich, den Code ohne das Verbindungspaket und etwas, mit dem eine Verbindung hergestellt werden kann, auszuführen.

\Large{Ordered by name}

Größenbefehle wie \Largeakzeptieren kein Argument. Wenn Sie sie in dieser Form verwenden, {}grenzen sie also kein Argument ab, sondern erstellen eine Gruppe, was in diesem Fall harmlos, aber verwirrend ist. Lassen Sie die Klammern besser weg.

Aber ich würde vermuten, dass Sie ersetzen können

\texttt{##lname,} 

von

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

wo \labelnameder erste Buchstabe herkommt und \labelwenn er neu ist, so etwas wie

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

\pagerefdann müssen Sie am Ende nur nacheinander auf jeden Buchstaben Folgendes anwenden :

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

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

verwandte Informationen