
나는 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 공백과 일치하도록 규칙 앞뒤에 세로 공백을 추가합니다.
그 결과는 이제
조정 및 측정에 사용되는 코드입니다. 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}