Выделите элемент в списке после его открытия

Выделите элемент в списке после его открытия
\documentclass[xcolor=table ]{beamer}


\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}

\title[Your Short Title]{Your Presentation}
\author{You}
\institute{Where You're From}
\date{Date of Presentation}

\begin{document}


\begin{frame}{Introduction}

\begin{itemize}
  \item <1-> Your introduction goes here!
  \item <2> Use \texttt{itemize} to organize your main points.
\end{itemize}

\end{frame}
\begin{frame} 
\begin{itemize}
  \item Your introduction goes here!
  \item {\colorbox{yellow} {Use \texttt{itemize} to organize your main points.}}
\end{itemize}

\end{frame}

\end{document}

Этот MWE показал детализированный список. После отображения двух последовательных элементов я ожидаю, что второй элемент будет выделенна третьем этапе. Я добился этого дублированием кадра. Можно ли этого добиться наложением без ручного дублирования кадра

решение1

Простейшее решение — сделать \onlyчасть \colorbox{yellow}кода условной:

    \begin{frame}{Introduction}
        \begin{itemize}
            \item <1-> Your introduction goes here!
            \item <2-> \only<3>{\colorbox{yellow}}{Use \texttt{itemize} to organize your main points.}
        \end{itemize}
    \end{frame}

Однако здесь есть проблема: поскольку \colorboxзаполняет некоторую область вокруг текста, он изменяет интервал, что приводит к видимым подпрыгиваниям (попробуйте, чтобы увидеть это).

Это можно исправить, всегда используя \colorbox, но заполнять его фоновым цветом, когда он не должен быть выделен. Поскольку это немного беспорядочно, я бы определил новую команду для этой цели:

\documentclass[xcolor=table]{beamer}
\usepackage[english]{babel}

\title[Your Short Title]{Your Presentation}
\author{You}
\institute{Where You're From}
\date{Date of Presentation}

\newcommand<>{\mycolorbox}[3][white]{{%
    % #1 = default color when overlay specification is not fulfilled (default: white)
    % #2 = color when overlay specification is fulfilled
    % #3 = text to be displayed
    % #4 = the actual overlay specification
    \def\mycolor{#1}%
    \only#4{\def\mycolor{#2}}%
    \colorbox{\mycolor}{#3}%
}}

\begin{document}
    \begin{frame}{Introduction}
        \begin{itemize}
            \item <1-> Your introduction goes here!
            \item <2-> \mycolorbox<3>{yellow}{Use \texttt{itemize} to organize your main points.}
        \end{itemize}
    \end{frame}
\end{document}

Синтаксис \newcommand<>объясняется в beamerруководстве пользователя, раздел9.6.1 Создание команд и оверлеев сред с учетом спецификаций. Первый аргумент — это имя определяемого макроса ( \mycolorboxв данном случае), затем следует количество аргументов, исключая спецификацию наложения, и, наконец, значение по умолчанию для первого аргумента. Внутри команды аргументы можно ссылаться с помощью символа , #за которым следует их номер ( #1и #2т. д., см. комментарии).

Двойная пара фигурных скобок {{и }}существует для создания группы TeX, что означает, что любые макроопределения (переопределения) будут забыты в конце. Внешняя пара разграничивает содержимое команды, а внутренняя пара — это группа TeX.

Затем я использую \def(я мог бы также использовать \newcommand) для определения нового макроса, \mycolor, который изначально является цветом по умолчанию. Используя \only, я затем условно переопределяю его на желаемый цвет (желтый в этом примере). Наконец, я вызываю команду \colorbox.

Кстати, можно просто написать \colorbox<3>{yellow}{text}, но почему-то для этого используется черный фон...

Связанный контент