\makenote (scrlayer-notecolumn から) で \hyperlink (hyperref から) を使用するにはどうすればよいでしょうか?

\makenote (scrlayer-notecolumn から) で \hyperlink (hyperref から) を使用するにはどうすればよいでしょうか?

\hyperlinkを に入れようとしています\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を使用した場合も同じエラーが発生します。pdflatexfontspec

コマンド\hyperlinkはテキストでは正常に機能しますが、 でのみ失敗します\makenote

コマンド\hyperrefは で動作します\makenoteが、残念ながら のアンカーはが一般的に定義されている\label場所と正確に同じではありません\label。したがって、これが解決策です。

答え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}

関連情報