如何制作按列排列的项目 ID 列表?

如何制作按列排列的项目 ID 列表?

我想列出不同组中项目的 ID 或任何属性。它应该看起来像这样:

Article group 1

Article 1 . . . . . . . . . . . . . . . . . . . . ID

Second article  . . . . . . . . . . . . . . . . . ID



Group 2                    Cat No 1           Cat No 2

Product . . . . . . . . . . . ID1 . . . . . . . . ID2

Another product . . . . . . . ID1 . . . . . . . . ID2


Article group 3                                Cat No

Something . . . . . . . . . . . . . . . . . . . . ID

Other thing . . . . . . . . . . . . . . . . . . . ID

我尝试在制表环境中执行此操作。如果我不使用前导点,它就可以工作,但是 \dotfill 在制表环境中不起作用。

我也尝试使用列表环境,但我不知道如何正确对齐 ID 列。

这是我做的:

\documentclass[12]{article}

\begin{document}

\begin{list}{}{}
\item Article group 1
\end{list}

\begin{list}{}{}
\item Article 1~\dotfill~ID
\item Second article~\dotfill~ID
\end{list}

\begin{list}{}{}
\item Group 2
\end{list}

\begin{list}{}{}
\item Product~\dotfill~ID1~\dotfill~ID2
\item Another product~\dotfill~ID1~\dotfill~ID2
\end{list}

\begin{list}{}{}
\item Article group 3~\hfill~Cat No
\end{list}

\begin{list}{}{}
\item Something~\dotfill~ID
\item Other thing~\dotfill~ID
\end{list}

\end{document}

列未正确对齐。我曾想过将其制作成表格/表格,但在表格中我无法使用 \dotfill。

答案1

以下示例定义了宏\dotsfrom\dotsto,它们在位置之间放置了虚线。位置是从zref-savepos包的模块获取的zref,该模块为\pdfsavepospdfTeX 的功能提供了一个接口,该功能在 LuaTeX 和 XeTeX 中也可用。第一次 LaTeX 运行将文件中的位置存储.aux为参考,下一次运行将使用上一次运行的位置值。这需要两次 LaTeX 运行。

表格通过简单的线条宽度实现,并在列之间使用粘连来填充空间。通过和tabular*设置点也可以在环境或列表中使用。\dotsfrom\dotstotabbing

虚线使用了 的代码\@dottedtocline,该代码在目录中使用,原因有二:

  • 点之间的空间不像 中那么窄,\dotfill因此不太显眼。还可以通过重新定义 来配置空间\@dotsep

  • 代码使用\leaders而不是\cleaders( \dotfill)。因此,如果点位于同一个封闭框中,则它们垂直对齐。但是,这里情况并非如此。因此,所有点的封闭框都从 开始垂直对齐X坐标为零。

这个例子展示了这项技术。但我没有将低级宏包装在标记命令中,因为目标布局不太明确(对齐要求、太长的条目怎么办、有多少个类别、文章名称列是否可以使用未使用的类别列的空间、文章组是否独立,中间列可能有不同的位置、多页表……?)。

\documentclass{article}
\usepackage{zref-savepos}
\providecommand{\zsaveposx}{\zsavepos}

\newcounter{dotsfromto}
\renewcommand*{\thedotsfromto}{DFT@\the\value{dotsfromto}}
\newcommand*{\dotsfrom}{%
  \stepcounter{dotsfromto}%
  \leavevmode
  \zsaveposx{\thedotsfromto f}%
}
\makeatletter
\newcommand*{\dotsto}{%
  \leavevmode
  \zsaveposx{\thedotsfromto t}%
  \zref@refused{\thedotsfromto f}%
  \zref@refused{\thedotsfromto t}%
  \ifnum\zposx{\thedotsfromto t}>\zposx{\thedotsfromto f}\relax
    \llap{%
      \hbox to \zposx{\thedotsfromto t}sp{%
        \kern\zposx{\thedotsfromto f}sp\relax
        \leaders\hbox{$\m@th % from \@dottedtocline
          \mkern\@dotsep mu\hbox{.}\mkern\@dotsep mu%
        $}\hfill
      }%
    }%  
  \fi
}
\makeatother

\begin{document}
\noindent
\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lcc@{}}
  \bfseries Article group 1 & & Cat.~No.\\
  Article 1\dotsfrom & & \dotsto ID\\
  Second article\dotsfrom & &\dotsto ID\\[\normalbaselineskip]
  \bfseries Group 2 & Cat.~No.~1 & Cat.~No.~2\\
  Product\dotsfrom & \dotsto ID1\dotsfrom & \dotsto ID2\\
  Another product\dotsfrom & \dotsto ID1\dotsfrom & \dotsto ID2
  \\[\normalbaselineskip]
  \bfseries Article group 3 & & Cat.~No.\\
  Something\dotsfrom &  & \dotsto ID\\
  Other thing\dotsfrom & & \dotsto ID\\
  \end{tabular*}
\end{document}

结果

答案2

也许可以使用全宽表格 - 形式为tabularx- 适合你:

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx,array,booktabs}
\newcolumntype{L}{@{}X<{\dotfill}@{}}

\begin{document}

\begin{list}{}{}
\item Article group 1
\end{list}

\begin{list}{}{}
\item Article 1~\dotfill~ID
\item Second article~\dotfill~ID
\end{list}

\begin{list}{}{}
\item Group 2
\end{list}

\begin{list}{}{}
\item Product~\dotfill~ID1~\dotfill~ID2
\item Another product~\dotfill~ID1~\dotfill~ID2
\end{list}

\begin{list}{}{}
\item Article group 3~\hfill~Cat No
\end{list}

\begin{list}{}{}
\item Something~\dotfill~ID
\item Other thing~\dotfill~ID
\end{list}

\noindent
\begin{tabularx}{\linewidth}{ L L r@{} }
  \toprule
  \multicolumn{3}{@{}l}{Article group 1} \\
  \midrule
  \multicolumn{2}{L}{Article 1} & ID \\
  \multicolumn{2}{L}{Second article} & ID \\
  \bottomrule
\end{tabularx}

\noindent
\begin{tabularx}{\linewidth}{ L L r@{} }
  \toprule
  \multicolumn{3}{@{}l}{Group 2} \\
  \midrule
  Product         & ID1 & ID2 \\
  Another product & ID1 & ID2 \\
  \bottomrule
\end{tabularx}

\noindent
\begin{tabularx}{\linewidth}{ L L r@{} }
  \toprule
  \multicolumn{2}{@{}l}{Article group 3} & \llap{Cat No} \\
  \midrule
  \multicolumn{2}{L}{Something} & ID \\
  \multicolumn{2}{L}{Other thing} & ID \\
  \bottomrule
\end{tabularx}

\end{document}

水平线只是为了展示booktabs

请注意,这些结构不会跨越页面边界,而您的lists 则会。

相关内容