将图形放入 parboxes 并引用它们

将图形放入 parboxes 并引用它们

我正在尝试构建一个生成表格的 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

相关内容