10 如何排版可以跳转和调整大小的表注

发布于 2024-12-16 11:33:49

v2-e4cf970e43c99612d27491fe9fe7b2d2_r.png
image.png

问题描述

我希望能在LaTeX中排版出图1样式的列表,即

  1. 表格下方存在表注
  2. 被标注文本的上标数字可被hyperref作用,以进行超链接跳转
  3. 注释文本中的数字样式可调,可以设置成和表中文本同大小或与上标数字同大小

方法尝试

我尝试使用了threeparttable宏包,但它未能做到要求中的2与3,因此求助,我该怎么做呢?
附:图2代码

\documentclass[11pt,a4paper,english]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage[font=small,labelfont=bf,tableposition=top]{caption}
\usepackage{booktabs}
\usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green]{hyperref}
\usepackage{threeparttable}

\begin{document}
    \begin{table}[!ht]
        \caption{A table with notes}\label{tab:tablenotes}
        \centering
        \begin{threeparttable}
            \begin{tabular}{*4{c}}\toprule
                Table head\tnote{1} & Table head\tnote{1} & Table head\tnote{2} & Table head\tnote{2} \\ \midrule
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\ \bottomrule
            \end{tabular}
            \begin{tablenotes}
                \footnotesize
                \item[1] The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
                \item[2] The quick brown fox jumps over the lazy dog.
            \end{tablenotes}
        \end{threeparttable}
    \end{table}
\end{document}

查看更多

关注者
0
被浏览
120
Sagittarius Rover
我要成为TikZ糕手/(ㄒoㄒ)/~~

ctex宏包文档的源文件ctex.dtx中,有如下一段代码:

% Line 924~977
\begin{table}[htbp]
\centering
\begin{threeparttable}
\caption{\CTeX{} 宏集自动配置字体策略}
\label{tab:default-font-select}
\begin{tabular}{*{5}{c}}
  \toprule
             & macOS Old\tnote{1}
             & macOS New\tnote{2}
             & Windows\tnote{3}
             & 其他 \\
  \midrule
  \XeLaTeX   & \makecell{\pkg{xeCJK}\\华文字库}
             & \makecell{\pkg{xeCJK}\\华文字库 + 苹方}
             & \makecell{\pkg{xeCJK}\\中易字库 + 微软雅黑}
             & \makecell{\pkg{xeCJK}\\Fandol 字库\tnote{4}} \\
  \cmidrule(lr){1-5}
  \LuaLaTeX\tnote{5}
             & \makecell{\pkg{LuaTeX-ja}\\华文字库}
             & \makecell{\pkg{LuaTeX-ja}\\华文字库 + 苹方}
             & \makecell{\pkg{LuaTeX-ja}\\中易字库 + 微软雅黑}
             & \makecell{\pkg{LuaTeX-ja}\\Fandol 字库} \\
  \cmidrule(lr){1-5}
  \pdfLaTeX
             & 不可用
             & 不可用
             & \makecell{\pkg{CJK} + \pkg{zhmetrics}\\中易字库 + 微软雅黑\tnote{6}}
             & 不可用 \\
  \cmidrule(lr){1-5}
  \makecell{\LaTeX{} + \\\dvipdfmx}
             & 不可用
             & \makecell{\pkg{CJK} + \pkg{zhmetrics}\\华文字库 + 苹方}
             & \makecell{\pkg{CJK} + \pkg{zhmetrics}\\中易字库 + 微软雅黑\tnote{6}}
             & \makecell{\pkg{CJK} + \pkg{zhmetrics}\\Fandol 字库} \\
  \cmidrule(lr){1-5}
  \makecell{\upLaTeX{} + \\\dvipdfmx}
             & 不可用
             & \makecell{\pkg{zhmetrics-uptex}\\华文字库 + 苹方}
             & \makecell{\pkg{zhmetrics-uptex}\\中易字库 + 微软雅黑}
             & \makecell{\pkg{zhmetrics-uptex}\\Fandol 字库} \\
  \bottomrule
