Controlar el espacio entre el entorno del teorema y el texto estándar

Controlar el espacio entre el entorno del teorema y el texto estándar

Estoy usando thmtoolspara componer teoremas.

El resultado que quiero es el siguiente:

ingrese la descripción de la imagen aquí

Mi pregunta es sobre controlar el espacio entre los \hrules por encima y por debajo del entorno del teorema.

Quiero que la separación entre la hrules y los párrafos arriba y debajo del teorema sea la misma que el espacio entre dos párrafos adyacentes.

Mi código actual para thmtools es:

\declaretheoremstyle[
...definitions about fonts..
    preheadhook=\vskip\parskip\hrule\relax,
    postfoothook=\hrule\relax,
    spaceabove=10pt,
    spacebelow=10pt
]{definition}
\declaretheorem[name=Theorem,numberwithin=chapter,style=definition]{theorem}

No estoy seguro de si el código de látex para postfoothooky preheadhookes correcto. Por un lado, si no cambio \parskip(es decir, uso el valor predeterminado de 0pt), las reglas se imprimen junto al texto de arriba y de abajo, como se esperaba.

Pero si paso un valor, como en \setlength{\parskip}{12pt}, no creo que la separación entre las reglas y los párrafos superiores e inferiores sea de 12 puntos (después de medir distancias con mi lector de pdf).

¿Me equivoco? ¿Cómo puedo comprobarlo de forma más sistemática? ¿Cuáles son los comandos de látex que debo pasar a los dos ganchos para hacerlo bien?

Mi código:

\documentclass{book}
\usepackage{amsthm,thmtools,kantlipsum}
\setlength{\parskip}{12pt}
\setlength{\parindent}{0pt}

    \declaretheoremstyle[
        headfont=\normalfont\bfseries, 
        notefont=\normalfont\bfseries,
        headpunct={},
        postheadspace=\newline,
        bodyfont = \normalfont,
        postfoothook=\hrule\relax,
        preheadhook=\vskip\parskip\hrule\relax,
        spaceabove=10pt,
        spacebelow=10pt
    ]{definition}
    \declaretheorem[name=Theorem,numberwithin=chapter,style=definition]{theorem}
\begin{document}
    
%\chapter{Introduction}
\kant[1-2]
\begin{theorem}
Pellentesque massa placerat duis ultricies lacus sed turpis tincidunt id. Sagittis nisl rhoncus.
\end{theorem}

\kant[3][1-3]

\end{document}

Respuesta1

\tikzmarkPara medir los espacios verticales, se agregaron algunos en lugares seleccionados y luego se dibujaron líneas verticales delgadas con una altura ajustada manualmente usando un tikzpicture.

Verusando la biblioteca tikzmark.Pero para este ejemplo, no es necesario entender el código tikz..

Como se ve en la figura, el espacio encima y debajo \hrulees de 10 puntos como se esperaba (líneas verdes)

El baselineskipinterior del teorema es 12 puntos (el valor predeterminado para la clase de libro con un tamaño de fuente de 10 puntos) y en el documento el salto de línea base + parskip es 24 puntos debido a los 12 puntos agregados por parskip. (líneas naranjas)

Hay una discrepancia con la distancia entre la línea de base de las líneas de texto superior e inferior y hrule(líneas rojas, 14 puntos y 12 puntos respectivamente. Se busca >> ambas de 17 puntos).

o yo

Para obtener el espacio deseado

(1) Usado \usepackage[skip=12pt]{parskip}Configurará los párrafos para que no tengan sangría y parskip=12pt.

(2) Agregue espacios verticales antes y después de las reglas para que coincidan con el espacio en blanco deseado de 17 puntos entre párrafos.

El resultado es ahora

zz

Este es el código utilizado para ajustar y medir. Se ajustará automáticamente si se cambia el tamaño skipo la longitud.\abovebelow

\documentclass[10pt]{book}
\usepackage{amsthm,thmtools,kantlipsum}

\usepackage{tikz}% needed <<<<<<<<<<
\usetikzlibrary{calc,tikzmark} % needed <<<<<<<<<<
\usepackage[autolanguage]{numprint}% needed <<<<<<<<<<

\usepackage[skip=12pt]{parskip} % added <<<<<<<<<<<<    

\newlength{\abovebelow} \setlength{\abovebelow}{10pt} % set spaces above & below <<<<<<<<<
\newlength{\htX}    \settoheight{\htX}{X} % adjust to font size
\newlength{\dtp}    \settodepth{\dtp}{p}    
    
