
Мне нравится, как tikZ в сочетании с beamer может подсвечивать уравнения (он также хорошо работает с режимами beamerarticle и article), как вTeXпример
Я часто использую эту функцию, но я думаю, что код трудно манипулировать "на ходу". Я хотел бы создать newcommand
(?) \EqNComments
(Уравнение и Комментарии), которые я мог бы легко вызывать в своем коде.
\EqNComments
{$\Delta$}{=}{Le point Delta}
{$\mathcal{N}(d_1)$}{+}{Hedge ratio}
{$K.e^{-rt}.\mathcal{N}(d_2)$}{}{Strike actualised}
Вот MWE, который отлично работает с элементами 3x3.
- Я застрял с ограничением в 9
newcommand
параметров - У меня возникли проблемы с вводом a
\foreach
для оптимизации кода Должен быть более разумный способ решения этого вопроса...
\documentclass{beamer} %\documentclass[11pt,twoside]{article} %\usepackage[envcountsect]{beamerarticle} \usetheme{Warsaw} \usepackage{amsmath} \usepackage{amssymb} \usepackage{tikz} \usetikzlibrary{arrows,shapes} \tikzset{ Col1/.style= {fill=blue!20,anchor=base,rounded corners=2pt}, Col2/.style= {Col1, fill=red!20}, Col3/.style= {Col1, fill=green!20}, } \newcommand{\EqNComments}[9] { \tikzstyle{every picture}+=[remember picture] \tikzstyle{na} = [baseline=-.5ex] \begin{frame} \begin{equation} \tikz[baseline] {\node[Col1] (d1) {#1};} #2 \tikz[baseline] {\node[Col2] (d2) {#4};} #5 \tikz[baseline] {\node[Col3] (d3) {#7};} #8 % \tikz[baseline] {\node[Col3] (d4) {#10};} #11 \end{equation} \begin{itemize} \item #3 \tikz[na] \node[coordinate] (s1) {}; \item #6 \tikz[na] \node[coordinate] (s2) {}; \item #9 \tikz[na] \node[coordinate] (s3) {}; % \item #12 % \tikz[na] \node[coordinate] (s4) {}; \end{itemize} \begin{tikzpicture}[overlay] \path[->] (s1) edge [bend left] (d1); \path[->] (s2) edge [bend right] (d2); \path[->] (s3) edge [out=0, in=-90] (d3); % \path[->] (s4) edge [out=0, in=-90] (d4); \end{tikzpicture} \end{frame} } \begin{document} \EqNComments {$\Delta$}{=}{Le point Delta} {$\mathcal{N}(d_1)$}{+}{Hedge ratio} {$K.e^{-rt}.\mathcal{N}(d_2)$}{-}{Strike actualised} %{dividendes}{.}{Not working here if I try to extend the command to 12 arguments} \end{document}
решение1
Это делает что-то в этом роде. Он использует tikzmark
библиотеку, которая является лучшим инструментом, поскольку, помимо прочего, она не разрушает интервал и определяет режим, в котором мы находимся. Любое количество может быть аннотировано с помощью
\tmn{<quantity>}{<annotation>}
Пока вы помещаете их в AnnotatedEquation
среду, они будут аннотироваться списком аналогично тому, что вы делаете. Узлы будут использовать стили Col1
и Col2
т. д. в той степени, в которой они определены. Вы можете использовать необязательный аргумент, чтобы добавить некоторые ключи.
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcounter{mytn}
\makeatletter
\newcommand{\tmn}[3][]{\stepcounter{mytn}%
\tikzmarknode[Col\the\numexpr\value{mytn}-\mytn@start\relax/.try,inner xsep=2pt,%
minimum height=1.6em,#1]{mytn-\number\value{mytn}}{#2}%
\expandafter\gdef\csname tmn@annot@\number\value{mytn}\endcsname{#3}}
\newenvironment{AnnotatedEquation}{\edef\mytn@start{\number\value{mytn}}%
\begin{equation}}{\end{equation}%
\edef\mytn@end{\number\value{mytn}}%
\ifnum\mytn@end>\mytn@start
\begin{itemize}
\foreach \X in {\the\numexpr\mytn@start+1,...,\mytn@end}
{\item \tikzmarknode{mytn-annot-\X}{\csname tmn@annot@\X\endcsname}%
\begin{tikzpicture}[overlay,remember picture]
\draw[-stealth] (mytn-annot-\X.east) to[out=0,in=-90] (mytn-\X.south);
\end{tikzpicture}}
\end{itemize}
\fi}
\makeatother
\tikzset{ Col1/.style= {fill=blue!20,anchor=base,rounded corners=2pt},
Col2/.style= {Col1, fill=red!20},
Col3/.style= {Col1, fill=green!20}, }
\begin{document}
\begin{frame}[t]
\frametitle{Some annotated equation}
\begin{AnnotatedEquation}
\tmn{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
\end{AnnotatedEquation}
\end{frame}
\begin{frame}[t]
\frametitle{Another annotated equation}
\begin{AnnotatedEquation}
\tmn{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
+\tmn{\xi}{a Weyl spinor}
+\tmn{\eta}{another Weyl spinor}
\end{AnnotatedEquation}
\end{frame}
\end{document}
Вот версия, которая работает с external
.
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark,external}
\newcounter{mytn}
\makeatletter
\newcommand{\tmn}[3][]{\stepcounter{mytn}%
\tikzmarknode[Col\the\numexpr\value{mytn}-\mytn@start\relax/.try,inner xsep=2pt,%
minimum height=1.6em,#1]{mytn-\number\value{mytn}}{#2}%
\expandafter\gdef\csname tmn@annot@\number\value{mytn}\endcsname{#3}}
\newenvironment{AnnotatedEquation}{\edef\mytn@start{\number\value{mytn}}%
\tikzexternaldisable
\begin{equation}}{\end{equation}%
\edef\mytn@end{\number\value{mytn}}%
\ifnum\mytn@end>\mytn@start
\begin{itemize}
\foreach \X in {\the\numexpr\mytn@start+1,...,\mytn@end}
{\item \tikzmarknode{mytn-annot-\X}{\csname tmn@annot@\X\endcsname}%
\begin{tikzpicture}[overlay,remember picture]
\draw[-stealth] (mytn-annot-\X.east) to[out=0,in=-90] (mytn-\X.south);
\end{tikzpicture}}
\end{itemize}
\fi\tikzexternalenable}
\makeatother
\tikzset{ Col1/.style= {fill=blue!20,anchor=base,rounded corners=2pt},
Col2/.style= {Col1, fill=red!20},
Col3/.style= {Col1, fill=green!20}, }
\begin{document}
\begin{frame}[t]
\frametitle{Some annotated equation}
\begin{AnnotatedEquation}
\tmn{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
\end{AnnotatedEquation}
\end{frame}
\begin{frame}[t]
\frametitle{Another annotated equation}
\begin{AnnotatedEquation}
\tmn{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
+\tmn{\xi}{a Weyl spinor}
+\tmn{\eta}{another Weyl spinor}
\end{AnnotatedEquation}
\end{frame}
\end{document}
ПРИЛОЖЕНИЕ: Вот более сложная, но и более общая версия, которая позволяет настраивать стрелки. Это можно сделать с помощью ключа special arrow
. Например,
\tmn[special arrow={out=90,annotations/out anchor=north}]{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}
указывает стрелке выйти с севера текста аннотации и уйти под углом 90 градусов. По умолчанию это восточная привязка и 0 градусов. Это особенно полезно при работе с числителями дробей.
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark,external}
\newcounter{mytn}
\makeatletter
\newcommand{\tmn}[3][]{\stepcounter{mytn}%
\tikzmarknode[annotations/Col\the\numexpr\value{mytn}-\mytn@start\relax/.try,inner xsep=2pt,%
minimum height=1.6em,#1]{mytn-\number\value{mytn}}{#2}%
\expandafter\gdef\csname tmn@annot@\number\value{mytn}\endcsname{#3}}
\tikzset{special arrow/.code={%
\expandafter\xdef\csname tmn@arrow@style@\number\value{mytn}\endcsname{#1}}}
\newenvironment{AnnotatedEquation}{\edef\mytn@start{\number\value{mytn}}%
\tikzexternaldisable
\begin{equation}}{\end{equation}%
\edef\mytn@end{\number\value{mytn}}%
\ifnum\mytn@end>\mytn@start
\begin{itemize}
\foreach \X in {\the\numexpr\mytn@start+1,...,\mytn@end}
{\item \tikzmarknode{mytn-annot-\X}{\csname tmn@annot@\X\endcsname}%
\begin{tikzpicture}[overlay,remember picture]
\ifcsname tmn@arrow@style@\X\noexpand\endcsname
\draw[-stealth,out=0,in=-90,
style/.expanded=\csname tmn@arrow@style@\X\noexpand\endcsname]
(mytn-annot-\X.\pgfkeysvalueof{/tikz/annotations/out anchor})
to (mytn-\X.\pgfkeysvalueof{/tikz/annotations/in anchor});
\else
\draw[-stealth,out=0,in=-90] (mytn-annot-\X.\pgfkeysvalueof{/tikz/annotations/out anchor})
to (mytn-\X.\pgfkeysvalueof{/tikz/annotations/in anchor});
\fi
\end{tikzpicture}}
\end{itemize}
\fi\tikzexternalenable}
\makeatother
\tikzset{annotations/.cd,
Col1/.style= {fill=blue!20,anchor=base,rounded corners=2pt},
Col2/.style= {annotations/Col1, fill=red!20},
Col3/.style= {annotations/Col1, fill=green!20},
in anchor/.initial=south,out anchor/.initial=east}
\begin{document}
\begin{frame}[t]
\frametitle{Some annotated equation}
\begin{AnnotatedEquation}
\tmn{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
\end{AnnotatedEquation}
\end{frame}
\begin{frame}[t]
\frametitle{Another annotated equation}
\begin{AnnotatedEquation}
\tmn[special arrow={out=90,annotations/out anchor=north}]{\Delta}{Le point Delta}= \tmn{\mathcal{N}(d_1)}{Hedge ratio}-
\tmn{K\cdot \mathrm{e}^{-r\,t}\cdot\mathcal{N}(d_2)}{Strike actualised}
+\frac{\tmn[special arrow={in=-160,annotations/in anchor=west}]{\xi}{a Weyl spinor}}{\tmn{\eta}{another Weyl spinor}}
\end{AnnotatedEquation}
\end{frame}
\end{document}
Возможны дальнейшие улучшения, но для этого необходимо участие пользователей, которые фактически этим пользуются.