我需要指向页面上的标签,但由于我的文本分为两列,因此我还想包含列(1 或 2)。有没有办法找出标签位于哪一列?
\documentclass{icgg}
\begin{document}
\section{First chapter}
\label{explanation}
Some text explaining some things.
...
... see page \pageref{explanation} for ...
\end{document}
我想使用类似的东西:
see page \pageref{explanation}, column \columnref{explanation} for ...
可能的?
ps.该文档类是别人提供的,定义了双列格式。
答案1
这是一种尝试。
类icgg.cls
加载hyperref
。我们创建一个新命令,该命令在每次发出命令\collabel
时执行。\label
例如,如果您在文档的同一位置创建了\label{foo}
一个名为 的新标签,如果您想知道所引用的列,则必须使用命令。col:foo
\label{foo}
\columnref{col:foo}
这是一个例子(在您的文档中替换\documentclass[twocolumn]{article} \usepackage{hyperref}
)\documentclass{icgg}
:
\documentclass[twocolumn]{article}
\usepackage{hyperref}
\usepackage{lipsum} %only for the example
\makeatletter
\AtBeginDocument{%
\let\oldlabel\label
\newcommand*\collabel[1]{%
\begingroup
\protected@write\@auxout{}{%
\string\newlabel{col:#1}{%
{\if@firstcolumn 1\else 2\fi}%
{}%
{}%
{}%
{}%
}%
}%
\endgroup
}
\renewcommand*\label[1]{%
\collabel{#1}\oldlabel{#1}
}
\def\columnref#1{%
\HyRef@StarSetRef{#1}\@firstoffive
}
}
\makeatother
\begin{document}
\section{First section}\label{sec:first}
\lipsum[1-4]
\section{Second section}\label{sec:second}
\lipsum[1-3]\label{sec:third}
Section \ref{sec:first} starts at page \pageref{sec:first} in column \columnref{col:sec:first},
while section \ref{sec:second} starts at page \pageref{sec:second} in column \columnref{col:sec:second}
\end{document}
输出:
放大相关部分:
请注意,该命令\if@firstcolumn
有时无法检测正确的列,因此您可能会有一些错误的引用。