名前、住所などがいっぱいのデータベースがあります。職場では、データベースに登録されている人だけがアクセスを許可されるようにするために、このデータベースを使用しています (または、何か悪いことをしたことがある場合はアクセスを拒否されます)。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}