包含多行的表格会导致缩写错误

包含多行的表格会导致缩写错误

我对下表有一个奇怪的问题:

\begin{table}[h]
    \begin{tabular}{c | ccccccc }
        \toprule
        n & A2 & A3 & d2 & D3 & D4 & B3 & B4 \\
        \midrule
        2 & 1.880 & 2.659 & 1.128 & 0 & 3.267 & 0 & 3.267 \\
        3 & 1.023 & 1.954 & 1.693 & 0 & 2.574 & 0 & 2.568 \\
        4 & 0.729 & 1.628 & 2.059 & 0 & 2.282 & 0 & 2.266 \\
        5 & 0.577 & 1.427 & 2.326 & 0 & 2.114 & 0 & 2.089 \\
        % OTHER LINES UP TO 25
        \bottomrule
    \end{tabular}
    %caption{}
    \label{tab:controlchartsparamenter}
\end{table}

最多 10 行(可能更多)一切都很好,但是随着行数的增加,我收到以下错误(与表格无关)和许多警告。

文件:forest.sty (第 168 行)

错误:包词汇表错误:词汇表条目“SPC”尚未定义。

forest.sty 中的 LINE:

\RequirePackage[#1]{forest-lib-#2}%

首字母缩略词 SPC 仅在此处使用:

\section{\acrlong{spc}}
\acrfull{spc} is ...

其在序言中定义为:

\newacronym{spc}{SPC}{Statistical Process Control}

主文件中的警告如下:

警告:PDF 字符串 (PDFDocEncoding) 中不允许使用标记:(hyperref) 删除“\acrlong”

线:

\subsection{\acrfull{pvm}}

警告:复合字母\textasciimacron+X'(hyperref) not defined in PD1 encoding,(hyperref) removing\textasciimacron'

线:

\subsection{\={X}-R and \={X}-s charts}

然后我收到这个警告森林.猪圈

警告:没有文件 thesis.acr。

以及我的序言文件:

警告:名称{glo:mpc}已被引用但不存在,已由固定名称替换


我在 Linux Mint 上使用 texlive 2017、书籍类以及我定义的许多包序言文件,包括:

\RequirePackage{booktabs}
\RequirePackage{threeparttable}
\RequirePackage{hyperref}
\RequirePackage[toc,acronym]{glossaries}
\RequirePackage[edges]{forest}

在我创建表格之前,一切都运行正常,然后我收到错误,然后如果我删除大部分行(无论删除哪些行),错误就会消失。我真的不明白长表格怎么会产生带有首字母缩略词和森林包的错误。有人知道吗?

谢谢你!

例子

我从包含许多文件的大型文档中创建的唯一示例是以下示例。首字母缩略词在森林中出现错误,与表格的长度和存在无关。无论如何,在添加那个长表格之前,\section{\acrlong{acr}} 在我的文档中运行良好。

\documentclass[11pt,a4paper,twoside,openright,draft]{book}

\usepackage{booktabs}
\usepackage{threeparttable}
\usepackage{hyperref}
\usepackage[toc,acronym]{glossaries}
\usepackage[edges]{forest}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\section{\acrlong{acr}}

\end{document}

这个最小的例子在 forest.sty 的第 50 行出现了以下错误(在例子中甚至没有使用):

软件包词汇表错误:词汇表条目“ACR”尚未定义。\end{document}

\usetikzlibrary{shapes} % line 50

答案1

我们可以用更短的 MWE 来演示这个问题:

\documentclass{book}

\usepackage[acronym]{glossaries}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\section{\acrlong{acr}}

\end{document}

这会导致错误:

! Package glossaries Error: Glossary entry `ACR' has not been defined.

以下情况不会发生错误:

\documentclass{book}

\usepackage[acronym]{glossaries}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\chapter{Sample}
\section{\acrlong{acr}}

\end{document}

一切看起来都很好:

第 1 章示例 1.1 缩写

问题不是实际的章节标题,而是页面标题。该类book默认为headings页面样式,但\chapter用于\thispagestyle{plain}章节的第一页。如果我添加一些虚拟填充文本,错误会再次出现第 3 页

\documentclass{book}

\usepackage{lipsum}% dummy text
\usepackage[acronym]{glossaries}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\chapter{Sample}
\section{\acrlong{acr}}

\lipsum[1-15]% dummy text

\end{document}

在第 1 页上,页眉为空(因为plain页面样式有效)。在第 2 页上,页眉包含章节标题。在第 3 页上,页眉包含节标题,在本例中为,\acrlong{acr}但页面样式将其封装为\MakeUppercase,这会将标签转换acr为大写,因此现在您有,\acrlong{ACR}但没有使用标签定义的条目ACR,这就是导致错误的原因。

我怀疑发生的情况是,您的表格在第 2 页,但是当您添加额外的行时,页面上没有足够的空间,因此它被移动到第 3 页,此时发生错误,因为\acrlong{acr}现在在页眉中。

最简单的解决方法是使用\glsentrylong而不是\acrlong

\documentclass{book}

\usepackage{lipsum}% dummy text
\usepackage[acronym]{glossaries}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\chapter{Sample}
\section{\glsentrylong{acr}}

\lipsum[1-15]

\end{document}

扩展包中还有其他可用的选项glossaries-extra,详见章节标题、页眉、标题和内容中的条目。 例如:

\documentclass{book}

\usepackage{lipsum}% dummy text
\usepackage[acronym]{glossaries-extra}

\glssetcategoryattribute{acronym}{headuc}{true}
\setabbreviationstyle[acronym]{long-short}

\newacronym{acr}{ACR}{Acronym}

\begin{document}

\chapter{Sample}
\section{\glsfmtlong{acr}}

\lipsum[1-15]

\end{document}

相关内容