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