Saltar al contenido

¿Cómo ajustar el ancho del bloque beamer al tamaño de su contenido?

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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí


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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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

ingrese la descripción de la imagen aquí

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.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *