假设我有一些 latex 模板(这里使用默认样式)。此模板为环境中的 sbeamer
定义了一些特定符号。是否可以使用\item
itemize
相同的不使用itemize
环境的符号?
我希望它能够独立于正在使用的具体符号工作。例如,beamer
使用某种三角箭头符号,而默认article
使用项目符号。我希望能够提取当前使用的符号,无论它是什么。
例如
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}
\item Item with symbol.
\end{itemize}
I want to use item symbol again here: SYMBOLHERE
\end{frame}
\end{document}
答案1
简短回答
因为beamer
您可以使用 访问符号\usebeamertemplate{itemize item}
。
长答案
没有答案可以适用于任何类。大多数标准类定义宏\labelitemi
,..., \labelitemiv
。例如
% article.cls ll 533--358
\newcommand\labelitemi {\labelitemfont \textbullet}
\newcommand\labelitemii {\labelitemfont \bfseries \textendash}
\newcommand\labelitemiii{\labelitemfont \textasteriskcentered}
\newcommand\labelitemiv {\labelitemfont \textperiodcentered}
或者
% scrartcl.cls ll. 6755--6758
\newcommand*\labelitemi{\usekomafont{labelitemi}{\textbullet}}
\newcommand*\labelitemii{\usekomafont{labelitemii}{\textendash}}
\newcommand*\labelitemiii{\usekomafont{labelitemiii}{\textasteriskcentered}}
\newcommand*\labelitemiv{\usekomafont{labelitemiv}{\textperiodcentered}}
或者
% memoir.cls ll. 4711--4714
\newcommand{\labelitemi}{\textbullet}
\newcommand{\labelitemii}{\normalfont\bfseries \textendash}
\newcommand{\labelitemiii}{\textasteriskcentered}
\newcommand{\labelitemiv}{\textperiodcentered}
当您启动{itemize}
环境时,当前计数器深度将转换为小写罗马数字(从i
到iv
),并且相应的\labelitem...
宏将用作列表的标签。有了所有这些类,您就可以\labelitem...
在文档中使用它们(认为最好在其周围添加一个组,以免字体更改命令执行您不想要的操作)。
beamer
然而, 的做法有些不同:计数器深度被转换成字符串(空、或sub
或subsub
),然后itemize XXitem
使用相应的 beamer 模板。因此你会发现
% beamerinnerthemedefault.sty ll. 173--175
\defbeamertemplate*{itemize item}{default}{\usebeamerfont*{itemize item}\raise1.25pt\hbox{\donotcoloroutermaths$\blacktriangleright$}}
\defbeamertemplate*{itemize subitem}{default}{\usebeamerfont*{itemize subitem}\raise1.5pt\hbox{\donotcoloroutermaths$\blacktriangleright$}}
\defbeamertemplate*{itemize subsubitem}{default}{\usebeamerfont*{itemize subsubitem}\raise1.5pt\hbox{\donotcoloroutermaths$\blacktriangleright$}}
一个可能的解决方法是在序言中写下以下几行:
\providecommand*{\labelitemi}{\leavevmode\usebeamertemplate{itemize item}}
\providecommand*{\labelitemii}{\leavevmode\usebeamertemplate{itemize subitem}}
\providecommand*{\labelitemiii}{\leavevmode\usebeamertemplate{itemize subsubitem}}
这样,当使用标准类(广义上,也包括memoir
KoMa 类)时\provdecommand*
,将被简单地忽略,而使用beamer
它将给出所需的输出。