为一个小节分配多个值?

为一个小节分配多个值?

有没有一种简单的方法可以向文档的某个部分添加多个属性/特性?例如,我想为某个小节中讨论的产品添加某种评级。

例子:

\section{Product A}
\label{sec:proda}
\rating{10}

稍后,我想在一个大表中列出所有产品及其评级,包括指向产品描述所在部分的超链接。因此,最好使用该部分的标签来访问评级:

\nameref{sec:proda} (\ref{sec:proda) & \ratingref{sec:proda}

是否存在一个不太复杂的解决方案可以实现这样的事情?

答案1

zref提供了创建可引用的属性列表的方法,从而扩展了默认\label系统\ref以包含不仅仅是最后一个标签和页码的内容。

下面提供了一种解决方案,界面略有改变:

在此处输入图片描述

\documentclass{article}

\usepackage{zref,zref-titleref}
\usepackage{hyperref}
\makeatletter
\zref@newprop{section}[0]{\thesection}% New reference property
\zref@newprop{rating}[0]{\therating}% New reference property
%\zref@newprop{default}[]{..}% Already defined by zref
%\zref@newprop{title}[]{..}% Already defined by zref
%\zref@newprop{page}[]{..}% Already defined by zref
\zref@newlist{product}% Create a new list of properties
\zref@addprops{product}{default,section,rating,title,page}

\newcommand{\productlabel}[1]{% Label product
  \label{#1}% For hyperref
  \zref@labelbylist{#1}{product}}% For zref
\newcommand{\rating}[1]{\zref@setcurrent{rating}{#1}}
\newcommand{\productref}[2][default]{\hyperref[#2]{\zref@extract{#2}{#1}}}
\makeatother

\begin{document}

\section{Product A}
\rating{10}
\productlabel{sec:proda}

See \productref[title]{sec:proda} (\productref[section]{sec:proda} \& \productref[rating]{sec:proda}).
\end{document}

对于每件产品,创建一个\productlabel{<label>}用于存储title(的\section)、section编号或defaultrating(由 设置的\productrating{<rating>})和page编号的 。您可以使用 引用这些\productref[<type>]{<label>}

它兼容hyperref正如预期的那样(相同的包作者)。

答案2

这里我引入了\ratedsection{<title>}{<label>}{<rating>}\showrating{<label>},以及所要求的\nameref和的形式\ratingref。宏旨在一次性\showrating构建一行数据。tabular

显然,可以\ratedsubsection根据需要定义等。

已编辑,将hyperref包添加到序言中。

重新编辑以支持tabular建设。

\documentclass{article}
\usepackage{hyperref}
\newcommand\ratedsection[3]{\section{#1}\label{#2}%
  \expandafter\def\csname product#2\endcsname{#1}%
  \expandafter\def\csname rating#2\endcsname{#3}%
}
\newcommand\showrating[1]{%
  \nameref{#1}& \ratingref{#1} &\ref{#1}%
}
\newcommand\nameref[1]{\csname product#1\endcsname}
\newcommand\ratingref[1]{\csname rating#1\endcsname}
\begin{document}
\ratedsection{Product A}{sec:proda}{10}
blah
\ratedsection{Product B}{sec:prodb}{15}
more blah

\section{conclusions}

\begin{table}[ht]
\renewcommand\arraystretch{1.2}
\centering
\caption{Products and their ratings}
\begin{tabular}{lrr}
Product Name & Rating & Section\\
\hline
\showrating{sec:proda}\\
\showrating{sec:prodb}
\end{tabular}
\end{table}
\end{document}

在此处输入图片描述

相关内容