页边空白处的缩写长版本

页边空白处的缩写长版本

我正在使用该glossaries包在文档中输入首字母缩略词scrbook。目前,我\gls在文本中使用,在表格中使用\acrshort& \acrlong(以手动控制表格)。

因为我的论文中使用了很多首字母缩略词,所以我希望 LaTeX 在使用时\gls在段落的边缘(右侧或左侧,因为它是双面文档,并且可以缩小文本)显示首字母缩略词的长版本,除了每个章节中第一次出现的情况,因为长版本会自动输入到文本中,并且仅在 中\mainmatter

以下是 MWE:

    \documentclass[chapterprefix,twoside,12pt,DIV=12]{scrbook}
    \KOMAoptions{headsepline=true, chapterprefix=true}
    \usepackage{lmodern}
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[french]{babel}
    \usepackage{setspace}
    \setstretch{1.5}
    \usepackage[bottom]{footmisc}

    \usepackage[acronym,smallcaps]{glossaries}
    \makeglossaries

\newglossarystyle{long-ucdesc}{%
  \setglossarystyle{long}%
    \renewcommand{\glossentry}[2]{%
    \glsentryitem{##1}\glstarget{##1}{\glossentryname{##1}} &
    \Glossentrydesc{##1}\glspostdescription\space ##2\tabularnewline
  }%
}

\newacronym{unesco}{unesco}{United Nations Educational, Scientific and Cultural Organization}

\begin{document}
\frontmatter
\mainmatter
\gls{unesco} ......
\gls{unesco}
\appendix
\backmatter
\printglossary[type=acronym, style=long]\label{listofacronyms}

\end{document}

我不知道从哪里开始做这件事。我看到这个包marginnote可以用笔记做一些类似的事情,但仅此而已。

编辑:我看到有些人使用了这个包glossaries-extra,例如答案这里,但我无法让它工作(某些功能似乎已被弃用)。

答案1

我们需要使用重新定义首字母缩略词的格式\defglsentryfmt

\makeatletter  
\defglsentryfmt[acronym]{\glsgenacfmt  
\ifglsused{\glslabel}{\if@mainmatter\marginpar{{\scriptsize
\textsf{\glsentrylong{\glslabel}}}}\fi}{}}
\makeatother

如果我们需要原始定义,例如在类似表格的环境中,我们需要使用 \mhacrshort\mhacrshort定义

\newcommand{\mhacrshort}[1]{\acronymfont{\glsentryshort{#1}}}
\newcommand{\mhacrlong}[1]{\glsentrylong{#1}}

这是一个完整的代码,它不会在每页上将长格式写入边距超过一次。

\documentclass[chapterprefix,twoside,12pt,DIV=12]{scrbook}
\KOMAoptions{headsepline=true, chapterprefix=true}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage[onehalfspacing]{setspace}
\usepackage[bottom]{footmisc}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{etoolbox}

\usepackage[acronym,smallcaps]{glossaries}
\makeglossaries

\makeatletter  
\defglsentryfmt[acronym]{\glsgenacfmt  
\ifglsused{\glslabel}{\if@mainmatter
\expandafter\ifx\csname mhused\glslabel\endcsname\relax
\expandafter\gdef\csname mhused\glslabel\endcsname{}%
\xappto\mhclearacrmargin{\global\expandafter\expandafter\expandafter\let\expandafter\noexpand\csname mhused\glslabel\endcsname\relax}\marginpar{{\scriptsize
\textsf{\glsentrylong{\glslabel}}}}\fi\fi}{}}

\patchcmd\@outputpage{\botmark}{\botmark \mhclearacrmargin \gdef\mhclearacrmargin{}}{}{}{}
\makeatother

\newcommand{\mhacrshort}[1]{\acronymfont{\glsentryshort{#1}}}
\newcommand{\mhacrlong}[1]{\glsentrylong{#1}}

\newcommand{\mhclearacrmargin}{}

\newacronym{unesco}{unesco}{United Nations Educational, Scientific and Cultural Organization}
\newacronym{onu}{onu}{Organisation des Nations Unies}

\begin{document}
\frontmatter
\mainmatter
\chapter{test}
\section{test}
\gls{unesco} ...... \gls{onu}

\gls{onu} ... \gls{unesco}

\gls{onu} ... \gls{unesco}

\newpage

\gls{unesco} ...... \gls{onu}

\gls{onu} ... \gls{unesco}

\gls{onu} ... \gls{unesco}
\begin{table}[p]
\begin{tabular}{@{}rcl@{}}
\toprule
\textbf{Colonne 1} & \textbf{Colonne 2} & \textbf{Colonne 3} \\
\midrule
\mhacrlong{onu} & 1 & \mhacrshort{unesco} \\
\mhacrshort{onu} & 4 & \mhacrshort{unesco}  \\
\bottomrule
\end{tabular}
\end{table}

\appendix
\backmatter
\gls{unesco}
\printglossary[type=acronym, style=long]\label{listofacronyms}

\end{document}

相关内容