可以更新桌子柜台吗?

可以更新桌子柜台吗?

我可以更新表格计数器以使用我自己的计数器,类似于更新吗?例如,\tablename关键字是什么或我可以在哪里找到它?

newenvironment这将在基于的环境中使用tabu(为了拥有与表环境不同的计数器)。

这是针对在中创建的环境问题。当我们单击 PDF 中的超链接时,我们总是被发送到文档中的第一个界面或最后一个表格。我相信原因可能是hyperref依赖于表格计数器才能正常工作;如果我们在环境定义中注释掉计数器减少,\addtocounter{table}{-1}那么:超链接可以正常工作,但表格编号不正确。

\documentclass{article}

\usepackage{array, booktabs, longtable, tabu}
\usepackage{hyperref}

\newcommand{\ListOfInterfacesName}{List of Interfaces}
\newcommand{\InterfaceName}{Interface}

% Define list of interfaces command
\makeatletter%
  \newcommand{\listofinterfaces}{%
    \section*{\ListOfInterfacesName}%
    \@starttoc{int}  % New toc with extension *.int%
    \clearpage%
  }%
\makeatother%

% Usage: {}{<label>}{<ifNum>}{<caption>}
\newenvironment{ryetable}[4]{%
  \renewcommand{\tablename}{\InterfaceName} % Safe to renew table because it is inside a group
  \renewcommand{\thetable}{#3} % Explicitly set table number to given argument (safe because redifinition also occurs inside a group)
  \addtocounter{table}{-1} % Reduce counter number since using table increases it automatically
  \addcontentsline{int}{subsection}{\protect{\numberline{#3}{#4}}} % Define entry subsection akin to normal tables
  \gdef\tmpheaders{#1} % Not currently used
  \gdef\tmplabel{\label{#2}} % Save label for later use
  \gdef\tmpifnum{#3} % Save interface number
  \gdef\tmpcaption{\caption[]{#4}} % Save caption for later use ---> drop the entry to the table list
  \begin{longtabu} to \textwidth {@{} X[1,l] X[1,l] X[1,l] >{\raggedright}X[1,l] @{}}
    \\\toprule\rowfont\bfseries
    Header1 & Header2 & Header3 & Description \\
    \midrule
  \endfirsthead
    \multicolumn{4}{@{}c@{}}{\small\textit{(continued)}}\\
    \toprule\rowfont\bfseries
    Header1 & Header2 & Header3 & Description \\
    \midrule
  \endhead
    \bottomrule
    \multicolumn{4}{@{}r@{}}{\small\textit{(continues)}}\\
  \endfoot
    \bottomrule
    \tmpcaption
    \tmplabel
  \endlastfoot
}{%
  \end{longtabu}
}

\begin{document}
\listoftables
\listofinterfaces %TODO
\section{MySection}
For a nifty new environment check Interface~\ref{if:myinterface}.
\begin{ryetable}{}{if:myinterface}{31}{This is my pretty interface.}
a & b & c & d\\
e & f & g & h\\
i & j & k & l\\
m & n & o & p\\
q & r & s & t\\
u & v & w & x\\
y & z & -- & --\\
\end{ryetable}

% Some other table to show on list
\begin{table}[h]
  \centering
  \begin{tabular}{c|c}
    a&b\\
    c&d\\
  \end{tabular}
  \caption{Caption of tabular table.}
  \label{tab:somelabel}
\end{table}

\newpage
\begin{ryetable}{}{if:myif2}{35}{This is the other interface.}
a & b & c & d\\
e & f & g & h\\
i & j & k & l\\
m & n & o & p\\
q & r & s & t\\
u & v & w & x\\
y & z & -- & --\\
\end{ryetable}
Go to Interface~\ref{if:myif2}. % Incorrectly links to first environment
\end{document}

答案1

(long)tabu 只是继承了它的计数器用法longtable(我个人只会使用后者)但问题是一样的。

我已经开始将其作为可能的未来版本中的一个选项来实现,但在 V4 中它并不直接可用。

为了简单使用,您只需在本地将{table}计数器重置为自定义计数器的值,并设置\thetable主要问题是longtable在其标题处理中硬连线表格列表,因此您需要在本地重新定义

\makeatletter
\def\LT@c@ption#1[#2]#3{%
  \LT@makecaption#1\fnum@table{#3}%
  \def\@tempa{#2}%
  \ifx\@tempa\@empty\else
     {\let\\\space
     \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
  \fi}
\makeatother

所以它不使用\fnum@tableMy zzz \thezzz如果您使用zzz计数器,它可以改用)并且类似地更改lottable使用您设置的任何 zzz 文件列表。)

相关内容