我有一些投影仪幻灯片,其中许多命令在文档环境之前的序言中定义。作者设置由包含包提供的删除线文本的作者变量定义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}