我正在尝试构建一个生成表格的 latex 环境,并且该表格中可能有一些需要引用的图表。我绝对需要文本中的数字来编译为参考编号。理想情况下,这也应该具有指向图表的超链接,但那是次要的。(如果我必须定义一个单独的计数器,那也没关系)。
%% simple.sty
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{hyperref}
\RequirePackage{graphicx}
\RequirePackage[table]{xcolor}
\newenvironment{statementtable}{
\newcommand{\statement}[2]{
\multicolumn{2}{|c|}{\cellcolor{white} ##1} \\ \hline
\multicolumn{2}{|c|}{\cellcolor{gray!25} \parbox{6in}{##2}} \\ \hline
}
\newcommand{\statementfigure}[3]{
\stepcounter{figure}
\phantomsection ##3 \label{##1} \\
Figure \arabic{figure}: ##2
}
\begin{center}
\begin{tabular}{|l|l|} \hline
}{
\end{tabular}
\end{center}
}
tex 文件如下
%% simple.tex
\documentclass{article}
\usepackage{simple}
\begin{document}
\begin{statementtable}
\statement{statement}{lorem ipsem see \ref{fig:foo} and \ref{fig:bar}}
\statement{figures}{\statementfigure{fig:foo}{foo}{\includegraphics{potato.png}} \\
\statementfigure{fig:bar}{bar}{\includegraphics{potato.png}}}
\end{statementtable}
\end{document}
并且输出xelatex simple.tex
缺少实际数字。如何才能\ref
包含计数器的值在一个标签?
答案1
乍一看,更改\stepcounter{figure}
为\refstepcounter{figure}
似乎足以解决问题。当然,\ref
一旦进行更改,指令的输出就不再是空的。
然而,一些额外的侦查表明,hyperref
人们认为所引用的是 类型的实体,section
而不是 类型的实体figure
。与其继续重新发明轮子,不如说,我建议你开始使用一些经过良好调试的包的机制caption
——特别是它的\captionof
宏\captionsetup
。
顺便说一句,我不会对 用固定宽度,例如6in
。\parbox
相反,让 LaTeX 计算宽度,这样就不会溢出到右边距。
\documentclass{article}
\usepackage[demo]{graphicx} % remove 'demo' option in real document
\usepackage{caption} % for "\captionof" and "\captionsetup" macros
\usepackage{array} % for "\extrarowheight" length parameter
%%% --- contents of simple.sty --- %%%
\RequirePackage{graphicx}
\RequirePackage[table]{xcolor}
\RequirePackage{hyperref}
\hypersetup{colorlinks,allcolors=blue} % optional
\usepackage[nameinlink,capitalize,noabbrev]{cleveref} % optional
\newenvironment{statementtable}{%
\begingroup
\setlength\extrarowheight{2pt} % for a slightly more open "look"
\captionsetup{singlelinecheck=false,
justification=raggedright,
skip=0pt}
\newcommand{\statement}[2]{%
\multicolumn{2}{|c|}{\cellcolor{white} ##1} \\
\hline
\multicolumn{2}{|c|}{\cellcolor{gray!25}%
\parbox{\dimexpr\textwidth-2\tabcolsep\relax}{##2}} \\
\hline
}
\newcommand{\statementfigure}[3]{%
\phantomsection ##3
\captionof{figure}{##2} \label{##1}
}
\centering
\begin{tabular}{|l|l|}
\hline
}{%
\end{tabular}
\endgroup
}
%%% --- end contents of simple.sty --- %%%
\begin{document}
\begin{statementtable}
\statement{statement}{See \cref{fig:foo,fig:bar}.}
\statement{figures}{%
\statementfigure{fig:foo}{foo}{\includegraphics{potato.png}}
\statementfigure{fig:bar}{bar}{\includegraphics{potato.png}}}
\end{statementtable}
\end{document}
答案2
您需要使用\refstepcounter
而不是\stepcounter
。