在 Beamer 中,如何在序言中的作者设置(由命令定义)中添加删除线文本?

在 Beamer 中,如何在序言中的作者设置(由命令定义)中添加删除线文本?

我有一些投影仪幻灯片,其中许多命令在文档环境之前的序言中定义。作者设置由包含包提供的删除线文本的作者变量定义ulem。作者设置使用此变量定义在序言中由于技术原因。

\documentclass{beamer}
% strikethrough
    \usepackage[normalem]{ulem}

\newcommand{\authorSpecification}{
    \sout{G.~Aad et.~al.}
}

\title{title}
%\author{test}
\author{\authorSpecification}
\date{\today}

\begin{document}

\frame{\titlepage}

\end{document}

当我尝试编译它时,出现以下错误:

! Argument of \UL@word has an extra }.
<inserted text> 
                \par 
l.11 \author{\authorSpecification}

我怎样才能解决这个问题?

答案1

问题是beamer想要将作者信息也作为 PDF 文件的元数据传递,当然这是不可能实现的\sout

通常的解决方案是利用\texorpdfstring

\documentclass{beamer}

\usepackage[normalem]{ulem}

\newcommand{\authorSpecification}{%
  \texorpdfstring{\sout{G.~Aad et.~al.}}{G. Aad et. al.}%
}

\title{title}
\author{\authorSpecification}
\date{\today}

\begin{document}

\frame{\titlepage}

\end{document}

pdfinfo会显示如下信息:

Title:          title
Subject:        
Keywords:       
Author:         G. Aad et. al.
Creator:        LaTeX with Beamer class version 3.36

\author之后将使\begin{document}Author字段为空。

可以\texorpdfstring通过提供以下替代方案来避免\sout

\documentclass{beamer}

\usepackage[normalem]{ulem}

\makeatletter
% in PDF strings, we want \sout to be a no-op
% \@iden = \@firstofone just strips the braces off
\pdfstringdefDisableCommands{\let\sout\@iden}
\makeatother

\newcommand{\authorSpecification}{%
  \sout{G.~Aad et.~al.}%
}

\title{title}
\author{\authorSpecification}
\date{\today}

\begin{document}

\frame{\titlepage}

\end{document}

使用\robustify{\sout}(如另一个答案中所建议的)会发出警告

Package hyperref Warning: Token not allowed in a PDF string (PDFDocEncoding):
(hyperref)                removing `\sout' on input line 13.

并且\pdfstringdefDisableCommands无论如何都需要命令来摆脱它。

答案2

显然\sout{...}与 beamer 的\author命令相冲突,也许它已经尝试在序言中进行排版。

但是将\author命令移到文档主体中是可行的:

\documentclass{beamer}
% strikethrough
\usepackage[normalem]{ulem}

\newcommand{\authorSpecification}{%
  \sout{G.~Aad et.~ al.}
}

\title{title}
%\author{test}

\date{\today}

\begin{document}
\author{\authorSpecification}
\frame{\titlepage}

\end{document}

在此处输入图片描述

编辑

问题在于脆弱的命令\sout:增强帮助,并且\author{\authorSpecification}可以在序言中使用。

\documentclass{beamer}
% strikethrough
\usepackage[normalem]{ulem}

\usepackage{etoolbox}

\robustify\sout

\newcommand{\authorSpecification}{%
  \sout{G.~Aad et.~al.}
}

\title{title}
\author{\authorSpecification}
\date{\today}

\begin{document}

\frame{\titlepage}

\end{document}

相关内容