标题旁边的边注

标题旁边的边注

我想为每个标题插入一个或两个超链接,并将它们插入到页边距中,以便与标题对齐。我希望创建一个可以自动执行此操作的命令,但这比我想象的要难。

首先,我只需要

\documentclass{article}

\usepackage{marginnote}

\newcommand\Hlink[1]{%
    \marginnote{#1}[-1.9\baselineskip]%
    \noindent}

\reversemarginpar

\begin{document}

\section{Section 1}

\Hlink{Sec 1 Link}
Lorem Ipsum

\subsection{Subsection 1.1}

\Hlink{Subsec 2 Link}
Lorem Ipsum

\end{document}

-1.9\baselineskip通过反复试验选择了 ,但这对其他标题不再有效(例如)\subsection。是否有命令可以定义标题后的间距?

保留\noindent未缩进的段落,但要求\Hlink文本开头和结尾之间没有行分隔。虽然这是一个相对较小的问题,但肯定有办法解决它。

此命令还有一个问题,即如果页眉靠近页面末尾,则很可能会导致分页符。我尝试\nobreak在命令之前和之后插入,但无济于事。

另一个问题是边距会根据页面改变两侧,虽然在打印时看起来可能更好,但在 PDF 中这可能不是理想的选择(并且链接应该是超链接)。是否可以修改\Hlink为始终使用左侧?

答案1

如果您愿意根据需要调用宏来在部分单元标题左侧插入内容,那么使用\sectionlink如下定义就足够了:

在此处输入图片描述

\documentclass{article}
\makeatletter
\def\sectionlink#1{\def\@sectionlink{#1}}% User interface macro for defining section link
\let\@sectionlink\@empty% Default value for \@sectionlink
\def\@seccntformat#1{% Update sectional unit formatting macro
  \ifx\@sectionlink\@empty\else% If a section link exists...
    \llap{\normalfont\normalsize\@sectionlink\hspace*{\marginparsep}}\fi% ...print it in left margin.
  \csname the#1\endcsname\quad}
\let\old@xsect\@xsect
\def\@xsect{\let\@sectionlink\@empty\old@xsect}% Erase old section link
\makeatother

\begin{document}

\sectionlink{Sec 1 Link}
\section{Section 1} Lorem Ipsum

\sectionlink{Subsec 2 Link}
\subsection{Subsection 1.1} Lorem Ipsum

\subsection{Subsection 1.2} Lorem Ipsum

\end{document}

目的是调用\sectionlink{<stuff>} 和朋友打个电话\section

可以将其作为分段宏的一部分,尽管这需要更多工作。此外,如果“分段链接”太宽而无法放入边距(例如,允许将其放置在 中\parbox),则需要做更多工作。


为了允许分段链接中的换行,您可以在 中设置它tabular。在下面的示例中,代码已更新为将链接存储在 中tabular(默认为r右对齐和[t]左对齐),然后存储在一个框中。然后设置此框\smash以不妨碍调用它的行以下的任何溢出。

在此处输入图片描述

\documentclass{article}
\makeatletter
\newsavebox\@sectionlinkbox
% User interface macro for defining section link
\newcommand{\sectionlink}[2][r]{% ***
  \savebox{\@sectionlinkbox}{%
    \tabular[t]{@{}#1@{}}#2\endtabular}}
\def\@seccntformat#1{% Update sectional unit formatting macro
    \llap{\normalfont\normalsize\smash{\usebox\@sectionlinkbox}\hspace*{\marginparsep}}% ...print it in left margin.
  \csname the#1\endcsname\quad}
\let\old@xsect\@xsect
\def\@xsect{\savebox{\@sectionlinkbox}{\@empty}\old@xsect}% Erase old section link
\makeatother

\begin{document}

\sectionlink{Sec 1 Link}
\section{Section 1} Lorem Ipsum

\sectionlink{Subsec 1 \\ Link}
\subsection{Subsection 1.1} Lorem Ipsum

\subsection{Subsection 1.2} Lorem Ipsum

\sectionlink[l]{Subsec 3 \\ Link}
\subsection{Subsection 1.3} Lorem Ipsum

\end{document}

如果你有更多p段落式的分段链接,你可以修改标记***为阅读的代码行

\newcommand{\sectionlink}[2][p{\marginparwidth}]{%

或者,尝试tabular定义中包含的常规设置\sectionlink

相关内容