정리 환경과 표준 텍스트 사이의 간격 제어

정리 환경과 표준 텍스트 사이의 간격 제어

나는 thmtools정리를 조판하는 데 사용하고 있습니다.

내가 원하는 출력은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

\hrule내 질문은 정리 환경 위와 아래 사이의 간격을 제어하는 ​​​​것입니다 .

hrule나는 정리 위와 아래의 s와 단락 사이의 간격이 인접한 두 단락 사이의 간격과 동일하기를 원합니다 .

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를 사용하면) 예상대로 위아래 텍스트 옆에 hrules이 인쇄됩니다.

그러나 에서와 같이 값을 전달하면 \setlength{\parskip}{12pt}위아래 문단과 테두리 사이의 간격이 실제로 12포인트라고 생각하지 않습니다(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인 책 클래스의 기본값)이며 문서에서 기준선 건너뛰기 + parskip은 에 의해 추가된 12pt 때문에 24pt입니다 parskip. (주황색 선)

위쪽 및 아래쪽 텍스트 줄의 기준선과 hrule(빨간색 줄, 각각 14pt 및 12pt. Wanted >> 둘 다 17pt) 사이의 거리에 차이가 있습니다.

오리

원하는 간격을 얻으려면

(1) 사용 \usepackage[skip=12pt]{parskip}단락을 들여쓰기 없이 parskip=12pt로 설정합니다.

(2) 문단 사이에 원하는 17pt 공백과 일치하도록 규칙 앞뒤에 세로 공백을 추가합니다.

그 결과는 이제

zz

조정 및 측정에 사용되는 코드입니다. 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}

응

관련 정보