以下是我的下一个问题,这次是交叉引用。我尝试了一些其他帖子在这里使用与我的需求相关的格式和目录格式的混合格式的参考。我想要以下内容:
- 我的部分是“I.”、“II”。
- 我的小节是:“1。”,“2。”,不重复该部分
- 我的所有目录条目均以尾随“。”结尾引用。
- 所有小节引用都应包含章节但不包含尾随的点,例如“II.1”、“I.2”。
- 所有章节引用都应该只是章节末尾的点,即“I”或“II”
- 最后,我希望自动包含“supra”和“infra”关键字。
关于 supra/infra 的解释,有一个强制性要求(语言/领域限制),如果引用的部分出现在下面,则指示“infra”的相对位置;如果引用的部分已经在引用之上,则指示 supra 的相对位置。
我想,即使我的示例目前无法很好地处理所有“点”部分,但所有格式都应“简单”。
另外,有没有办法直接制作包含“supra/infra”的特殊命令?
\documentclass{article}
\setcounter{secnumdepth}{3}
\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}
\makeatletter
\renewcommand\@seccntformat[1]{\csname the#1\endcsname.\quad}
\renewcommand\p@subsection{\thesection.}
\makeatother
\begin{document}
\tableofcontents
\section{Test Section 1}
A cross-reference to some Subsection that comes below: \ref{a}, \ref{b} and \ref{c}.
This would ideally be cited "infra \ref{a}" and "infra \ref{b}"
\subsection{Test Subsection}\label{a}
\section{Test Section 2}
\subsection{Test Subsubsection}\label{b}
At this point \ref{a} is above citation and \ref{c} is below. It should cite "supra \ref{a}" and "infra \ref{c}"
\section{Test Section 3}
\subsection{Test Subsubsection}\label{c}
A cross-reference to some Subsection that comes below: \ref{a}, \ref{b} and \ref{c}.
This would ideally be cited supra \ref{a}, supra \ref{b}
\end{document}
答案1
您快完成了。您只需要同意目录和“infra”/“supra”的内容。
您可以使用tocloft
TOC 和类似以下的解决方案引用“上”或“下”针对“supra”/“infra”。诀窍在于,我们可以检查标签是否已创建,如果是,则我们有一个“supra”引用,如果不是,则它一定是“infra”(假设所有引用都已定义,未定义的引用是“infra”,但这应该没问题)。
\documentclass{article}
\setcounter{secnumdepth}{3}
\renewcommand{\thesection}{\Roman{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}
\makeatletter
\renewcommand\@seccntformat[1]{\csname the#1\endcsname.\quad}
\renewcommand\p@subsection{\thesection.}
\makeatother
\usepackage{tocloft}
\setlength{\cftsecnumwidth}{2em}% default is 1.5em
\setlength{\cftsubsecnumwidth}{1.5em}% default is 2.3em
\def\cftsecaftersnum{.}
\def\cftsubsecaftersnum{.}
\usepackage{etoolbox}
\makeatletter
\newcommand*{\xawi@seenlabels}{}
\newcommand*{\lawlabel}[1]{%
\@bsphack
\label{#1}%
\listadd{\xawi@seenlabels}{#1}%
\@esphack
}
\newcommand*{\lawref@supinf}[1]{%
\ifinlist{#1}{\xawi@seenlabels}
{supra}
{infra}}
\newcommand*{\lawref}[1]{%
\lawref@supinf{#1}~\ref{#1}}
\makeatother
\begin{document}
\tableofcontents
\section{Test Section 1}\lawlabel{d}
A cross-reference to some Subsection that comes below: \lawref{a}, \lawref{b} and \lawref{c}.
This would ideally be cited "infra \ref{a}" and "infra \ref{b}"
\subsection{Test Subsection}\lawlabel{a}
\section{Test Section 2}
\subsection{Test Subsubsection}\lawlabel{b}
At this point \lawref{a} is above citation and \lawref{c} is below. It should cite "supra \ref{a}" and "infra \ref{c}" finally \lawref{d}
\section{Test Section 3}
\subsection{Test Subsubsection}\lawlabel{c}
A cross-reference to some Subsection that comes below: \lawref{a}, \lawref{b} and \lawref{c}.
This would ideally be cited supra \ref{a}, supra \ref{b}
\end{document}