下面的例子会导致问题:
\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}
\usepackage[record,acronym,shortcuts=ac]{glossaries-extra}
\usepackage{relsize}
\setabbreviationstyle[\acronymtype]{long-short-sm}
\usepackage{graphicx}
\newcommand{\myfmt}[1]{\scalebox{.35}{#1}}
\renewcommand*{\glsabbrvsmfont}[1]{\myfmt{#1}}%\renewcommand*{\glsnamefont}[1]{\myfmt{#1}}
\newcommand{\glspr}[1]{\glsxtrp{long}{#1}}
\GlsXtrLoadResources[src={entries}, selection={all}, type=\acronymtype, sort={letternumber-upperlower}]
\usepackage{filecontents}
\begin{filecontents}{entries.bib}
@Acronym{c,
long = {ccc},
short = {C}}
@Acronym{bc,
long = {bbb \glspr{c}},
parent = {c},
short = {BC}}
@Acronym{abc,
long = {aaa \glspr{bc}},
parent = {bc},
short = {ABC}}
@Acronym{abc-d,
description = {{}\glspr{abc}~--~\emph{ddd}},
long = {{}\glspr{abc} (d)},
parent = {abc},
short = {ABC-d}}
@Acronym{abc-d-f,
description = {{}\glspr{abc-d}~--~fff},
long = {{}\glspr{abc} (d, f)},
parent = {abc-d},
short = {ABC-d-f}}
@Acronym{abc-d-g,
description = {{}\glspr{abc-d}~--~ggg},
long = {{}\glspr{abc} (d, g)},
parent = {abc-d},
short = {ABC-d-g}}
@Acronym{abc-e,
description = {{}\glspr{abc}~--~\emph{eee}},
long = {{}\glspr{abc} (e)},
parent = {abc},
short = {ABC-e}}
@Acronym{abc-e-f,
description = {{}\glspr{abc-e}~--~fff},
long = {{}\glspr{abc} (e, f)},
parent = {abc-e},
short = {ABC-e-f}}
@Acronym{abc-e-g,
description = {{}\glspr{abc-e}~--~ggg},
long = {{}\glspr{abc} (e, g)},
parent = {abc-e},
short = {ABC-e-g}}
@Acronym{h-bc,
long = {hhh \glspr{bc}},
parent = {bc},
short = {H-BC}}
@Acronym{iiii,
long = {ii ii ii ii},
short = {IIII}}
@Acronym{aaa,
long = {aaa aaa aaa},
short = {AAA}}
@Acronym{aab,
long = {aaa aaa bbb},
short = {AAB}}
\end{filecontents}
\begin{document}
\noindent Test: \ac{aab}, \ac{abc-e}, \ac{abc-e-g}.
\printunsrtglossary[type=\acronymtype,style=treegroup]
\end{document}
而期望的结果应该是这样的:
有一点是,\ac
在文档正文中使用命令引用的首字母缩略词在生成的 PDF 中不可见。不过,它们仍然占据所需空间,并且其文本存在于输出中(因为可以将其复制并粘贴到其他地方)。
此外,缩写列表在第一个以-like 命令description
开头的字段的中间被打断(在本例中)。\gls
abc-d
词汇表附加手册该软件包可能会在此类条目方面存在问题(并且这些命令前面应该有空组{}
):
如果你真的需要嵌套命令,最安全的方法是
\newabbreviation{shtml}{shtml}{{}\glsxtrp{short}{ssi} enabled \glsxtrp{short}{html}}
但请注意,有时它可能会产生一些意想不到的结果。
然而,这似乎不是这里的核心问题,因为提供的 MWE 在对与嵌套命令不直接相关的声明进行轻微修改后就能正常工作(如下所述)。
一些观察:
- 从包中删除
ocgcolorlinks
选项ocgx2
是一种解决方法,但绝对不是一个完整的解决方案。 - 更改
\scalebox{.35}{#1}
为\scalebox{1}{#1}
也是一种解决方法,但没有达到所需的效果(可能在这种情况下\scalebox
根本不会应用不必要的命令)。 - 之前导入
glossaries-extra
包hyperref
似乎也有帮助,但随后缩写的彩色链接就丢失了。 - 更改
\newcommand{\glspr}[1]{\glsxtrp{long}{#1}}
为,例如,\newcommand{\glspr}[1]{SOMETEXT\glsxtrp{long}{#1}}
似乎可以修复损坏的首字母缩略词列表的问题,但随后一些文本在列表中显示多次,但文档正文中的首字母缩略词仍然没有显示。 - 可能很明显,但更改
\renewcommand*{\glsabbrvsmfont}[1]{\myfmt{#1}}
为\renewcommand*{\glsnamefont}[1]{\myfmt{#1}}
解决了文档主体中的首字母缩略词的问题(因为基于 的graphicx
命令不再适用于它们),但根本问题仍然存在,首字母缩略词列表仍然受到影响(损坏)。\scalebox
\myfmt
答案1
使用ocgx2
包选项ocgcolorlinks
,链接文本中缩放或放入框架的部分以及包含的图形\includegraphics
需要特殊处理。只需将\ocglinkprotect{...}
它们放在周围即可。
在本案中:
\newcommand{\myfmt}[1]{\ocglinkprotect{\scalebox{.35}{#1}}}
答案2
可以用一个更小的例子来演示相同的问题:
\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}
\usepackage{graphicx}
\newcommand{\myfmt}[1]{\scalebox{.35}{#1}}
\begin{document}
\hypertarget{test}{Test Target}.
\hyperlink{test}{Test Link}.
\hyperlink{test}{\myfmt{Test Link}}.
\myfmt{\hyperlink{test}{Test Link}}.
\end{document}
第二个链接存在但不可见:
链接文本仍然可以复制,因此它存在于 PDF 中。
第三个链接可见,并达到了预期的效果。
回到glossaries-extra
,不幸的是缩写字体在超链接内,重复了上面的第二个链接示例,因此出现了相同的结果。
将格式化命令移出超链接的唯一方法是当格式化命令是设置的一部分\glstextformat
(或由textformat
属性提供)时hyperoutside=false
。这会影响首次使用时的完整格式,因此不能仅用于短格式。
如果你的简短格式中只有文本(并且不需要缩放图像),那么我建议你使用\textscale
而不是\scalebox
。例如:
\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}
\usepackage{relsize}
\newcommand{\myfmt}[1]{\textscale{.35}{#1}}
\begin{document}
\hypertarget{test}{Test Target}.
\hyperlink{test}{Test Link}.
\hyperlink{test}{\myfmt{Test Link}}.
\myfmt{\hyperlink{test}{Test Link}}.
\end{document}
无论位于超链接内部还是外部,此方法均有效。
\documentclass{article}
\usepackage[colorlinks,linkcolor=blue]{hyperref}
\usepackage[ocgcolorlinks]{ocgx2}
\usepackage[record,acronym,shortcuts=ac]{glossaries-extra}
\usepackage{relsize}
\setabbreviationstyle[acronym]{long-short-sm}
\newcommand{\myfmt}[1]{\textscale{.35}{#1}}
\renewcommand*{\glsabbrvsmfont}[1]{\myfmt{#1}}
\newcommand{\glspr}[1]{\glsxtrp{long}{#1}}
\GlsXtrLoadResources[src={entries}, selection={all}, type=\acronymtype, sort={letternumber-upperlower}]
\usepackage{filecontents}
\begin{filecontents}{entries.bib}
@Acronym{c,
long = {ccc},
short = {C}}
@Acronym{bc,
long = {bbb \glspr{c}},
parent = {c},
short = {BC}}
@Acronym{abc,
long = {aaa \glspr{bc}},
parent = {bc},
short = {ABC}}
@Acronym{abc-d,
description = {{}\glspr{abc}~--~\emph{ddd}},
long = {{}\glspr{abc} (d)},
parent = {abc},
short = {ABC-d}}
@Acronym{abc-d-f,
description = {{}\glspr{abc-d}~--~fff},
long = {{}\glspr{abc} (d, f)},
parent = {abc-d},
short = {ABC-d-f}}
@Acronym{abc-d-g,
description = {{}\glspr{abc-d}~--~ggg},
long = {{}\glspr{abc} (d, g)},
parent = {abc-d},
short = {ABC-d-g}}
@Acronym{abc-e,
description = {{}\glspr{abc}~--~\emph{eee}},
long = {{}\glspr{abc} (e)},
parent = {abc},
short = {ABC-e}}
@Acronym{abc-e-f,
description = {{}\glspr{abc-e}~--~fff},
long = {{}\glspr{abc} (e, f)},
parent = {abc-e},
short = {ABC-e-f}}
@Acronym{abc-e-g,
description = {{}\glspr{abc-e}~--~ggg},
long = {{}\glspr{abc} (e, g)},
parent = {abc-e},
short = {ABC-e-g}}
@Acronym{h-bc,
long = {hhh \glspr{bc}},
parent = {bc},
short = {H-BC}}
@Acronym{iiii,
long = {ii ii ii ii},
short = {IIII}}
@Acronym{aaa,
long = {aaa aaa aaa},
short = {AAA}}
@Acronym{aab,
long = {aaa aaa bbb},
short = {AAB}}
\end{filecontents}
\begin{document}
\noindent Test: \ac{aab}, \ac{abc-e}, \ac{abc-e-g}.
\printunsrtglossary[type=\acronymtype,style=treegroup]
\end{document}
(无关:的可选参数\setabbreviationstyle
应该是类别标签。该命令\acronymtype
用于引用词汇表而不是类别。在原始 MWE 中,恰好扩展为与所需类别标签相同的值,但它们不一定相同,因此最好不要在需要类别标签的上下文中\acronymtype
使用。)\acronymtype