\frametitle で \mylabel を使用する方法

\frametitle で \mylabel を使用する方法

\frametitle新しいコマンドでラベル付けしたセクションを参照する必要があります\mylabel。コードは次のとおりです。

\documentclass{beamer} 


\makeatletter
\newcommand*{\mylabel}[2]{%
\@bsphack
\begingroup
\def\@currentlabel{#2}%
\label{#1}%
\endgroup
\@esphack

}
\makeatother


\begin{document}



\section[Title 1]{This is a long title that gos on very long long long long long  
 long long title more long long }{\mylabel{LabelTopic1}{This is a long title that  
 gos on very long long long long long long long title more long long }}



\frame<presentation>{\frametitle{\ref{LabelTopic1}}}




\end{document}

これが私が得たものです ここに画像の説明を入力してください

問題は、名前が長すぎて、frametitle の 1 行に収まらず、行が改行されないことです。コマンドに何かが欠けていると思います\mylabel。しかし、何が欠けているのかはわかりません。

ご協力ありがとうございます

答え1

タイトルとセクション名は移動引数と呼ばれるもので、その中のマクロは不吉な兆候やオランダの天候から保護される必要があります。(興味があれば、追加の読み物:\DeclareTextFontCommand ではなく \newcommand を使用するのはなぜですか?) 2回コンパイルする

\documentclass{beamer} 

\makeatletter
\newcommand*{\mylabel}[2]{%
\@bsphack%
\begingroup%
\def\@currentlabel{#2}%
\label{#1}%
\endgroup%
\@esphack%
}
\makeatother
\begin{document}

\section[Title 1]{This is a long title that gos on very long long long
                  long long long long title more long long }{% Watch the next line
                      \protect\mylabel{LabelTopic1}{This is a long title that gos on very 
                      long long long long long long long title more long long}%
                      }

\frame<presentation>{\frametitle{\ref{LabelTopic1}}}
\end{document}

ここに画像の説明を入力してください

関連情報