Как создать индекс или оглавление с помощью latexdb и mysql?

Как создать индекс или оглавление с помощью latexdb и mysql?

У меня есть база данных, полная имен, адресов и т. д. Мы используем их на работе, чтобы убедиться, что только люди из базы данных допускаются внутрь (или им запрещен вход, если они когда-либо сделали что-то не так). Я создал документ с помощью pdflatexdb, и с помощью longtable у меня теперь есть «рабочий» документ, с которым я могу жить, если придется.

Однако, поскольку мы добавляем людей в базу данных каждый день, «список» становится больше и менее управляемым, если говорить о сканировании имени или идентификационного номера и т. п. Я хотел бы выяснить, как создать «индекс», который покажет, на каких страницах фамилии (поле в базе данных) начинаются с... IE - имена, начинающиеся с A, находятся на первой странице, B на странице 50, C на странице 60 и т. д. Вот рабочий пример:

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

Я относительный нуб в LaTeX, поэтому, пожалуйста, будьте снисходительны, если в моем документе есть грубые ошибки (я предполагаю, что часть моего кода избыточна или даже бесполезна).

Спасибо.

решение1

Однако запустить код без пакета подключения и чего-либо, к чему можно подключиться, невозможно.

\Large{Ordered by name}

команды размера, например, \Largeне принимают аргумент, поэтому, если вы используете их в такой форме, они {}не разграничивают аргумент, а создают группу, что в данном случае безвредно, но сбивает с толку, поэтому лучше опустить скобки.

Но я предполагаю, что вы можете заменить

\texttt{##lname,} 

к

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

где \labelnameберет первую букву и делает, \labelесли она новая, что-то вроде

\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каждую букву по очереди:

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

введите описание изображения здесь

введите описание изображения здесь

Связанный контент