![如何使用 Latexdb 和 mysql 建立索引或目錄?](https://rvso.com/image/266389/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Latexdb%20%E5%92%8C%20mysql%20%E5%BB%BA%E7%AB%8B%E7%B4%A2%E5%BC%95%E6%88%96%E7%9B%AE%E9%8C%84%EF%BC%9F.png)
我有一個充滿姓名、地址等的資料庫。 我們在工作中使用它們來確保只有資料庫中的人員才允許進入(或拒絕進入,如果他們曾經做過錯事)。我使用 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,}
where\labelname
取得第一個字母,\label
如果它是新的,則執行 a ,類似
\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}