我正在使用该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}