我目前已在 .cls 文件中写入 Latex 代码,以显示如下缩写列表:
\newcommand\listnomenclature{Abbreviations}
\usepackage{longtable}
\newcommand\listofnomenclature[2]{
\btypeout{\listnomenclature}
\addtotoc{\listnomenclature}
\chapter*{\listnomenclature
\@mkboth{
\MakeUppercase\listnomenclature}{\MakeUppercase\listnomenclature}}
\begin{longtable}[c]{#1}#2\end{longtable}\par
\cleardoublepage
}
其使用方式如下:
\listofnomenclature{ll}{
GHG & GreenHouse Gasses \\
CoMP & Cooperative Multi-Point \\
ITU & International Telecommunication Union \\
}
是否可以修改 .cls 文件中的代码,以便对输出进行排序字母数字而不彻底改变其使用方式?
答案1
只是为了好玩:这里有一个使用 LaTeX3 模块l3sort
和\pdfstrcmp
原始的解决方案。
\documentclass{book}
\newcommand*\listnomenclature{Abbreviations}
\usepackage{longtable}
\usepackage{xparse,expl3}
% make @ letter and switch to expl3 syntax:
\makeatletter\ExplSyntaxOn
% variables:
\prop_new:N \l__ivan_nomenclature_prop
\seq_new:N \l__ivan_nomenclature_seq
% function for sorting property lists according to keys:
\cs_new:Npn \ivan_sort_prop:N #1
{
\seq_clear:N \l_tmpa_seq
\prop_map_inline:Nn #1
{ \seq_put_right:Nn \l_tmpa_seq { ##1 } }
\seq_sort:Nn \l_tmpa_seq
{
\int_compare:nTF { \pdftex_strcmp:D { ##1 } { ##2 } = -1 }
{ \sort_return_same: }
{ \sort_return_swapped: }
}
\prop_clear:N \l_tmpa_prop
\seq_map_inline:Nn \l_tmpa_seq
{
\prop_get:NnN #1 { ##1 } \l_tmpa_tl
\prop_put:NnV \l_tmpa_prop { ##1 } \l_tmpa_tl
}
\prop_set_eq:NN #1 \l_tmpa_prop
}
% parse the table like input:
\cs_new:Npn \__ivan_add_to_prop:Nw #1#2 \q_stop
{ \prop_put:Nnn #1 { #2 } { #3 } }
% internal list command:
\cs_new:Npn \ivan_list_of_nomenclature:nn #1#2
{
\seq_set_split:Nnn \l__ivan_nomenclature_seq { \\ } { #2 }
\seq_map_inline:Nn \l__ivan_nomenclature_seq
{ \__ivan_add_to_prop:Nw \l__ivan_nomenclature_prop ##1 \q_stop }
\ivan_sort_prop:N \l__ivan_nomenclature_prop
% \btypeout{\listnomenclature} % unknown command, commented out
% \addtotoc{\listnomenclature} % unknown command, commented out
\chapter*{ \listnomenclature }
\@mkboth
{ \MakeUppercase\listnomenclature }
{ \MakeUppercase\listnomenclature }
\begin{longtable}[c]{#1}
\prop_map_inline:Nn \l__ivan_nomenclature_prop
{ ##1 & ##2 \\ }
\end{longtable}
\cleardoublepage
}
% document level command:
\NewDocumentCommand \listofnomenclature { m+m }
{ \ivan_list_of_nomenclature:nn { #1 } { #2 } }
% switch expl3 syntax off and make @ other again:
\ExplSyntaxOff\makeatother
\begin{document}
\listofnomenclature{ll}{
GHG & GreenHouse Gasses \\
CoMP & Cooperative Multi-Point \\
ITU & International Telecommunication Union
}
\end{document}
答案2
我决定保留一个首字母缩略词数据库,而不是在每个文档中硬编码它们。这样我就可以在其他文档中重复使用它们。附件是我使用词汇表包的代码。我意识到这很简单,但我还是会分享它来帮助任何认为它有用的人。
\usepackage[acronym,nonumberlist,shortcuts]{glossaries}
\glossarystyle{long}
\renewcommand*{\acronymname}{<whatever name you choose>} % rename title
\renewcommand*{\glspostdescription}{} % remove dot at the end of description
\makeglossaries
\newcommand\setacronymdb[1]{\loadglsentries{#1}} % the name of the acronym database
\newcommand\listofnomenclature{
\printglossaries
\par
\cleardoublepage
}
它的用法如下。请注意,在这种情况下,缩写数据库名称是 Abbrev:
\documentclass[a4paper, 12pt, oneside]
\setacronymdb{Abbrev}
\begin{document}
\listofnomenclature
\section{Introduction}
This is how I refer to the samples of acronym in the database named Abbrev: \acs{CO2}.
\end{document}
缩写词数据库只是一个普通的 .tex 文件 (Abbrev.tex),其条目格式如下
\newacronym{<ref>}{<abbreviated form>}{<description>}
例如
\newacronym{CO2}{CO$_{2}$}{Carbon diOxide}
\newacronym{GSM}{GSM}{Global System for Mobile Communications}
希望这可以帮助。
答案3
我发现这使用 emacs 宏的解决方案。
这不是使用 Latex 对首字母缩略词列表进行排序的方法,但可以解决问题。