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 \Large
akzeptieren 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 \labelname
der erste Buchstabe herkommt und \label
wenn 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}
\pageref
dann 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}