我创建了一个非常小的数据库,用于datatool
在表格的每一行存储两个值。首先是运行 ID,其次是生成的尺寸(转换为毫米),这是我计算出的要在此列表中注册/保存的每个输入图像的宽度。
注册完所有图片后,我想先对列表进行排序,然后再进行进一步处理。不幸的是,DTLsort
seams 将该数字解释为其他内容,而不是数字,因此生成的排序列表不符合预期。
我需要将图像尺寸的值作为哪种数据类型插入数据库,以便DTLsort
可以正确排序?或者我需要设置任何开关/标志,以便DTLsort
知道如何解释列的值?以下是我目前得到的结果:
\documentclass{article}
\usepackage{datatool}
\usepackage{graphicx}
\def\dimtomm#1{\the\numexpr\dimexpr#1\relax*635/118407168\relax}
\newsavebox\imagebox
\newcommand{\regimg}[2]{%
\sbox{\imagebox}{\includegraphics[height=5cm]{#1}}%
\DTLnewrow{list}%
\dtlexpandnewvalue%
\DTLnewdbentry{list}{label}{#2}%
\DTLnewdbentry{list}{width}{\dimtomm{\wd\imagebox}}%
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}%
\DTLifdbexists{lists}{\DTLcleardb{lists}}{\DTLnewdb{lists}}%
}{%
\DTLsort{width=descending}{list}
\DTLdisplaydb{list}
}
\begin{document}
\begin{sortedlist}
\regimg{img01.jpg}{1}
\regimg{img02.jpg}{2}
\regimg{img03.jpg}{3}
\regimg{img04.jpg}{4}
%...
\end{sortedlist}
\end{document}