有没有办法只引用小节部分?例如:
\documentclass{article}
\begin{document}
\section{This is my section}
For further information see subsection \ref{subsecthree} within this section.
\subsection{One}
\subsection{Two}
\subsection{Three}\label{subsecthree}
\end{document}
通常给出(不带星号):
1 This is my section
For further information see subsection **1.3** within this section.
但我想要:
1 This is my section
For further information see subsection **3** within this section.
那可能吗?
[编辑] 为了使其更清楚:我正在寻找一个像 \ref 一样工作的命令,但在 \label 的位置打印子部分计数器的值(阿拉伯数字)。
========================
== LaTeX 中的解决方案 ==
下面还有另一种解决方案。这是我想到的另一种解决方案
(我无法发布我自己问题的答案,因此我将其放在这里):
\documentclass{article}
\newcommand{\labelsubseccounter}[1]{
\renewcommand\thesubsection{\arabic{subsection}}
\addtocounter{subsection}{-1}
\refstepcounter{subsection}
\label{#1}
\renewcommand\thesubsection{\thesection.\arabic{subsection}}
}
\begin{document}
\section{This is my section}
For further information see subsection \ref{subsecthree} within this section,
which is called \ref{onepointthree}, not \ref{onepointfour}.
\subsection{One}
\subsection{Two}
\subsection{Three}\label{onepointthree}\labelsubseccounter{subsecthree}
\subsection{Four}\label{onepointfour}
\end{document}
(我想插入编译后的代码,但不知道如何做,抱歉)
答案1
与您的 MWE 相关,您可以使用以下内容:
\documentclass{article}
\makeatletter
\def\@firstoftwo@second#1#2{%
\def\temp##1.##2\@nil{##2}%
\temp#1\@nil}
\newcommand\sref[1]{%
\expandafter\@setref\csname r@#1\endcsname\@firstoftwo@second{#1}%
}
\makeatother
\begin{document}
\section{This is my section}
For further information see
\begin{tabular}{ll}
\verb+\sref{subsecone}+ & \sref{subsecone} \\
\verb+\sref{subsectwo}+ & \sref{subsectwo} \\
\verb+\sref{subsecthree}+ & \sref{subsecthree} \\
\end{tabular} within this section.
\subsection{One}\label{subsecone}
\subsection{Two}\label{subsectwo}
\subsection{Three}\label{subsecthree}
\end{document}
一些解释。
标准参考以以下形式保存在辅助文件中:
\newlabel{subsectwo}{{1.2}{1}}
您可以看到,这\newlabel
是一个带有两个强制参数的命令。第一个参数是标签名称,第二个参数里面还有另外两个组。第一组是编号方案,第二组显示页面。
因此,您要提取第二个强制参数的第一组,然后再提取数字的第二部分。
使用该命令,\@firstoftwo@second
您可以获取第二个参数的第一组\newlabel
,并根据其定义提取您请求的数字。
答案2
这不是答案,我只是想添加一个子部分的版本。也许 Marco Daniel(或其他人)可以验证这是否正确(我不是这方面的专家):
\documentclass{article}
% for subsections
\makeatletter
\def\@firstoftwo@second#1#2{%
\def\temp##1.##2\@nil{##2}%
\temp#1\@nil}
\newcommand\sref[1]{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo@second{#1}}
\makeatother
% for subsubsections
\makeatletter
\def\@firstoftwo@third#1#2{%
\def\temp##1.##2.##3\@nil{##3}%
\temp#1\@nil}
\newcommand\ssref[1]{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo@third{#1}}
\makeatother
\begin{document}
\section{Section 1}
\section{Section 2}
\section{Section 3}\label{sec}
\subsection{Subsection}\label{subsec}
\subsubsection{Subsubsection}
\subsubsection{Subsubsection}\label{subsubsec}
Now we are in Subsubsection \ssref{subsubsec} of Subsection \sref{subsec} of
Section \ref{sec}
\end{document}
答案3
这是 @MarcoDaniel 的解决方案,适用于article
或IEEEtran
,有或没有hyperref
。除了更通用之外,它还更强大(与 一起使用\pdfstrcmp
)并返回预期结果(\hbox{}
例如,从结果末尾丢弃)。还包括\subsubsection
s 的变体。
\ref
@Mico 100% 正确,此解决方案不会以任何方式修改、等的行为\autoref
。\cref
此外,对于hyperref
,的结果\sub(sub)ref
不是链接。那么我将其用于什么呢?
想象一下,在一篇文档中,某一节(例如,结果)中子节的顺序应遵循另一节(例如,材料和方法、实验)中子节的顺序。为了确保始终如此,我使用如下结构:
\section{Methods}
\subsection{...}
\label{MethodsA}
\section{Results}
\subsection{...}
\label{ResultA}
\CheckIfSubsectionsAreIdentical{MethodsA}{ResultsA}
为了实现这一点,我显然需要一种技术来从引用中提取裸露的子(子)部分编号,而不包含任何\hbox
es、\null
s 或任何其他内容。这就是\sub(sub)ref
的用途。有了hyperref
,它就可以替代\ref*
,即不提供超链接的版本。
代码如下:
\documentclass{article}
% \documentclass{IEEEtran}
% \usepackage{hyperref}
\makeatletter
\@ifclassloaded{article}{
\def\lastoftwo@dotted#1.#2\@nil{#2}
\def\lastofthree@dotted#1.#2.#3\@nil{#3}
\let\submynthofm\lastoftwo@dotted
\let\subsubmynthofm\lastofthree@dotted
}{}
\@ifclassloaded{IEEEtran}{
\def\lastoftwo@hyphen#1-#2\@nil{#2}%
\def\secondofthree@hyphen#1#2#3\@nil{#2}%
\def\submynthofm#1#2#3#4\@nil{\lastoftwo@hyphen#4\@nil}%
\def\subsubmynthofm#1#2#3#4\@nil{\secondofthree@hyphen#4\@nil}%
}{}
\@ifpackageloaded{hyperref}{
\newcommand{\subfirstofsix}[6]{\submynthofm#1\@nil}
\newcommand{\subsubfirstofsix}[6]{\subsubmynthofm#1\@nil}
\newcommand\subref[1]{\expandafter\real@setref\csname r@#1\endcsname\subfirstofsix{#1}}
\newcommand\subsubref[1]{\expandafter\real@setref\csname r@#1\endcsname\subsubfirstofsix{#1}}
}{
\newcommand{\subfirstofthree}[3]{\submynthofm#1\@nil}
\newcommand{\subsubfirstofthree}[3]{\subsubmynthofm#1\@nil}
\newcommand\subref[1]{\expandafter\@setref\csname r@#1\endcsname\subfirstofthree{#1}}
\newcommand\subsubref[1]{\expandafter\@setref\csname r@#1\endcsname\subsubfirstofthree{#1}}
}
\@ifclassloaded{article}{
\newcommand{\subrefvalue}{3}
\newcommand{\subsubrefvalue}{4}
}{}
\@ifclassloaded{IEEEtran}{
\newcommand{\subrefvalue}{C}
\newcommand{\subsubrefvalue}{4}
}{}
\makeatother
\begin{document}
Last subsection is \subref{subsec:last},
\ifnum\pdfstrcmp{\subrefvalue}{\subref{subsec:last}}=0 OK! \else Error! \fi
Last subsubsection is \subsubref{subsubsec:last},
\ifnum\pdfstrcmp{\subsubrefvalue}{\subsubref{subsubsec:last}}=0 OK! \else Error! \fi
\section{Section}
\section{Section}
\subsection{Subsection}
\subsection{Subsection}
\subsection{Subsection}
\label{subsec:last}
\subsubsection{Test}
\subsubsection{Test}
\subsubsection{Test}
\subsubsection{Test}
\label{subsubsec:last}
\end{document}
答案4
感谢您的提问,您的解决方案对我有用。我不得不做出调整,因为有两个问题:(1) 文章使用的IEEEtran
文档类别包含 IA1、IA2、II.A.1 等章节;(2) 我想引用不带章节编号的 subsection.subsubsection(例如 A.1、B.3 等)。
然后我将您的解决方案调整为:
\documentclass[conference]{IEEEtran}
\newcommand{\labelsubseccounter}[1]{
\renewcommand\thesubsubsection{\Alph{subsection}.\arabic{subsubsection}}
\addtocounter{subsubsection}{-1}
\refstepcounter{subsubsection}
\label{#1}
\renewcommand\thesubsubsection{\thesection.\Alph{subsection}.\arabic{subsubsection}}
}
\begin{document}
\section{This is my section}
For further information see subsection \ref{subsecthree} within this section,
which is called \ref{onepointthree}, not \ref{onepointfour}.
\subsection{A}
\subsection{B}
\subsection{C}
\subsubsection{C1}\label{onepointthree}\labelsubseccounter{subsecthree}
\subsection{D}\label{onepointfour}
\end{document}
希望这能帮助其他像我一样需要适应这一点的人。