\declaretheoremstyle[
headfont=\normalfont\tikzmark{b}, % added a mark <<<<<<
notefont=\normalfont\bfseries,
headpunct={\tikzmark{c}}, % added a mark <<<<<<
postheadspace=\newline,
bodyfont = \normalfont,
postfoothook= \hrule height 0.1pt \vspace*{\dimexpr \baselineskip -\htX},%  changed <<<<<<
preheadhook=\vspace*{\dimexpr \baselineskip + \parskip- \htX- \dtp}\hrule height 0.1pt\vspace*{-\parskip}, %  changed <<<<<<
spaceabove=\abovebelow,%  changed <<<<<<
spacebelow=\abovebelow,%  changed <<<<<<
]{definition}

\declaretheorem[name=Xheorem,numberwithin=chapter,style=definition]{theorem}
\begin{document}
        
X Some  text
    
\tikzmark{g}Upper text.\tikzmark{a} % added a mark <<<<<<

\begin{theorem}
    Pellentesque massa placerat duis ultricies lacus sed turpis tincidunt id. Sagittis nisl rhoncus.\tikzmark{d} % added a mark <<<<<<
\end{theorem}

\tikzmark{f}Lower text.\tikzmark{e} % added a mark <<<<<<   

    % measure/check  vertical spaces <<<<<<<<<<<<
    \nprounddigits{1}
    \newlength{\bs}\setlength{\bs}{\baselineskip}%  
    \newlength{\pp} \setlength{\pp}{\dimexpr \baselineskip + \parskip}%  
    \newlength{\ub} \setlength{\ub}{\dimexpr \baselineskip + \parskip- \htX}%  
    \newlength{\br} \setlength{\br}{\dimexpr 2\baselineskip -\htX}%         
    \begin{tikzpicture}[overlay,remember picture, every node/.style={right,midway,font=\tiny}]
        \draw [color=red]($ (pic cs:a) +(-1pt,0pt) $ ) -- ($ (pic cs:a) +(-1pt,-\ub) $)                 node[fill=gray!10]{$\lenprint{\ub}$}; % upper blank
        \draw [color=green]($ (pic cs:b) +(2pt,\htX) $ ) -- ($ (pic cs:b) +(2pt,\abovebelow+\htX) $)    node{\the\abovebelow}; %upper
        \draw [color=green]($ (pic cs:d) +(-1pt,0pt) $ ) -- ($ (pic cs:d) +(-1pt,-\abovebelow) $)       node{\the\abovebelow};  %lower
        \draw [color=red]($ (pic cs:f) +(2pt,\htX) $ ) -- ($ (pic cs:f) +(2pt,\ub+\htX) $)              node[fill=gray!10]{$\lenprint{\ub}$}; %blank to rule 
        \draw [color=orange]($ (pic cs:d) +(-1pt,0pt) $ ) -- ($ (pic cs:d) +(-1pt,\baselineskip) $)     node{\the\bs}; % baselineskip
        \draw [color=orange]($ (pic cs:a) +(-1pt,0pt) $ ) -- ($ (pic cs:a) +(-1pt,\pp) $)               node{\the\pp}; % baselineskip+parskip
        \draw [color=red]($ (pic cs:g) +(2pt,\htX) $ ) -- ($ (pic cs:g) +(2pt,\ub +\htX) $)             node[fill=gray!10]{$\lenprint{\ub}$}; %blamk to rule
\end{tikzpicture}

\end{document}

Este es el código de trabajo final que utiliza los resultados anteriores.

\documentclass[10pt]{book}
\usepackage{amsthm,thmtools,kantlipsum} 

\usepackage[skip=12pt]{parskip} % added <<<<<<<<<<<<
    
\newlength{\abovebelow} \setlength{\abovebelow}{10pt} % set spaces above & below <<<<<<<<<
\newlength{\htX}    \settoheight{\htX}{X} % adjust to font size
\newlength{\dtp}    \settodepth{\dtp}{p}    

\declaretheoremstyle[
headfont=\normalfont\bfseries, %
notefont=\normalfont\bfseries,
headpunct={}, % 
postheadspace=\newline,
bodyfont = \normalfont,
postfoothook= \hrule \vspace*{\dimexpr \baselineskip -\htX},%  changed <<<<<<
preheadhook=\vspace*{\dimexpr \baselineskip + \parskip- \htX- \dtp}\hrule \vspace*{-\parskip}, %  changed <<<<<<
spaceabove=\abovebelow,%  changed <<<<<<
spacebelow=\abovebelow,%  changed <<<<<<
]{definition}
    
\declaretheorem[name=Theorem,numberwithin=chapter,style=definition]{theorem}
\begin{document}
    
\kant[1-2]
\begin{theorem}
    Pellentesque massa placerat duis ultricies lacus sed turpis tincidunt id. Sagittis nisl rhoncus.
\end{theorem}

\kant[3][1-3]
    
\end{document}

yy

información relacionada