csvsimple 行计数器处理

csvsimple 行计数器处理

我正在尝试使用列出 csv 文件中的数据csvsimple并添加指向相关部分的自动超链接。

问题

当使用带有标题的文件时(但使用no head选项为标题定义不同的行为),行数会增加 1,从而相应地移动索引。

这会导致未定义的引用。

问题

有没有办法可以用某种方式来(\thecsvrow - 1)代替实际的行号?

我是否必须手动修改索引以匹配计数器?

平均能量损失

\documentclass[draft]{article}

\usepackage{mwe}
\usepackage{booktabs}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{data.csv}
name,type,value
var1,numeric,32+1
var2,string,"text"
var3,float,3.14-x
\end{filecontents*}

\begin{document}

\section{Variables}\label{sec:var}

\csvloop{
  file=data.csv,
  respect all,
  separator=comma,
  no head,
  column names={1=\variableName, 2=\variableType, 3=\variableValue},
  before reading={
    \begin{table}
      \centering
    \begin{tabular}{llr}
    \toprule
  },
  command={\csviffirstrow
    {\textbf{\variableName} & \textbf{\variableType} & \textbf{\variableValue}}
    {\hyperref[sec:var-\thecsvrow]{\variableName} & \variableType & \variableValue}
  },
  late after line=\\,
  late after first line=\\\midrule,
  late after last line=\\\bottomrule,
  after reading={
    \end{tabular}
    \caption{List of variables}
    \label{tab:variables}
    \end{table}
  }
}

\subsection{Variable 1}\label{sec:var-1}
\dots

\subsection{Variable 2}\label{sec:var-2}
\dots

\subsection{Variable 3}\label{sec:var-3}
\dots

\end{document}

答案1

玩计数器csvrow似乎有效。

我之前已经从计数器中减去 1 \hyperref,然后恢复到原始值并加 1(否则它的值始终为 1):

\addtocounter{csvrow}{-1}\hyperref[sec:var-\thecsvrow]{\variableName}\addtocounter{csvrow}{1}

[draft]请注意,我从您的命令中删除了该选项\documentclass,否则链接将不起作用,并且,如果您使用 Adob​​e Acrobat Reader DC,则必须放大文档才能看到链接起作用(至少放大 60%,因为子部分是空的)。

\documentclass{article}

\usepackage{filecontents}
\usepackage{booktabs}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{data.csv}
    name,type,value
    var1,numeric,32+1
    var2,string,"text"
    var3,float,3.14-x
\end{filecontents*}

\begin{document}
    
    \section{Variables}\label{sec:var}
    
    \csvloop{
        file=data.csv,
        respect all,
        separator=comma,
        no head,
        column names={1=\variableName, 2=\variableType, 3=\variableValue},
        before reading={
            \begin{table}
                \centering
                \begin{tabular}{llr}
                    \toprule
                },
                command={\csviffirstrow
                    {\textbf{\variableName} & \textbf{\variableType} & \textbf{\variableValue}}
                    {\addtocounter{csvrow}{-1}\hyperref[sec:var-\thecsvrow]{\variableName}\addtocounter{csvrow}{1} & \variableType & \variableValue}
                },
                late after line=\\,
                late after first line=\\\midrule,
                late after last line=\\\bottomrule,
                after reading={
                \end{tabular}
                \caption{List of variables}
                \label{tab:variables}
            \end{table}
        }
    }
    
    \subsection{Variable 1}\label{sec:var-1}
    \dots
    
    \subsection{Variable 2}\label{sec:var-2}
    \dots
    
    \subsection{Variable 3}\label{sec:var-3}
    \dots
    
\end{document}

点击var1此处:

在此处输入图片描述

您转到Variable 1子部分:

在此处输入图片描述

等等。

相关内容