控制定理環境和標準文本之間的間距

控制定理環境和標準文本之間的間距

我用來thmtools排版定理。

我想要的輸出如下:

在此輸入影像描述

\hrule我的問題是關於控制定理環境上方和下方 s之間的間距。

我希望 s 與定理上方和下方段落之間的間距hrule與兩個相鄰段落之間的間距相同。

我目前的 thmtools 程式碼是:

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

我不確定postfoothook和 的乳膠代碼是否preheadhook正確。一方面,如果我不更改\parskip(即使用預設值 0pt),則 hrule 會按預期列印在上方和下方文字的旁邊。

但是,如果我傳遞一個值,如 中\setlength{\parskip}{12pt},我不認為 hrules 與上下段落之間的間距確實是 12 pts(在用我的 pdf 閱讀器測量距離之後)。

我錯了嗎?怎樣才能更有系統地檢查呢?傳遞給兩個鉤子以便我正確理解的乳膠命令是什麼?

我的程式碼:

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

答案1

為了測量垂直間隙,在選定的位置添加了一些\tikzmark,然後使用手動調整高度繪製細垂直線tikzpicture

使用 tikzmark 庫但對於這個例子,你不需要理解 tikz 程式碼

如圖所示,上方和下方的空間\hrule如預期一樣為10pt(綠線)

定理內部baselineskip是 12pt——字體大小為 10pt 的書籍類的預設值——並且在文件中,baselineskip + parskip 是 24pt,因為 12pt 增加了parskip。 (橘色線)

上下文本行的基線與hrule(紅線,分別為 14pt 和 12pt。想要 >> 均為 17pt)之間的距離存在差異。

奧裡

以獲得所需的間距

(1) 使用\usepackage[skip=12pt]{parskip}它將設定段落沒有縮排且 parskip=12pt。

(2) 在規則前後加上垂直空格,以符合段落之間所需的 17pt 空白。

現在的結果是

Z Z

這是用於調整和測量的程式碼。如果skip長度\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}

這是使用上述結果的最終工作代碼。

\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

相關內容