Contamos con tu apoyo para extender nuestras crónicas acerca de las ciencias informáticas.
Solución:
Si su objetivo es resaltar ecuaciones sin tener que preocuparse por su ancho, puede usar otros enfoques en lugar de bloques.
Propongo aquí dos métodos:
-
la primera es una adaptación de la respuesta de Peter ¿A alternativa encuadrada con un espacio mínimo?
-
una solución basada en
hf-tikz
.
Solución con un espaciado mínimo
Este método necesita el tikzmark
biblioteca: se puede encontrar en http://bazaar.launchpad.net/~tex-sx/tex-sx/development/files, luego descargue los archivos tikzmark.dtx
y tikzmark_example.pdf
. Una vez colocado en un directorio temporal, compílelo con pdflatex, luego instale como un paquete.
El código:
documentclass[t]beamer
usepackagelmodern
usethemeMadrid
usepackagetikz
usetikzlibrarycalc,shapes,shadows,tikzmark
% setting the block body color
usebeamercolorblock body
definecolormy block bodynamedbg
% Original by Peter Grill:
% https://tex.stackexchange.com/questions/35319/a-boxed-alternative-with-minimal-spacing/#35357
makeatletter
newcommand*@DrawBoxHeightSep0.3ex%
newcommand*@DrawBoxDepthSep0.1em%
newcommand@DrawBox[6][fill=my block body,draw=my block body!50!black]
%#1= style,#2=height, #3=depth, #4 left marker,
%#5= right marker, #6= content
tikz[overlay,remember picture,baseline]
draw[#1,drop shadow,rounded corners]
($(pic cs:#4)+(-0.2em,#2+@DrawBoxHeightSep)$) rectangle
($(pic cs:#5)+(0.2em,-#3-+@DrawBoxDepthSep)$);
tikz[overlay,remember picture,baseline]
node[anchor=base] at ($(pic cs:#4)!0.5!(pic cs:#5)$) #6;
newcounterimage
setcounterimage1
newdimen@myBoxHeight%
newdimen@myBoxDepth%
newcommandNiceBlock[2][fill=my block body,draw=my block body!50!black]%
settoheight@myBoxHeight#2% Height
settodepth@myBoxDepth#2% Depth
tikzmarkltheimage#2tikzmarkrtheimage
@DrawBox[#1]@myBoxHeight@myBoxDepth
ltheimagertheimage#2
stepcounterimage
makeatother
begindocument
beginframeTest
begingather*
NiceBlockensuremathc^2=a^2+b^2
endgather*
begingather*
NiceBlockensuremathx+z=100
endgather*
endframe
enddocument
Después de dos ejecuciones de compilación, el resultado es:
Solución con hf-tikz
La solución anterior es completamente automática, pero podría tener algunos problemas. Supongamos que en caja:
begingather*
NiceBlockensuremath
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i
endgather*
Terminarás con:
Esto debido a que uno no puede decir:
NiceBlock
begingather*
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i
endgather*
Esa es la razón por la que un paquete semiautomático como hf-tikz
En mi humilde opinión, ofrece una buena alternativa: los marcadores se ajustan bastante bien a las dimensiones automáticamente, pero cuando es necesario, el usuario puede desplazarse y extenderse según necesite el área resaltada.
Un ejemplo que muestra cómo resaltar algunas ecuaciones con especificaciones de superposición:
documentclass[t]beamer
usepackagelmodern
usethemeMadrid
usepackage[beamer,customcolors]hf-tikz
% setting the block body color
usebeamercolorblock body
definecolormy block bodynamedbg
hfsetbordercolormy block body!50!black
hfsetfillcolormy block body
begindocument
beginframeTest
begingather*
tikzmarkin<1->a(0.15,-0.1)(-0.15,0.4)c^2=a^2+b^2tikzmarkenda
endgather*
begingather*
tikzmarkin<2->xx+z=100tikzmarkendx
endgather*
begingather*
tikzmarkin<1,3>c(0.15,-0.6)(-0.15,0.7)
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i
tikzmarkendc
endgather*
endframe
enddocument
También en este caso son necesarias dos ejecuciones de compilación; entonces el resultado es:
Si en cambio desea utilizar bloques, podría haber otra solución, pero no es automática. Además, a diferencia de hf-tikz, donde la especificación de superposición solo se usa para mostrar o no el resaltado, aquí la ecuación está dentro de un bloque, por lo que las especificaciones de superposición muestran o no la ecuación con el bloque juntos.
Código:
documentclass[t]beamer
usepackagelmodern
usethemeMadrid
usepackage[customcolors,shadow,roundedcorners]dynblocks
% setting the block body color
usebeamercolorblock body
definecolormy block bodynamedbg
setbordercolormy block body
setblockcolormy block body
% new enviroment always centered
newenvironmentcdynblockbegincenterbegindynblockenddynblockendcenter
begindocument
beginframeTest
abovedisplayskip=0pt
begincdynblock
opaqueblock<1->[0.2textwidth]
begingather*
c^2=a^2+b^2
endgather*
endcdynblock
begincdynblock
opaqueblock<2->[0.2textwidth]
begingather*
x+y=400
endgather*
endcdynblock
begincdynblock
opaqueblock<3->[0.3textwidth]
begingather*
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i
endgather*
endcdynblock
endframe
enddocument
El resultado:
Utilizando el dynblocks
y environ
paquetes, permite calcular automáticamente el ancho de la fórmula.
Aquí está el key punto:
% new enviroment always centered
usepackageenviron
newsaveboxmybox
% new environment cdyn: #1 => overlay specification
NewEnvironcdyn[1]%
sboxmybox$BODY$%
begincenter
begindynblock
opaqueblock<#1>[wdmybox][BODY]
enddynblock
endcenter
%
en el que primero calculo el ancho de la fórmula y luego este ancho se pasa al opaqueblock
mando.
El código completo:
documentclass[t]beamer
usepackagelmodern
usethemeMadrid
usepackage[customcolors,shadow,roundedcorners]dynblocks
% setting the block body color
usebeamercolorblock body
definecolormy block bodynamedbg
setbordercolormy block body
setblockcolormy block body
% new enviroment always centered
usepackageenviron
newsaveboxmybox
% new environment cdyn: #1 => overlay specification
NewEnvironcdyn[1]%
sboxmybox$BODY$%
begincenter
begindynblock
opaqueblock<#1>[wdmybox][BODY]
enddynblock
endcenter
%
begindocument
beginframeTest
abovedisplayskip=0pt
begincdyn1-
c^2=a^2+b^2
endcdyn
begincdyn2-
x+y=400
endcdyn
begincdyn3-
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i +
sum_l _1+dots+ l _p=lprod^p_i=1 binomn_il _i
endcdyn
begincdyn4-
q_n+1=q_n-Delta_n+theta_n qquad Delta_n=
begincases
1 quad q_n>0\
0 quad q_n=0
endcases
endcdyn
endframe
enddocument
El resultado:
tcolorbox
incluye comando tcboxmath
dentro theorems
Biblioteca. Permite encuadrar y enmarcar alguna parte de la expresión matemática de acuerdo con su ancho. Con él es más fácil definir algo como gatherblock
.
documentclass[slidestop]beamer
usethemeMadrid
usepackagetcolorbox
tcbuselibrarytheorems
tcbuselibraryskins
newcommandgatherblock[2][]begingather*tcboxmath[#1]#2endgather*
begindocument
beginframeTest
abovedisplayskip=0pt
centering
beginminipage0.2textwidth
beginblock
begingather*
c^2=a^2+b^2
endgather*
endblock
endminipage
%Math box with similar to beamer block
gatherblock[skin=beamer,beamer]c^2=a^2+b^2
%Math box with default tcolorbox options
gatherblockc^2=tcbhighmatha^2+b^2
%Math box with default tcolorbox options
% and colored background
gatherblock[colback=red!30]c^2=tcbhighmatha^2+b^2
endframe
enddocument
Incluso de una manera más fácil …
beginminipage0.6textwidth
beginblock
17047 19843 17047 17047 19843 12322 19843 12322 17047 19843 12322 19843 12322 18113 12322 ...
endblock
endminipage
Puedes añadir valor a nuestra información cooperando tu veteranía en las anotaciones.