Я пытаюсь выделить некоторые строки псевдокода и использую это решение блок псевдокода. Однако я не понял следующую новую команду:
\newcommand{\fillcol}{green!20}
\newcommand<>{\boxto}[1]{
\only#2{
\tikz[remember picture with id=#1]
\draw[line width=1pt,fill=\fillcol,rectangle,rounded corners]
(pic cs:#1) ++(8.2,-.1) rectangle (-3.4,-.1);
}
}
Что означают символы <>
перед \newcommand
?
Более того, я хотел бы передать цвет для заливки прямоугольника как параметр для \boxto
команды. В опубликованном решении цвет определен как команда \fillcol
Как сделать это изменение? Может ли кто-нибудь мне помочь?
Спасибо!
решение1
Для быстроты: я не копировал ненужный код из связанного вопроса, т. е. я отключил pic
систему координат и tikz remember picture with id=#1
стиль.
Класс beamer
добавляет новую версию \newcommand
, позволяя генерировать команды с наложенной спецификацией, с
\newcommand<>{\cmdname}[number of args]{%...
% rest of code
}
Важно знать, что спецификация оверлея находится внутри и что команда на самом деле имеет на один аргумент больше, чем указано, т.е. в примере есть 3 аргумента. Третий предназначен для оверлея, поэтому последний аргумент всегда «скрыт», но к нему можно получить доступ.
Обратите внимание, что угловые скобки <1>
относятся к последнему аргументу, вот как это \only#3
работает.
Более подробную информацию см. в разделе 9.6 текущей документации проектора.
\documentclass{beamer}
\usepackage{tikz}
\newcommand{\fillcol}{green!20}
\newcommand<>{\boxto}[2]{
\only#3{%
\tikz%[remember picture with id=#1]
\draw[line width=1pt,fill=#2,rectangle,rounded corners] (1,1) rectangle (2,2);
}%
}
\begin{document}
\begin{frame}{Foo frame}
\boxto<1>{1}{green}
\boxto<2>{1}{red}
\end{frame}
\end{document}