如何获取所有参考文献的前缀之类的章节编号

如何获取所有参考文献的前缀之类的章节编号

这是我发布的问题:“我需要输出“参见第 2.3 节”,其中引用的节是第二章的第三节。”

你们都对。我必须重新定义这个问题。

许多不同的地方都引用了这些章节:

  • 在目录中。由\tableofcontents
  • minitoc在 minitocs 中。由包管理
  • fancyhdr在标题中。由包管理
  • 就像一个领导者部分。由管理\section
  • 正文。由\ref

在目录和 minitocs 中,由于每个部分都出现在其章节下方(带有一些缩进),因此无需在章节号前加上章节号。标签范围是本地的;所以我需要本地渲染。示例:

                  1. Chapter One ------------------1
                       1. First section -----------1
                       2. Second section ----------3
                   2. Chapter Two -----------------5
                       1. First section ...........5

这意味着第 1.1 节和第 2.1 节必须呈现为第 1 节。

当我们使用\section命令时,我们知道我们在哪一章:它显示在页面的标题中。所以我还想要本地范围:

             1. First section
                       bla bla
             2. Second section
                       bla bla

在标题中我想要全局范围:

             1. Chapter One                      1.1. First section

在文本中,我们可以对文本的任意点进行交叉引用。所以我们需要全局范围:

                See section 1.1 (first section in first chapter)

这就是问题所在:默认行为在任何地方都赋予全局范围。但如果我重新定义为\thesection本地范围,那么我就会在所有地方重新定义。

这是我的代码:

\documentclass[catalan]{book}
\usepackage{fancyhdr}
\usepackage{nameref}
\usepackage{minitoc}
\usepackage{hyperref}

\makeindex
\dominitoc

%\renewcommand{\thesection}{\arabic{section}}

\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
\renewcommand{\sectionmark}[1]{\markboth{\thechapter.\thesection\ \ #1}}

\fancyhead{}
\fancyhead[LO]{\leftmark}
\fancyhead[RE]{\thechapter.\rightmark}

\pagestyle{fancy}

\begin{document}
\tableofcontents

\chapter{One}

\minitoc[e]

\section{First section}\label{sec:A}

aaaaaa \newpage bbbbbbbb \newpage ccccccccccc

\chapter{Two}

\minitoc[e]

\section{Second section}\label{sec:B}

See sections \ref{sec:A} and  \ref{sec:B}

\end{document}

答案1

我认为你把标记弄反了。你想在奇数页上做右边的标记,在偶数页上做左边的标记。

因此,这有点像黑客攻击,但它似乎可以让对章节的引用按照你想要的方式出现。

\documentclass[catalan]{book}
\usepackage{fancyhdr}
\usepackage{nameref}
\usepackage{hyperref}
\usepackage{minitoc}

\makeindex
\dominitoc

\renewcommand\thesection{\arabic{section}}
\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thechapter.\thesection\ #1}}

\fancyhead{}
\fancyhead[LE]{\leftmark}
\fancyhead[RO]{\rightmark}

\pagestyle{fancy}

\makeatletter
\def\T@ref#1{%
        \NR@setref{#1}\checkforsectioni{#1}%
}
\def\checkforsectioni#1#2#3#4#5{%
        \checkforsectionii{#1}#4\@nil.\@nil\@nnil
}
\def\checkforsectionii#1#2.#3\@nil#4\@nnil{%
        \ifnum\pdfstrcmp{#2}{section}=\z@
                #3%
        \else\ifnum\pdfstrcmp{#2}{subsection}=\z@
                #3%
        \else
                #1%
        \fi\fi
}
\makeatother
\begin{document} \tableofcontents \chapter{One}

\minitoc[e]

\section{First section}
\label{sec:A}
aaaaaa \newpage bbbbbbbb \newpage
ccccccccccc

\chapter{Two} \minitoc[e]
\section{Second section}
\label{sec:B}

\subsection{Sub}
\label{sec:C}
See sections \ref{sec:A}, \ref{sec:B}, and \ref{sec:C}.

\end{document}

这是因为 hyperref 在 aux 文件中写入了如下条目

\newlabel{sec:A}{{1}{3}{First section\relax }{section.1.1}{}}

如果你跟踪 的执行\ref,你会看到\T@ref扩展为\NR@setref{#1}\@firstoffive{#1},并且\@firstoffive在 的第二个参数之前使用\newlabel。也就是说,它最终扩展为

\@firstoffive{1}{3}{First section\relax }{section.1.1}{}

\@firstoffive您可以通过替换为 5 个参数的宏来获得不同的行为。在本例中,\checkforsectioni它吸收 5 个参数,然后使用 TeX 的分隔参数功能在其第 4 个参数中抓取第一个句点(如果存在)之前的文本。如果该文本是sectionsubsection,则使用的文本是第一个句点之后的文本,即1.1本例中的内容。否则,它会执行正常操作并扩展到第一个参数。

相关内容