我正在整理艺术品目录。这些艺术品被赋予一个连续的罗马数字,并被分成几个字母组(例如 A1、A2、B3 等)。目前,我正在手动查看某件作品出现在哪个组中,然后手动引用该部分,然后引用单个作品:例如,调用“A”,然后添加“1”。
然而,这并不理想,因为手动操作很容易意外地为绘画给出错误的组(例如,在下面的例子中,引用 A3,而绘画 3 在 B 组中)。
因此,我想知道是否有一种方法可以在引用某个项目的标签出现时自动获取计数器的值?即通过引用项目 3,也可以给出计数器的最后一个值\catsecnum
。
非常感谢对我的方法的任何帮助和批评!
\documentclass[a4paper]{article}
\begin{document}
\newcounter{catsecnum}
\renewcommand{\thecatsecnum}{\Alph{catsecnum}}
\newcounter{catnum}
\newenvironment{catalogue}[1][]{\noindent\refstepcounter{catnum}{\bfseries\Alph{catsecnum}\arabic{catnum} {\scshape{#1}}\smallskip\noindent\ignorespaces}}{\bigskip}
\refstepcounter{catsecnum}\label{typeA}
\subsection*{\thecatsecnum : Type A paintings}
\begin{catalogue}
Data regarding painting 1 of type A here.\label{cat:1}
\end{catalogue}
\begin{catalogue}
Data regarding painting 2 of type A here.\label{cat:2}
\end{catalogue}
\refstepcounter{catsecnum}\label{typeB}
\subsection*{\thecatsecnum : Type B paintings}
\begin{catalogue}
Data regarding painting 3 of type B here.\label{cat:3}
\end{catalogue}
\begin{catalogue}
Data regarding painting 4 of type B here.\label{cat:4}
\end{catalogue}
\section{Discussion}
Here I may refer to the fourth painting, which is of type B, by the reference \ref{typeB}\ref{cat:3}. But I may make mistakes and refer to \ref{typeA}\ref{cat3}.
\end{document}
答案1
有可能积累大量关于标签的详细信息zref
调用属性列表。下面我实现了一个非常基本的形式,其中 every\labelpainting{<label>}
标记绘画type
、painting
编号和page
(在文档内)。
\documentclass{article}
\usepackage{zref}
\makeatletter
\zref@newprop{type}[?]{\thesection}
\zref@newprop{painting}[?]{\thesubsection}
\renewcommand{\thesection}{\Alph{section}}
\newcommand{\newtype}[1][\relax]{%
\refstepcounter{section}%
\zref@setcurrent{painting}{}% No paintings
\ifx\relax#1\relax
\section*{Type~\thesection~Paintings}
\else
\section*{Type~\thesection~Paintings: #1}
\fi}%
\renewcommand{\thesubsection}{\arabic{subsection}}
\newcommand{\newpainting}[1][\relax]{%
\refstepcounter{subsection}%
\zref@setcurrent{default}{\thesection\thesubsection}%
\zref@setcurrent{painting}{\thesubsection}%
\ifx\relax#1\relax
\subsection*{Painting~\thesubsection}
\else
\subsection*{Painting~\thesubsection: #1}
\fi}
\newcommand{\labelpainting}[1]{%
\zref@labelbyprops{#1}{type,painting,page,default}%
}
\newcommand{\refpainting}[2][default]{%
\zref@refused{#2}%
\zref@extract{#2}{#1}%
}
\makeatother
\begin{document}
\newtype[Flemish] \label{type:A}
\newpainting
Data regarding painting~1 of type~A here.\labelpainting{painting:A}
\newpainting[Berlin]
Data regarding painting~2 of type~A here.\labelpainting{painting:B}
\newtype \label{type:B}
\newpainting[South Africa]
Data regarding painting~1 of type~B here.\labelpainting{painting:C}
\newpainting
Data regarding painting~2 of type~B here.\labelpainting{painting:D}
\section*{Discussion}
Here I may refer to the~\refpainting[painting]{painting:D}, which is
of type~\refpainting[type]{painting:D}, by the reference \refpainting{painting:D}.
\end{document}
\newtype[<opt arg>]
和都\newpainting[<opt arg>]
接受可选参数。如果使用,则附加: <opt arg>
到相应的标题。
我使用\section
s 来表示类型,使用\subsection
s 来表示绘画。但是,这可以根据需要进行扩展/调整。
这种方法的优点是,您可以标记与单幅画作相关的大量属性(或特性),然后使用不同的技术提取它们。常规系统\label
仅\ref
允许两个特性(标签和页面)。
答案2
我会像这样安排计数/参考,如果格式不是那么需要,则可以按照通常的方式定制标题布局。
\documentclass[a4paper]{article}
\newcommand\typehead[1]{\noindent\mbox{Type #1\hskip-1em{} Paintings}}
\makeatletter
\newcounter{type}
\newcommand\type{\@startsection{type}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries\typehead}{}}
\renewcommand\thetype{\Alph{type}}
\newcounter{catnum}
\newcommand\catalogue[1][]{\@startsection{catnum}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries}[kk]{#1}}
\renewcommand\thecatnum{\Alph{type}\arabic{catnum}}
% toc lines define these to be \newcommand*\l@type[1]{} if not needed
\newcommand*\l@type{\@dottedtocline{2}{1.5em}{2.3em}}
\newcommand*\l@catnum{\@dottedtocline{3}{3.8em}{3.2em}}
% add marks for page heads (or not here)
\def\catnummark#1{}
\def\typemark#1{}
\makeatother
\begin{document}
\tracingmacros3
\type\label{typea}
\begin{catalogue}[London]
Data regarding painting 1 of type A here.\label{cat:1}
\end{catalogue}
\begin{catalogue}[North Pole]
Data regarding painting 2 of type A here.\label{cat:2}
\end{catalogue}
\type\label{typeb}
\begin{catalogue}[The Louvre]
Data regarding painting 3 of type B here.\label{cat:3}
\end{catalogue}
\begin{catalogue}[Somewhere]
Data regarding painting 4 of type B here.\label{cat:4}
\end{catalogue}
\section*{Discussion}
Here I may refer to the fourth painting, which is of type B, by the reference
\ref{cat:4}.
\end{document}