我需要向期刊提交一篇文章,该期刊的补充材料格式非常烦人(您猜对了,AGU!),它需要使用 \caption 命令放置带有标题的图表,然后在文档的单独部分逐字重复标题。进行更改时剪切和粘贴标题非常繁琐,因此我想知道是否有办法使用 \ref 命令包含所有标题?像这样:
Fig. \ref{fig_lable} [all the caption copied here...]
?
答案1
下面是一个小例子,展示
- 交叉引用命令
\autoref
和\nameref
命令超链接-包裹。 - 命令
\listoffigures
。由于 LaTeX 中用于写入外部文件的寄存器的分配方式很奇怪,因此您\listoffigures
在文档中只能使用一次。因此,我提供了一个命令\listoffiguresRepeatable
,该命令可以重复分配\write
寄存器(从而销毁上一次 LaTeX 运行的 .lof 文件)直到文档的最后一页被发送到输出文件(.dvi 文件/.pdf 文件)。
为了确保在正确的时间捕获交叉引用数据,根据\label
经验法则,始终将\label
-command 放在 -command 后面\caption
。
该示例需要编译三次,且每次编译之间不能删除辅助文件。
\documentclass{article}
% In case you wish no hyperlinks and no bookmarks within the entire document:
\PassOptionsToPackage{bookmarks=false}{hyperref}%
\AtBeginDocument{\NoHyper}%
% (I know that \NoHyper actually belongs to the NoHyper environment.
% But NoHyper is an environment only because you normally want to
% disable the creation of hyperlinks only locally. But since I don't
% want to disable creation of hyperlinks locally, but for the whole
% document, I use the command directly.)
%
\usepackage{hyperref}
\usepackage{atveryend}
\usepackage{graphicx}
\makeatletter
\newcommand\Repeatable@starttoc[1]{%
\begingroup
\makeatletter
\@input{\jobname.#1}%
\if@filesw
\AfterLastShipout{%
\@ifundefined{tf@#1}{%
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
}{}%
}%
\fi
\@nobreakfalse
\endgroup
}%
\newcommand\listoffiguresRepeatable{%
\begingroup
\let\@starttoc\Repeatable@starttoc
\listoffigures
\endgroup
}%
\makeatother
\begin{document}
\listoffiguresRepeatable
\noindent\hrulefill
\noindent
\autoref{first figure} is \nameref{first figure}. It is figure number~\ref{first figure} and you find it on page~\pageref{first figure}.
\noindent
\autoref{second figure} is \nameref{second figure}. It is figure number~\ref{second figure} and you find it on page~\pageref{second figure}.
\noindent\hrulefill
\noindent
Text accompanied by some figures.
\begin{figure}[ht]%
\centering
\caption{Caption of first figure}\label{first figure}%
\includegraphics[height=4cm]{example-image-a.jpg}%
\end{figure}
\begin{figure}[ht]%
\centering
\includegraphics[height=4cm]{example-image-b.jpg}%
\caption{Caption of second figure}\label{second figure}%
\end{figure}
\noindent\hrulefill
\listoffiguresRepeatable
\end{document}
如果这对您没有帮助,请更具体地说明您的工作流程和需求。
一个完全不同的方法可能是通过以下方式维护包含你的数据信息的数据库:数据工具-包裹:
数据库 1,在当前 LaTeX 运行开始时通过读取在上一次 LaTeX 运行期间创建的 .csv 文件来获取数据,从而保存上一次 LaTeX 运行的数据,用于在当前 LaTeX 运行期间访问数据。
数据库 2 用于存储在当前 LaTeX 运行期间创建的数据以及在当前 LaTeX 运行结束时写入 .csv 文件的数据。
这边走
- 读取和存储数据不会造成干扰。
- 在整个 LaTeX 运行过程中创建的数据都可以在整个 LaTeX 运行过程中访问。也就是说,在 LaTeX 运行结束时创建的数据也可以在 LaTeX 运行开始时访问。
(需要一种机制来比较两个数据库,以便找出上次和当前 LaTeX 运行之间数据是否发生了变化,如果是,则发出需要重新运行 LaTeX 的消息。)
\caption
可以定义 -command的变体,除了\caption
-command 已经执行的操作之外,还可以向数据库 2 添加条目。
\listof...
可以根据需要定义一种命令来从数据库 1 中提取数据。