latexdb と mysql を使用してインデックスまたは TOC を作成するにはどうすればよいでしょうか?

latexdb と mysql を使用してインデックスまたは TOC を作成するにはどうすればよいでしょうか?

名前、住所などがいっぱいのデータベースがあります。職場では、データベースに登録されている人だけがアクセスを許可されるようにするために、このデータベースを使用しています (または、何か悪いことをしたことがある場合はアクセスを拒否されます)。pdflatexdb でドキュメントを作成し、longtable を使用することで、必要に応じて使用できる「実用的な」ドキュメントができました。

しかし、毎日データベースに人を追加すると、「リスト」は大きくなり、名前や ID 番号などをスキャンする点で管理が難しくなります。私が理解したいのは、姓 (DB のフィールド) がどのページから始まるかを示す「インデックス」を作成する方法です。つまり、A で始まる名前は 1 ページ目、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}

size コマンドは\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}

ここに画像の説明を入力してください

ここに画像の説明を入力してください

関連情報