
Estoy usando thmtools
para componer teoremas.
El resultado que quiero es el siguiente:
Mi pregunta es sobre controlar el espacio entre los \hrule
s por encima y por debajo del entorno del teorema.
Quiero que la separación entre la hrule
s 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 postfoothook
y preheadhook
es 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
\tikzmark
Para 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 \hrule
es de 10 puntos como se esperaba (líneas verdes)
El baselineskip
interior 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).
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
Este es el código utilizado para ajustar y medir. Se ajustará automáticamente si se cambia el tamaño skip
o 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}