我可以更新表格计数器以使用我自己的计数器,类似于更新吗?例如,\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@table
(My zzz \thezzz
如果您使用zzz
计数器,它可以改用)并且类似地更改lot
和table
使用您设置的任何 zzz 文件列表。)