![使用下划线对项目列表进行排序](https://linux22.com/image/378975/%E4%BD%BF%E7%94%A8%E4%B8%8B%E5%88%92%E7%BA%BF%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%88%97%E8%A1%A8%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F.png)
我正在尝试按字母顺序对一堆项目进行排序(用于编码基础),并且自然许多方法名称都有下划线。通常,我可以使用 sortedlist 对 LaTeX 中的任意数量的项目进行排序而不会出现任何问题,但似乎如果某个项目在下划线之前相同,则 LaTeX 会抛出与无限循环相关的错误
"! TeX capacity exceeded, sorry [input stack size=5000]."
以下是我的文档
\documentclass[10pt,a4paper,draft]{article}
\usepackage{graphicx}
\usepackage[amssymb]{SIunits}
\usepackage{amssymb}
\usepackage{calc}
\usepackage{framed}
\usepackage[pdfborder={0 0 0}]{hyperref}
\usepackage{color}
\usepackage{datatool}
\parindent=10pt
\hoffset=0pt
\voffset=0pt
\oddsidemargin=0.5in
\setlength\textwidth{\paperwidth-2.5in-\oddsidemargin}
\usepackage{graphicx,amsmath,amssymb,mathrsfs,array,longtable,delarray,verbatim,epsfig}
%\graphicspath{{Macintosh HD\Users\Luke\Google Drive\Triton\Procedures}}
\begin{document}
\newcommand{\LN}{$\mathrm{LN_2}$~}
\newcommand{\HeThree}{$\mathrm{^3He}$~}
\newcommand{\sortitem}[1]{%
\DTLnewrow{list}% Create a new entry
\DTLnewdbentry{list}{description}{#1}% Add entry as description
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}% Create new/discard old list
}{%
\DTLsort{description}{list}% Sort list
\begin{itemize}%
\DTLforeach*{list}{\theDesc=description}{%
\item \theDesc}% Print each item
\end{itemize}%
}
\begin{sortedlist}
\sortitem{gauss\_cf2()}
\sortitem{lorenzian\_cf()}
\sortitem{linear\_cf()}
\sortitem{eq\_lorentz()}
\sortitem{eq\_linear()}
\end{sortedlist}
\end{document}
如果我删除最后一项,编译会成功。因此,它似乎可以很好地处理下划线,但是如果项在下划线之前相同,它似乎无法排序。
有人知道怎么解决这个问题吗?这对于我们的文档数据库来说非常方便。
答案1
您可以添加删除下划线的条目:
\documentclass[10pt,a4paper,draft]{article}
\usepackage{graphicx}
\usepackage[amssymb]{SIunits}
\usepackage{amssymb}
\usepackage{calc}
\usepackage{framed}
\usepackage{color}
\usepackage{datatool}
\usepackage[pdfborder={0 0 0}]{hyperref}
\parindent=10pt
\hoffset=0pt
\voffset=0pt
\oddsidemargin=0.5in
\setlength\textwidth{\paperwidth-2.5in-\oddsidemargin}
\usepackage{graphicx,amsmath,amssymb,mathrsfs,array,longtable,delarray,verbatim,epsfig}
%\graphicspath{{Macintosh HD\Users\Luke\Google Drive\Triton\Procedures}}
\begin{document}
\newcommand{\LN}{$\mathrm{LN_2}$~}
\newcommand{\HeThree}{$\mathrm{^3He}$~}
\newcommand{\sortitem}[1]{%
\DTLnewrow{list}% Create a new entry
\DTLnewdbentry{list}{description}{#1}% Add entry as description
\begingroup
\def\_{}%
\edef\x{\endgroup\noexpand\DTLnewdbentry{list}{no-us-description}{#1}}\x
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}% Create new/discard old list
}{%
\DTLsort{no-us-description}{list}% Sort list
\begin{itemize}%
\DTLforeach*{list}{\theDesc=description}{%
\item \theDesc}% Print each item
\end{itemize}%
}
\begin{sortedlist}
\sortitem{gauss\_cf2()}
\sortitem{lorenzian\_cf()}
\sortitem{linear\_cf()}
\sortitem{eq\_lorentz()}
\sortitem{eq\_linear()}
\end{sortedlist}
\end{document}