我正在使用 stata 生成表格。此 STATA 生成的 tex 表格在 \caption{} 命令中定义了标签。此标签应该有效。但它给了我未解析的引用(表格??)。当我手动取出 caption 命令内的标签并将其发布在 \caption{} 之后时,标签有效。
我正在努力寻找这里的问题。有没有其他方法可以在 STATA 中发出命令,让 \label{} 保留在 \caption{} 之后。或者我可以继续使用相同的格式并进行一些修改吗?
{
\begingroup
\let\oldcaption\caption
\renewcommand{\caption}[1]{\oldcaption{Regression table}}
\renewcommand\normalsize{\small}%
\normalsize
\begin{center}
\input{../RESULTS/table.tex}
\end{center}
\endgroup
}
答案1
如果我正确理解了这个问题,你有一些自动生成的 LaTeX 代码\caption{...\label{...}...}
,你想在保留标签的同时更改标题文本。这个 MWE 会显示问题:
\documentclass{article}
\begin{document}
\let\oldcaption\caption
\renewcommand{\caption}[1]{\oldcaption{Regression table}}
% This table represents the auto-generated code
\begin{table}
\centering
\caption{A table\label{A}}
\end{table}
\ref{A} % does not work since the caption text and label was replaced
\end{document}
一种可能的解决方案是使用包\caption@getlabel
提供的辅助宏caption
,该宏尝试\label
从其参数中提取:
\documentclass{article}
\usepackage{caption3}
\begin{document}
\makeatletter
\let\oldcaption\caption
\renewcommand{\caption}[1]{%
\oldcaption{Regression table}%
\caption@getlabel#1\label{}\@nil
\caption@thelabel
}
\makeatother
\begin{table}
\centering
\caption{A table\label{A}}
\end{table}
\ref{A}
\end{document}
请注意,仅caption3
加载了 (而不是caption
),因为此包仅提供辅助宏,并且不重新定义现有的宏,因此它应该与所有文档类兼容。(如果您caption
无论如何都要加载包,则可以删除\usepackage{caption3}
。)
警告:\caption@getlabel
是一个内部宏,未记录在软件包的用户文档中caption
。但我(作为caption
软件包的作者和维护者)不打算在将来更改其界面。