自动短/长缩写和缩写表

自动短/长缩写和缩写表

像往常一样,我的论文中有很多缩写(首字母缩略词、首字母缩写词等),但我对使用的方式并不满意glossaries

我“仅”需要以下内容:

  1. 缩写被定义为缩写和其完整版本的简单组合。示例:“GEOAA”->“缩写的绝佳示例”
  2. 我第一次使用缩写时,应该使用全称,后面跟着括号中的简称:“Great Example Of An Abbreviations (GEOAA)”。之后只使用简称。
  3. 对于一些重要的缩写,我喜欢能够为每一章重置这个(2.)。
  4. 需要一个“缩写列表”,即一个\chapter*标题和一个两列表格(supertabular,,longtable...),按字母顺序列出这些缩写。
  5. 奖励:缩写应该可以在不同的文档之间“轻松”共享,但这并不那么重要。

我找到了一些关于如何使用 来做到这一点的材料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为了最大限度地电子工具箱

相关内容