Как использовать \hyperlink (из hyperref) в \makenote (из scrlayer-notecolumn)?

Как использовать \hyperlink (из hyperref) в \makenote (из scrlayer-notecolumn)?

Я пытаюсь поместить a \hyperlinkв a \makenote, но получаю следующую ошибку:

! Use of \\makenote doesn't match its definition.
\@ifnextchar #1#2#3->\let \reserved@d =#1\def \reserved@a {
                                                           #2}\def \reserved@b {#3}\futurelet \@let@token \@ifnch 
l.20 Testing hyperlink \makenote{a \hyperlink{anchorname}{hyperlink}.}
                                                                     in makenote.

Вот исходный код:

% lualatex
\documentclass{scrbook}

\usepackage{luatex85}

\usepackage{fontspec}

\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}

\usepackage{hyperref}

\begin{document}

Testing makenote \makenote{makenote}.

Testing \hyperlink{anchorname}{hyperlink}.

Testing hyperlink \makenote{a \hyperlink{anchorname}{hyperlink}.} in makenote.

Testing \hypertarget{anchorname}{hypertarget}.

Testing hyperref in makenote \makenote{a \hyperref[labelname]{hyperref}.}.

Testing \label{labelname}label.

\end{document}

Я использую lualatexдля компиляции, но получаю ту же ошибку, если использую pdflatex(предварительно закомментировав fontspec).

Команда \hyperlinkотлично работает в тексте, но не работает в \makenote.

Команда \hyperrefработает в \makenote, но, к сожалению, якоря \labels не совсем там, где \labels определены в целом. Поэтому это решение.

решение1

Начиная с версии KOMA-Script 3.23В пакете scrlayer-notecolumnесть вариант со звездочкой \makenote, который не требует защиты команд, но может сломаться и не должен расширяться:

\documentclass{scrbook}

\usepackage{fontspec}

\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}[2017/02/08]

\usepackage{hyperref}

\begin{document}

Testing makenote \makenote{makenote}.

Testing \hyperlink{anchorname}{hyperlink}.

Testing hyperlink \makenote*{a \hyperlink{anchorname}{hyperlink}.} in makenote.

Testing \hypertarget{anchorname}{hypertarget}.

Testing hyperref in makenote \makenote{a \hyperref[labelname]{hyperref}.}.

Testing \label{labelname}label.

\end{document}

результаты в

введите описание изображения здесь

без ошибок.

Тот же результат (даже с KOMA-Script до версии 3.23) можно получить, используя:

\documentclass{scrbook}

\usepackage{fontspec}

\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}

\usepackage{hyperref}

\begin{document}

Testing makenote \makenote{makenote}.

Testing \hyperlink{anchorname}{hyperlink}.

Testing hyperlink \makenote{a \protect\hyperlink{anchorname}{hyperlink}.} in makenote.

Testing \hypertarget{anchorname}{hypertarget}.

Testing hyperref in makenote \makenote{a \hyperref[labelname]{hyperref}.}.

Testing \label{labelname}label.

\end{document}

или

\documentclass{scrbook}

\usepackage{fontspec}

\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}
\DeclareRobustCommand*{\rhyperlink}{\hyperlink}

\usepackage{hyperref}

\begin{document}

Testing makenote \makenote{makenote}.

Testing \hyperlink{anchorname}{hyperlink}.

Testing hyperlink \makenote{a \rhyperlink{anchorname}{hyperlink}.} in makenote.

Testing \hypertarget{anchorname}{hypertarget}.

Testing hyperref in makenote \makenote{a \hyperref[labelname]{hyperref}.}.

Testing \label{labelname}label.

\end{document}

или

\documentclass{scrbook}

\usepackage{fontspec}

\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}
\DeclareRobustCommand*{\rmakenote}[1]{%
  \makenote{\detokenize{#1}}%
}

\usepackage{hyperref}

\begin{document}

Testing makenote \makenote{makenote}.

Testing \hyperlink{anchorname}{hyperlink}.

Testing hyperlink \rmakenote{a \hyperlink{anchorname}{hyperlink}.} in makenote.

Testing \hypertarget{anchorname}{hypertarget}.

Testing hyperref in makenote \makenote{a \hyperref[labelname]{hyperref}.}.

Testing \label{labelname}label.

\end{document}

Связанный контент