\end{tabular}
\begin{tablenotes}
  \item [1] Yosemite (10.10) 及以前的 macOS 系统。
  \item [2] El Capitan (10.11) 及以后的 macOS 系统。
  \item [3] 仅支持 Windows Vista 及以后的 Windows 操作系统。
  \item [4] 由马起园、苏杰、黄晨成等人开发的开源中文字体,
    参见:\url{https://www.ctan.org/pkg/fandol}。
  \item [5] \LuaLaTeX{} 编译时使用 \pkg{LuaTeX-ja} 宏包。对此,
    第 \ref{sec:lualatex-chinese}~节有特别说明。
  \item [6] 微软雅黑字体并不总是有效,这和选项 \opt{zhmap} 的取值有关。
\end{tablenotes}
\end{threeparttable}
\end{table}

但实际上这还不够...因为索引和超链接仍未定义,经过一番逆向工程,我们不难在ctxdoc.cls中找到如下定义的代码,下面的大致重定义了tnote环境,同时利用hypertarget设置了索引,抄就完了...

%% line 136~151
%% 重新定义 threeparttable 包的 tablenotes 环境
\renewlist{tablenotes}{description}{1}
\setlist[tablenotes]{%
  format=\normalfont\tnote@item,align=right,listparindent=\parindent,
  labelindent=\tabcolsep,leftmargin=*,rightmargin=\tabcolsep,
  after=\@noparlisttrue}
\AtBeginEnvironment{tablenotes}{%
  \setlength\parindent{2\ccwd}%
  \normalfont\footnotesize}
\AtBeginEnvironment{threeparttable}{%
  \stepcounter{tpt@id}%
  \edef\curr@tpt@id{tpt@\arabic{tpt@id}}}
\newcounter{tpt@id}
\def\tnote@item#1{%
  \Hy@raisedlink{\hyper@anchor{\curr@tpt@id-#1}}#1}
\def\TPTtagStyle#1{\hyperlink{\curr@tpt@id-#1}{#1}}

那么我们实际上就可以实现如下的效果...

\documentclass[11pt,a4paper,english]{ctexart}
\usepackage{tikz}
\usetikzlibrary{ducks}
\usepackage{enumitem}
\usepackage[font=small,labelfont=bf,tableposition=top]{caption}
\usepackage{threeparttable}
\usepackage{booktabs}
% \usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green]{hyperref}
\usepackage[colorlinks]{hyperref}
\makeatletter
%% copy from ctxdoc.cls
%% Line 136~151
%% 重新定义 threeparttable 包的 tablenotes 环境
\renewlist{tablenotes}{description}{1}
\setlist[tablenotes]{%
  format=\normalfont\tnote@item,align=right,listparindent=\parindent,
  labelindent=\tabcolsep,leftmargin=*,rightmargin=\tabcolsep,
  after=\@noparlisttrue}
\AtBeginEnvironment{tablenotes}{%
  \setlength\parindent{2\ccwd}%
  \normalfont\footnotesize}
\AtBeginEnvironment{threeparttable}{%
  \stepcounter{tpt@id}%
  \edef\curr@tpt@id{tpt@\arabic{tpt@id}}}
\newcounter{tpt@id}
\def\tnote@item#1{%
  %\Hy@raisedlink{\hyper@anchor{\curr@tpt@id-#1}}{#1}
  %\Hy@raisedlink{\hyper@anchor{\curr@tpt@id-#1}}{\color{red}\textsuperscript{#1}}}
  % modify the \textsuperscript{#1} here and change your ideal font style freely...
  \Hy@raisedlink{\hyper@anchor{\curr@tpt@id-#1}}{\begin{tikzpicture}[scale=.5] \duck[signpost=#1] \end{tikzpicture}}} % 你甚至可以在这里画一只鸭子...
\def\TPTtagStyle#1{\hyperlink{\curr@tpt@id-#1}{#1}}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
    \begin{table}[htbp]
        \caption{A table with notes}\label{tab:tablenotes}
        \centering
        \begin{threeparttable}
            \begin{tabular}{*4{c}}\toprule
                Table head\tnote{1} & Table head\tnote{1} & Table head\tnote{2} & Table head\tnote{2} \\ \midrule
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\
                Some values & Some values & Some values & Some values \\ \bottomrule
            \end{tabular}
            \begin{tablenotes}
                \footnotesize
                \item[1] The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
                \item[2] The quick brown fox jumps over the lazy dog.
            \end{tablenotes}
        \end{threeparttable}
    \end{table}
\end{document}

image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览