![自动短/长缩写和缩写表](https://linux22.com/image/239001/%E8%87%AA%E5%8A%A8%E7%9F%AD%2F%E9%95%BF%E7%BC%A9%E5%86%99%E5%92%8C%E7%BC%A9%E5%86%99%E8%A1%A8.png)
像往常一样,我的论文中有很多缩写(首字母缩略词、首字母缩写词等),但我对使用的方式并不满意glossaries
。
我“仅”需要以下内容:
- 缩写被定义为缩写和其完整版本的简单组合。示例:“GEOAA”->“缩写的绝佳示例”
- 我第一次使用缩写时,应该使用全称,后面跟着括号中的简称:“Great Example Of An Abbreviations (GEOAA)”。之后只使用简称。
- 对于一些重要的缩写,我喜欢能够为每一章重置这个(2.)。
- 需要一个“缩写列表”,即一个
\chapter*
标题和一个两列表格(supertabular
,,longtable
...),按字母顺序列出这些缩写。 - 奖励:缩写应该可以在不同的文档之间“轻松”共享,但这并不那么重要。
我找到了一些关于如何使用 来做到这一点的材料glossaries
,但对于简单的缩写来说,这实际上是过度的。此外,从来没有关于如何处理表格的良好说明。我拼凑了以下内容,两次读取缩写文件,一次用于定义,一次用于表格。这种方法可行(但没有排序等),但我真的认为我们应该在 TeX.sx 上为这个常见任务提供更好的解决方案。
% thesis.tex (main file; preamble)
\usepackage[shortcuts]{glossaries}
\newcommand*{\myacronym}[3][]{%
\newacronym[#1]{#2}{#2}{#3}%
}
\loadglsentries{acronyms}
% acronyms.tex
\myacronym{ADC}{analog-to-digital converter}
\myacronym{ASCII}{american standard code for information interchange}
\myacronym{ASIC}{application specific integrated circuit}
\myacronym{BUFG}{global clock buffer}
\myacronym{CLB}{configurable logic block}
% ...
% abbreviations.tex (loaded where the List Of Abbreviations should be displayed)
\chapter*{Abbreviations}
\thispagestyle{fancy}
\begingroup
\renewcommand{\myacronym}[2]{{#1} & {#2}\\}%
\par\noindent
\tablehead{\textbf{Abbreviation} & \textbf{Meaning}\\}%
\begin{supertabular}{@{}ll}
\input{acronyms}\\
\end{supertabular}
\endgroup
(PS:请不要介意文件名;我知道缩写和首字母缩略词之间的区别。)
答案1
像这样吗?
\documentclass[a4paper]{article}
\makeatletter
\def\@@acrodef{\@ifstar\@acrodefs\@acrodef}
\newtoks\acro@list
\newcommand{\@acrodef}[2]{%
\global\acro@list=\expandafter{\the\acro@list\@elt{#1}{#2}}%
\global\@namedef{acro@#1}{n{#1}{#2}}}
\newtoks\acro@resetlist
\newcommand{\@acrodefs}[2]{%
\global\acro@resetlist=\expandafter{\the\acro@resetlist\@elt{#1}}%
\@acrodef{#1}{#2}}
\def\acro@doresetlist{\begingroup
\def\@elt##1{\expandafter\expandafter\expandafter
\acro@reset\csname acro@##1\endcsname}\the\acro@resetlist\endgroup}
\def\acro@reset#1#2#3{\global\@namedef{acro@#2}{n{#2}{#3}}}
\newcommand{\acro}[1]{\expandafter\expandafter\expandafter
\use@acro\csname acro@#1\endcsname}
\def\use@acro#1#2#3{\ifx n#1
#3 (#2)\global\@namedef{acro@#2}{o{#2}{#3}}%
\else
#2%
\fi}
\newcommand{\listofacronyms}[1][tabular]{%
\begingroup\def\@elt##1##2{##1&##2\\}%
\@ifundefined{chapter}{\section*}{\chapter*}{\listacronymname}
\noindent\begin{#1}{@{}p{6em}p{\dimexpr\columnwidth-2\tabcolsep-6em\relax}@{}}
\the\acro@list
\end{#1}\endgroup}
\providecommand\listacronymname{List of acronyms}
\newenvironment{acronyms}{\let\acrodef\@@acrodef}{}
\newenvironment{acronyms*}{\let\acrodef\@@acrodef}{\listofacronyms}
\def\g@preto@macro#1#2{\toks0=\expandafter{#1}%
\toks2={#2}\xdef#1{\the\toks2 \the\toks0 }}
\@ifundefined{chapter}
{\g@preto@macro\section\acro@doresetlist}
{\g@preto@macro\chapter\acro@doresetlist}
\makeatother
\begin{document}
\begin{acronyms*}
\acrodef{GEOAA}{Great Example Of An abbreviations}
\acrodef{IMO}{In My Opinion}
\acrodef*{OP}{Original Poster}
\end{acronyms*}
\section{A}
\acro{GEOAA}
\acro{IMO}
\acro{IMO}
\acro{GEOAA}
\acro{OP}
\section{B}
\acro{OP}
\listofacronyms
\end{document}
缩写在环境中定义acronyms
;*-variantacronyms*
也直接打印列表。无论如何,命令 \listofacronyms 可用于在所需位置打印列表。
对于必须在章节中重置的首字母缩略词,请使用宏\acrodef*
,除了执行与 相同的操作外\acrodef
,还将第一个参数(首字母缩略词)放入列表中,以便在\chapter
列表中可以执行并将o
标记n
再次更改为。该命令\acro@doresetlist
也会添加到\section
或\chapter
,具体取决于后者是否已定义。
为了最大限度地减少对外部包的依赖,我定义了\g@preto@macro
类似于\preto
为了最大限度地电子工具箱。