参考旁注

参考旁注

我正在尝试使用旁注包裹。

当我引用第二个旁注时,文本是“旁注 1.1.2”,但对于第一个旁注,显示的是“旁注 1.1”。如何修复此错误?

这是一个紧凑的工作代码:

\documentclass[12pt]{book}

\usepackage{float}
\usepackage{caption}

 \usepackage{sidenotes}

 \usepackage[outer=7cm]{geometry}

 \usepackage{chngcntr}
 \counterwithin{sidenote}{section}
 \makeatletter
 \renewcommand{\thesidenote}{\@arabic{\numexpr\value{chapter}\relax}.\@arabic{\numexpr\value{section}\relax}.\@arabic{\numexpr\value{sidenote}+1\relax}}
 \makeatother


 \begin{document}

 \chapter{Example}

 \section{Cake}

 This is an example.\sidenote{First sidenote.\label{first}} \\
 This is second\sidenote{Second sidenote.\label{second}} \\
 More text... \\
     ...
   ... \\
 Then I refer to sidenote \ref{first} and then to sidenote \ref{second}.

 \end{document}

代码编译,但最后一句话出现如下

然后我参考边注 1.1,然后参考边注 1.1.2。

答案1

问题在于,该sidenotessidenote在末尾增加了计数器,因此只有在旁注结束后才会设置引用。可以通过在设置旁注之前更改\sidenotetext为执行以下操作来解决这个问题:\refstepcounter

\makeatletter
\ExplSyntaxOn
\RenewDocumentCommand \sidenotetext { o o +m }
{
  \IfNoValueOrEmptyTF{#1}
    {
      \refstepcounter{sidenote}
      \@sidenotes@placemarginal{#2}{\textsuperscript{\thesidenote}{}~#3}
    }
    {
      \@sidenotes@placemarginal{#2}{\textsuperscript{#1}~#3}
    }
}
\ExplSyntaxOff
\makeatother

然后\sidenote也必须进行更改以避免在文本中打印错误的数字:在原始代码中首先设置标记(使用旧的计数器值),我们要先添加注释(并增加计数器):

\RenewDocumentCommand \sidenote { o o +m }
{
  \@sidenotes@multichecker
  \sidenotetext[#1][#2]{#3}
  \sidenotemark[#1]
  \@sidenotes@multimarker
}

这也取代了你的\renewcommand\thesidenote,所以我们得到

\documentclass[12pt]{book}

\usepackage{float}
\usepackage{caption}

\usepackage{sidenotes}

\usepackage[outer=7cm]{geometry}

\usepackage{chngcntr}
\counterwithin{sidenote}{section}
\makeatletter
\ExplSyntaxOn
\RenewDocumentCommand \sidenote { o o +m }
{
  \@sidenotes@multichecker
  \sidenotetext[#1][#2]{#3}
  \sidenotemark[#1]
  \@sidenotes@multimarker
}
\RenewDocumentCommand \sidenotetext { o o +m }
{
  \IfNoValueOrEmptyTF{#1}
    {
      \refstepcounter{sidenote}
      \@sidenotes@placemarginal{#2}{\textsuperscript{\thesidenote}{}~#3}
    }
    {
      \@sidenotes@placemarginal{#2}{\textsuperscript{#1}~#3}
    }
}
\ExplSyntaxOff
\makeatother


\begin{document}

\chapter{Example}

\section{Cake}

This is an example.\sidenote{First sidenote.\label{first}} \\
This is second\sidenote{Second sidenote.\label{second}} \\
More text... \\
    ...
  ... \\
Then I refer to sidenote \ref{first} and then to sidenote \ref{second}.

\end{document}

在此处输入图片描述

相关内容