如何使用 latexdb 和 mysql 创建索引或目录?

如何使用 latexdb 和 mysql 创建索引或目录?

我有一个数据库,里面全是姓名、地址等。我们在工作中使用它们来确保只有数据库中的人才能进入(如果他们做错了什么,则被拒绝进入)。我用 pdflatexdb 创建了一个文档,通过使用 longtable,我现在有了一个“工作”文档,如果需要的话,我可以使用它。

但是,随着我们每天将人员添加到数据库中,“列表”变得越来越大,并且越来越难以管理,例如扫描姓名或 ID 号等。我想弄清楚如何创建一个“索引”,以显示姓氏(数据库中的字段)以哪些页面开头... 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}

诸如 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}

在此处输入图片描述

在此处输入图片描述

相关内容