我正在尝试构建自己的beamer
主题,并为其个性化引用。使用包的 seq 模块expl3
,我编写了一个函数,将框架的所有引用收集到一个序列中,我在每个框架的末尾使用该序列来打印所有引用。
问题是我想在tcolorbox
脚注中打印所有引用,但是同时使用函数expl3
\seq_map_inline:Nn
和脚注不起作用beamer
,我收到错误
\insertfootnotetext”定义中的参数编号非法。
使用文章类时一切都运行正常。
以下是 MWE:
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tcolorbox}
\usepackage{xparse}
\usepackage{expl3}
\usepackage{biblatex}
% My citation
\newcommand{\mycite}[1]{ \cite{#1} ~ \citeauthor{#1} ~ \citetitle{#1} ~ (\citeyear{#1})}
% List of citations
\ExplSyntaxOn
\seq_new:N \l_frame_cite_list
\NewDocumentCommand{\myAddCitation}{m}{\seq_put_right:Nn \l_frame_cite_list {#1}}
\NewDocumentCommand{\generateCitationBox}{}{
\seq_if_empty:NTF \l_frame_cite_list {} {
\seq_remove_duplicates:N \l_frame_cite_list
\footnote{
\vspace{-1em}
\begin{tcolorbox}
\seq_map_inline:Nn \l_frame_cite_list {
\mycite{##1}\\
}
\vspace{-1em}
\end{tcolorbox}
\vspace{-1em}
}
\seq_clear:N \l_frame_cite_list
}
}
\ExplSyntaxOff
\newenvironment{myframe}{\begin{frame}}{\generateCitationBox \end{frame}}
\begin{document}
\begin{myframe}
\myAddCitation{A}
\myAddCitation{B}
Hello World
\end{myframe}
\end{document}
提前感谢您的回答,
西蒙。
答案1
这与如何beamer
收集框架的文本作为宏的参数有关。您可以使用[fragile]
,但使用更简单\seq_map_function:NN
,因此参数不会在代码中明确传递。
\begin{filecontents*}{\jobname.bib}
@article{A,
author={A. Uthor},
title={A title},
journal={A Journal},
year=2018,
}
@article{B,
author={W. Riter},
title={B title},
journal={B Journal},
year=2019,
}
\end{filecontents*}
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tcolorbox}
\usepackage{xparse}
\usepackage{expl3}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
% My citation
\newcommand{\mycite}[1]{\cite{#1} \citeauthor{#1} \citetitle{#1} (\citeyear{#1})}
\ExplSyntaxOn
% List of citations
\seq_new:N \l_frame_cite_list_seq
\NewDocumentCommand{\myAddCitation}{m}
{
\seq_put_right:Nn \l_frame_cite_list_seq {#1}
}
\NewDocumentCommand{\generateCitationBox}{}
{
\seq_if_empty:NF \l_frame_cite_list_seq
{
\seq_remove_duplicates:N \l_frame_cite_list_seq
\footnote
{
% \vspace{-1em}
\begin{tcolorbox}
\seq_map_function:NN \l_frame_cite_list_seq \__frame_mycite:n
\vspace{-1em}
\end{tcolorbox}
% \vspace{-1em}
}
\seq_clear:N \l_frame_cite_list
}
}
\cs_new_protected:Nn \__frame_mycite:n { \mycite{#1}\\ }
\ExplSyntaxOff
\newenvironment{myframe}{\begin{frame}}{\generateCitationBox \end{frame}}
\begin{document}
\begin{myframe}
\myAddCitation{A}
\myAddCitation{B}
Hello World
\end{myframe}
\end{document}