表格中列表的自动编号

表格中列表的自动编号

我知道一种自动编号的方法。但同时,你仍然需要写出单词\Rownum 每次都在新行上。有什么办法可以避免每次都这样写吗?

    \documentclass[a4paper,12pt]{article}
\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{caption}
\begin{document}
    \newcounter{rownum} 
    \setcounter{rownum}{0}
    \newcommand{\Rownum}{\stepcounter{rownum}
        \arabic{rownum}. }
    
\begin{tabular}{ |l|l| }
        number & value \\
        \Rownum & 4.53 \\
        \Rownum & 6.74 \\
\end{tabular}
\end{document}

答案1

一个带有 的实现expl3

在此处输入图片描述

\documentclass{article}
\ExplSyntaxOn
% #1 body var #2 body #3 head
\cs_new_protected:Nn \__table_with_number:Nnn {
  \regex_split:nnN { \c{\\} } {#2} \l__table_line_seq
  \tl_clear_new:N #1
  \seq_map_indexed_inline:Nn \l__table_line_seq {
    \int_compare:nNnTF {##1} = {1} {
      \tl_put_right:Nn #1 { #3 & ##2 \\ }
    } {
      \tl_if_empty:nF {##2}
        { \tl_put_right:Nn #1 { \int_eval:n { ##1 - 1 }. & ##2 \\ } }
    }
  }
}

\NewDocumentEnvironment { Table } { O{number} m +b } {
  \__table_with_number:Nnn \l__table_body_tl {#3} {#1}
  \begin{tabular}{#2}
    \l__table_body_tl
  \end{tabular}
}
\ExplSyntaxOff

\begin{document}

\begin{Table}{ll}
  value \\
  1 \\
  2.3 \\
\end{Table}

\end{document}

答案2

谢谢大家,我找到了最短、最简单、最有效的方法:

\documentclass[a4paper,12pt]{article}
\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{caption}
\usepackage{array,etoolbox} % For automatic numbering
\begin{document}
    \newcounter{rownum} % Declare a new counter for autonumbering rows in the table
    \setcounter{rownum}{0} % Set the initial value of the counter
    \newcommand{\Rownum}{\stepcounter{rownum} % Add one when calling a function
        \arabic{rownum} } % You can add a dot and a space at the end
    
    \begin{tabular}{|>{\Rownum}l|l|}
        \multicolumn{1}{|l|}{№} & value \\
        & 4.53 \\
        & 6.74 \\
    \end{tabular}
\end{document}

在此处输入图片描述

答案3


姆韦


正如评论所说,Bernard 的解决方案是最简单的,因此最好使用计数器,恕我直言。话虽如此,另一种可能性是不设置任何计数器或任何复杂的前导码。

如果您不了解 R 和knitr,那么这个解决方案有点像用大炮打苍蝇(尽管我强烈建议您知道knitr您是否经常处理 LaTeX 文档中的数字数据和/或图表)。如果您知道如何编译test.Rnw下面的代码,则非常简单,因为任何数据框输出默认显示行号,因此您不必做任何特殊的事情,只需有一些数据框(它可以从 CSV 或 Excel 等几种格式导入,或者只需输入 R 代码,如示例中所示)并使用xtable(或kable,或其他一些 R 包)将其打印为 LaTeX 表:

% test.Rnw
\documentclass{article}
\usepackage{booktabs} % for better rules 
\begin{document}
<<table1, echo=F,results='asis'>>=
library(xtable)
# the data
df  <- data.frame( 
  value=c(4.53, 6.74,7.1),
  price=c(23,45,15))
# the table
xtable(df)
@

With a header for the counter 
(rather superfluous, but ...) 
and some table format:

<<table2,echo=F,results='asis'>>=
df$number <- rownames(df)  # numbers as variable
df <- df[,c(3,1,2)]        # numbers as first column
print(xtable(df,align="lccc",digits=c(0,0,2,0)),
include.rownames=F,booktabs=T) 
@

\end{document}

相关内容