我尝试将首字母缩略词包与子标题一起使用。但是,即使在没有使用子标题的图形中,首字母缩略词也无法正常工作。
梅威瑟:
\documentclass[11pt]{report}
\usepackage[withpage, printonlyused]{acronym}
\usepackage{subcaption}
\begin{document}
\ac{FYI}.
\begin{figure}
\caption{\ac{TLA}}
\end{figure}
\begin{acronym}[TLA]
\acro{FYI}{for your information}
\acro{TLA}{three-letter acronym}
\end{acronym}
\end{document}
如你看到的,
- 尽管这是第一次使用,但 TLA 并未在标题中展开
- TLA 包含在列表中,但没有页码(这是我更关心的)
我发现了(2)的解决方法:
\caption{\ac{TLA}\protect\label{acro:TLA}}
但是,我尝试将其添加到其自身\protect
的扩展中\ac
(在这行),却没有任何效果,这很奇怪。
通过跟踪编译,我可以看 \protected@write\@auxout...
正在扩展,但实际上并未写入辅助文件。子标题是否重新定义事物以某种方式吞噬辅助输出?
答案1
如果没有 caption/subcaption 包,如果字幕文本适合一行,则将对其进行一次求值,如果不适合,则将对其进行两次求值。使用 caption/subcaption 包时,字幕文本将始终被求值两次。
这里的问题是,\ac
将被评估两次,但实际上只有第二次评估被排版。只需使用更长的标题,就可以强制解决这个问题,而无需使用 caption/subcaption 包:
\documentclass[11pt]{report}
\usepackage[withpage, printonlyused]{acronym}
\begin{document}
\ac{FYI}.
\begin{figure}
\caption{\ac{TLA} -- And some more text so the caption text will be evaluated twice.}
\end{figure}
\begin{acronym}[TLA]
\acro{FYI}{for your information}
\acro{TLA}{three-letter acronym}
\end{acronym}
\end{document}
一个不道德的解决方法是抑制对的第一次评估\ac
,例如:
\documentclass[11pt]{report}
\usepackage[withpage, printonlyused]{acronym}
\usepackage{caption}
\makeatletter
\g@addto@macro\caption@prepareslc{%
\let\ac\@firstofone}
\makeatother
\begin{document}
\ac{FYI}.
\begin{figure}
\caption{\ac{TLA} -- And some more text so the caption text will be evaluated twice.}
\end{figure}
\begin{acronym}[TLA]
\acro{FYI}{for your information}
\acro{TLA}{three-letter acronym}
\end{acronym}
\end{document}
\ac
虽然这似乎可以正常工作,但它解决了一个问题,但又产生了一个新问题:如果第一次使用单行检查,它现在无法正常工作- 这可能会导致对齐字幕不正确。例如:
\documentclass[11pt]{report}
\usepackage[withpage, printonlyused]{acronym}
\usepackage{caption}
\makeatletter
\g@addto@macro\caption@prepareslc{%
\let\ac\@gobble}
\makeatother
\begin{document}
\ac{FYI}.
\begin{figure}
\caption{\ac{TLA} -- And some more text and some more text.}
\end{figure}
\begin{acronym}[TLA]
\acro{FYI}{for your information}
\acro{TLA}{three-letter acronym}
\end{acronym}
\end{document}
由于适当的解决方案是将 caption 包适配到 accorim 包,因此我在此填写了一个错误报告:
https://github.com/axelsommerfeldt/caption/issues/10
附录
我刚刚花了一些时间查看了首字母缩略词的来源,发现重新定义和单行检查的\acused
内部命令似乎是一个合适的解决方案。例如,此文档现在给出了正确的标题对齐方式:\AC@placelabel
\documentclass[11pt]{report}
\usepackage[withpage, printonlyused]{acronym}
\usepackage{caption}
\makeatletter
\g@addto@macro\caption@prepareslc{%
\let\acused\@gobble
\let\AC@placelabel\@gobble}
\makeatother
\begin{document}
\ac{FYI}.
\begin{figure}
\caption{\ac{TLA} -- And some more text and some more text.}
\end{figure}
\begin{acronym}[TLA]
\acro{FYI}{for your information}
\acro{TLA}{three-letter acronym}
\end{acronym}
\end{document}
请让我知道使用此解决方案是否一切正常——如果是,我想将此补丁放入字幕包中。(如果不行,我想改进补丁。)谢谢!