这个问题听起来可能与之前的问题类似,但我尝试做了一个极简的实现(从 verbatim 包中窃取了一些代码)。另外,我不太了解 TeX,只了解基本的 LaTeX。
无论如何:我已经实现了我自己的子图变体,并在底部使用了标题。该代码运行良好,但如果我生成一个图形列表,子图标题将在主标题之前发出,如下所示:
1.2a Blabla
1.2b More blabla
1.2 Another caption
我想通过保存子图来重新排序条目,\addcontentsline
直到\addcontentsline
主图输出。所以我写了一些简单的代码,似乎可以在一个段落内工作(lofLines
是“图列表行”的缓冲区):
\newtoks\lofLines% storage
\def\lofLinesEmpty{\lofLines{}}% empty storage
\def\lofLinesAdd#1{\lofLines\expandafter{\the\lofLines#1}}% append to storage
\def\lofLinesOut{\expandafter{\the\lofLines}}% output storage
一个简短的示例文档(不包含图形)如下:
\documentclass[a4paper,twoside]{report}
\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage{a4}
% ...
\newtoks\lofLines% storage
\def\lofLinesEmpty{\lofLines{}}% empty storage
\def\lofLinesAdd#1{\lofLines\expandafter{\the\lofLines#1}}% append to storage
\def\lofLinesOut{\expandafter{\the\lofLines}}% output storage
\lofLinesEmpty% initialize
\begin{document}
\lofLinesEmpty%
\lofLinesAdd{aa\\bb}
Some text...
\lofLinesAdd{ccc}
More text
\lofLinesOut
\end{document}
本文档输出的文本如下:
Some text... More text aa
bbccc
因此,它按预期工作(在我看来),但是当我想保存和恢复\addcontentsline
我为管理图形而编写的一些命令和环境中的实际 s 时,它们永远不会写入文件.lof
。在我看来,内容似乎在命令、环境和浮点之间丢失了,因为即使是简单的纯文本也没有在从子图标题到主文本的补丁中幸存下来……
此行的示例如下:
\lofLinesAdd{\addcontentsline{lof}{figure}{\protect%
\numberline{\thesubfigureX}{\ignorespaces{}#1}}}%
最有可能的问题在于我对 TeX 内部原理的理解有限。
答案1
考虑到使子字幕在 LOF 中正常工作所需要做的所有事情,使用子字幕包和设置\@captype
(如果需要)会更容易。
这是基于另一个问题。
\documentclass{article}
\usepackage{graphicx}
\usepackage{caption}
\usepackage[list=true]{subcaption}
\begin{document}
\listoffigures
\vspace{\intextsep}%
\begin{minipage}{\textwidth}
\expandafter\def\csname @captype\endcsname{figure}% fake figure
\centering
\begin{subfigure}[t]{.5\textwidth}
\centering
\includegraphics[width=0.9\textwidth]{example-image-a}
\caption{subcaption 1}
\label{fig:sub1}
\end{subfigure}%
\begin{subfigure}[t]{.5\textwidth}
\centering
\includegraphics[width=0.3\textwidth]{example-image-b}
\caption{subcaption 2}
\label{fig:sub2}
\end{subfigure}
\caption{Caption}
\label{fig:fig}
\end{minipage}
\end{document}