如果有缩写,我希望自动添加缩写列表。
\ac
我正在使用缩写的首字母缩略词,目前正尝试使用 totcount来计算 命令。
\documentclass[english, a4paper, 10pt]{article}
%abbreviations
\usepackage[printonlyused]{acronym}
%count acronyms
\usepackage{totcount}
\newtotcounter{acro_num}
\def\oldac{} \let\oldac=\ac
%FIXME_1: \def\ac{\stepcounter{acro_num}\oldac}
\begin{document}
\section{Document Start}
%list of abbrev
\ifnum\totvalue{acro_num}>0%
\section*{List of Abbreviations}
\fi
\begin{acronym}[12345678]
\setlength{\parskip}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\itemsep}{0pt}
%list of acronyms
\acro{ABR}{abbreviation}
\end{acronym}
\ifnum\totvalue{acro_num}>0%
\clearpage
\fi
%reset abreviations
\acresetall
%document
\section{Amazing...}
%FIXME_2: \ac{ABR} is working!
Bla bla...
\end{document}
问题:
如果FIXME_1
被注释掉并且FIXME_2
被注释掉,文档中就会出现空格(看起来很奇怪,尤其是有部分内容!)
(PS:\ifnum
绕行整块街区是行不通的)
有人可以帮忙吗?
非常感谢!
答案1
原始 MWE 的问题在于,acro_num
文档开头的计数始终为零,因此测试必然失败。
可以通过将值存储acro_num
到文档末尾的另一个计数器.aux
(在内\AtEndDocument
)并在文档启动时再次读取来绕过此问题,在\AtBeginDocument
一如既往,二必须运行 (pdf)latex......
还有一个附加内容(但不是要求的)\listofacronyms
,旨在显示在哪个页面上使用了首字母缩略词。
\documentclass[english, a4paper, 10pt]{article}
\usepackage{etoolbox}
%abbreviations
\usepackage[printonlyused]{acronym}
%count acronyms
\usepackage{totcount}
\newtotcounter{acro_num}
\let\oldac=\ac
\renewcommand{\ac}[1]{\stepcounter{acro_num}\oldac{#1}%{
\addcontentsline{lac}{section}{\protect{\textbf{#1}\hspace*{0em}}}%
}%
\newcommand{\ListOfAcronymsname}{List of Acronyms}
\makeatletter
\newcommand\listofacronyms{%
\section*{\ListOfAcronymsname}
\@mkboth{%
\MakeUppercase\ListOfAcronymsname}{\MakeUppercase\ListOfAcronymsname}%
\@starttoc{lac}%
}
\makeatother
\newcommand{\listofabbreviations}{
\ifnumgreater{\number\value{acro_num}}{0}{%
\section*{List of Abbreviations}
\begin{acronym}[12345678]
\setlength{\parskip}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\itemsep}{0pt}
%list of acronyms
\acro{ABR}{abbreviation}
\acro{OMG}{Oh my god!}
\acro{EPR}{Einstein-Rosen-Podolsky}
\end{acronym}
\clearpage
\setcounter{acro_num}{0} % reset the counter
}{%
}%
}%
\newcounter{TotalNumberUsedAcronyms}
\makeatletter
\AtEndDocument{%
\immediate\write\@auxout{%
\string\setcounter{TotalNumberUsedAcronyms}{\number\value{acro_num}}}%
}%
\AtBeginDocument{%
\setcounter{acro_num}{\number\value{TotalNumberUsedAcronyms}}
}
\begin{document}
\tableofcontents
\listofabbreviations
\section{Document Start}
%reset abreviations
\acresetall
%document
\section{Amazing...}
\ac{ABR}
\ac{OMG}
\newpage
\ac{EPR}
There are \arabic{acro_num} acronyms, for example \ac{OMG}
Bla bla...
\end{document}
答案2
它将有关使用的缩写词的信息写入辅助文件\jobname.acr
。如果模式发生变化,则需要多次运行 LaTeX。
\documentclass[english, a4paper, 10pt]{article}
\usepackage[printonlyused]{acronym}
\InputIfFileExists{\jobname.acr}{\def\haveACRO{0}}
\immediate\openout15=\jobname.acr\relax
\let\oldac=\ac
\def\ac{%
\immediate\write15{\string\gdef\string\haveACRO{1}}\oldac} %
\AtEndDocument{\closeout15}
\begin{document}
\section{Document Start}
\ifnum\haveACRO>0 \section*{List of Abbreviations} \fi
\begin{acronym}[12345678]
%list of acronyms
\acro{ABR}{abbreviation}
\acro{ANC}{African National Congress}
\end{acronym}
\ifnum\haveACRO>0 \clearpage \fi
\acresetall
\section{Amazing...}
\ac{ABR} is working!
\ac{ANC} too
Bla bla...
\end{document}
答案3
感谢您的快速回答!
事实上,我错了。
解决方案:\ifnum
整个街区是工作,它只需要3 次编译运行。
评论:totcount 包计算出现的总次数。这意味着,即使在文档的开头\total{acro_num}
(和)也不为 0(当然,假设编译运行足够多,并且文档中\totvalue{acro_num}
有一个)。\ac
PS:奇怪的重新定义\ac
取自 totcount 的文档;-)
(见总计数文件第2页)
再次感谢。
工作示例:
\documentclass[english, a4paper, 10pt]{article}
%abbreviations
\usepackage[printonlyused]{acronym}
%count acronyms
\usepackage{totcount}
\newtotcounter{acro_num}
\def\oldac{} \let\oldac=\ac
\def\ac{\stepcounter{acro_num}\oldac}
\begin{document}
\section{Document Start}
%list of abbrev
\ifnum\totvalue{acro_num}>0%
\section*{List of Abbreviations}
\begin{acronym}[12345678]
\setlength{\itemsep}{0pt}
%list of acronyms
\acro{ABR}{abbreviation}
\end{acronym}
\clearpage
\fi
%reset abreviations
\acresetall
%document
\section{Amazing...}
%\ac{ABR} is working!
Bla bla...
\end{document}