Steuern des Abstands zwischen Theoremumgebung und Standardtext

Steuern des Abstands zwischen Theoremumgebung und Standardtext

Ich verwende es, thmtoolsum Theoreme zu setzen.

Die gewünschte Ausgabe ist die folgende:

Bildbeschreibung hier eingeben

Meine Frage betrifft die Steuerung des Abstands zwischen den \hruleBuchstaben über und unter der Theoremumgebung.

Ich möchte, dass der Abstand zwischen den hruleAbsätzen über und unter dem Theorem dem Abstand zwischen zwei benachbarten Absätzen entspricht.

Mein aktueller Code für thmtools ist:

\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}

Ich bin nicht sicher, ob der Latex-Code für postfoothookund preheadhookkorrekt ist. Auf der einen Seite werden die Hrules wie erwartet neben dem Text darüber und darunter gedruckt, wenn ich nichts ändere \parskip(also den Standardwert 0pt verwende).

Wenn ich aber einen Wert wie in übergebe \setlength{\parskip}{12pt}, glaube ich nicht, dass der Abstand zwischen den Regeln und den Absätzen darüber und darunter tatsächlich 12 Punkte beträgt (nachdem ich die Abstände mit meinem PDF-Reader gemessen habe).

Liege ich falsch? Wie kann ich das systematischer überprüfen? Welche Latex-Befehle muss ich an die beiden Hooks übergeben, damit ich es richtig mache?

Mein Code:

\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}

Antwort1

Um die vertikalen Lücken zu messen, wurden an ausgewählten Stellen einige \tikzmarkhinzugefügt und dann mithilfe eines dünne vertikale Linien mit manuell angepasster Höhe gezeichnet tikzpicture.

SehenVerwenden der Tikzmark-Bibliothek.Aber für dieses Beispiel müssen Sie den Tikz-Code nicht verstehen.

Wie in der Abbildung zu sehen, \hrulebeträgt der Abstand darüber und darunter erwartungsgemäß 10pt (grüne Linien).

Innerhalb baselineskipdes Theorems beträgt es 12pt – der Standardwert für die Buchklasse mit einer Schriftgröße von 10pt – und im Dokument beträgt der Baselineskip + Parskip 24pt wegen der 12pt, die durch hinzugefügt werden parskip. (orangefarbene Linien)

Es besteht eine Diskrepanz beim Abstand zwischen der Grundlinie der oberen und unteren Textzeilen und den hrule(roten Linien, 14pt bzw. 12pt. Gesucht >> beide 17pt).

ori

Um den gewünschten Abstand zu erhalten

(1) Wird verwendet. \usepackage[skip=12pt]{parskip}Dadurch werden die Absätze so eingestellt, dass sie keine Einrückung haben und der Wert parskip=12pt.

(2) Fügen Sie vor und nach den Regeln vertikale Leerzeichen ein, um den gewünschten 17pt-Leerraum zwischen den Absätzen einzuhalten.

Das Ergebnis ist nun

zz

Dies ist der Code, der zum Anpassen und Messen verwendet wird. Er wird automatisch angepasst, wenn der skipoder die \abovebelowLänge geändert werden.

\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}

Dies ist der endgültige funktionierende Code unter Verwendung der obigen Ergebnisse.

\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}

JJ

verwandte Informationen