我的问题与定理名称/页边编号和定理名称和编号在页边,正文中有注释,但这些先前问题的答案并不能完全解决我的问题。
我使用包amsthm
。
我想实现定理名称、编号和注释出现在页边距栏中,左页的左侧参差不齐,右页的右侧参差不齐。
这是我目前的尝试。
\documentclass[fontsize=11pt, paper=a4, DIV=classic]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsthm}
\usepackage{ragged2e}
\usepackage{blindtext}
\KOMAoption{headinclude}{false}
\KOMAoption{footinclude}{false}
\KOMAoption{mpinclude}{true}
\recalctypearea
\setlength{\marginparsep}{2em}
\setlength{\marginparwidth}{10em}
% \RaggedOuter means
% (1) \RaggedRight in one-side mode
% (2) \RaggedLeft on left pages in two-side mode
% (3) \RaggedRight on right pages in two-side mode
\let\RaggedOuter\RaggedRight
% Must be called immediately after opening a float environment
% in order to adjust \RaggedOuter and listing line numbers
\newcommand{\setOddEvenPageLayout}%
{%
\if@twoside%
\ifthispageodd{\let\RaggedOuter\RaggedRight}{\let\RaggedOuter\RaggedLeft}%
\fi%
}
\newtheoremstyle{thmmargin} %
{0pt} % space above
{0pt} % space below
{\normalfont\normalsize} % body font
{0pt} % indent
{\sffamily\bfseries\small} % headfont
{} % punctuation
{\parindent} % space after head
{ % theorem head spec
\setOddEvenPageLayout%
\llap%
{%
\begin{minipage}[t]{\marginparwidth}%
\RaggedOuter\hbadness=10000%
#1~#2\\[.2ex]\normalfont{}#3%
\end{minipage}%
\hspace{\marginparsep}%
}%
}
\theoremstyle{thmmargin}
\newtheorem{definition}{Definition}[chapter]
\newtheorem{theorem}{Satz}[chapter]
\begin{document}
\chapter{Theorems with margin captions}
\blindtext
\begin{definition}[Kellerautomat (KA)\\ pushdown automaton (PDA)]
\blindtext
\end{definition}
\blindtext
\clearpage
\blindtext
\begin{theorem}[Satz von Radó]
Die Radó-Funktion ist nicht berechenbar.
\end{theorem}
\blindtext
\end{document}
这种方法存在各种问题:
- 定理的主体并不浮动在小页面的旁边。
- 缩进比 稍大一些
\parindent
。 - 如果定理主体的行数少于边注中的描述(名称、编号、注释),则会导致空行。相反,下一个段落应该继续,而不必关心超出的边注。
- 目前尚未实施任何机制来使边注正确地放置在右侧。
我认为我需要一种完全不同的方法,但我不知道如何解决这个问题。不过,amsthm
如果可能的话,我还是想坚持下去。
编辑(2017年11月02日 01:20)
我在使用 方面取得了一些进展。此包允许我在或中thmtools
使用。但是,边注的垂直定位是错误的,并且定理主体没有按预期开始新的段落。此外,密钥尚未评估,但数字的格式是硬编码的。\marginpar{}
preheadhook
postheadhook
numberwithin
\documentclass[fontsize=11pt, paper=a4, DIV=classic]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{ragged2e}
\usepackage{changepage}
\usepackage{blindtext}
\KOMAoption{mpinclude}{true}
\recalctypearea
\setlength{\marginparsep}{2em}
\setlength{\marginparwidth}{10em}
\makeatletter
\newcommand{\RaggedOuter}%
{%
\if@twoside%
\checkoddpage%
\ifoddpage%
\RaggedRight%
\else%
\RaggedLeft%
\fi%
\else%
\RaggedRight%
\fi%
}
\makeatother
\declaretheoremstyle[%
spaceabove=0pt,%
spacebelow=0pt,%
headindent=0pt,%
postheadspace=0pt,%
headfont=\sffamily\bfseries\small,%
notefont=\rmfamily\mdseries\small,%
bodyfont=\normalfont,%
preheadhook={},%
headformat={},%
headpunct={},%
postheadhook={\marginpar{\RaggedOuter\the\thm@headfont\thmt@thmname~\thechapter.\arabic{\thmt@envname}\\\the\thm@notefont\thmt@optarg}},%
numberwithin=chapter%
]{thmmargcapt}
\declaretheorem[style=thmmargcapt, name=Definition]{definition}
\declaretheorem[style=thmmargcapt, name=Satz]{theorem}
\begin{document}
\chapter{Theorems with margin captions}
\blindtext
\begin{definition}[Kellerautomat (KA)\\ pushdown automaton (PDA)]
Eine ganz wichtige Definition.
\end{definition}
\blindtext
\clearpage
\blindtext
\begin{theorem}[Satz von Radó]
Die Radó-Funktion ist nicht berechenbar.
\end{theorem}
\blindtext
\end{document}
答案1
谢谢史蒂文·B·塞格莱特斯,他为上述空间问题提出了一个绝妙的解决方案(见这个单独的问题),现在我可以发布一个令我满意的版本了:
\documentclass[fontsize=11pt, paper=a4, DIV=classic]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{xpatch}
\usepackage{ragged2e}
\usepackage{changepage}
\usepackage{blindtext}
\KOMAoption{mpinclude}{true}
\recalctypearea
\setlength{\marginparsep}{2em}
\setlength{\marginparwidth}{10em}
\makeatletter
\newcommand{\RaggedOuter}%
{%
\if@twoside
\checkoddpage
\ifoddpage
\RaggedRight
\else
\RaggedLeft
\fi
\else
\RaggedRight
\fi
}
\newcommand{\cl@ThmMarginCaption}%
{
\leavevmode
\marginpar%
{%
\RaggedOuter
\hbadness=10000
\the\thm@headfont\thmt@thmname~\thechapter.\arabic{\thmt@envname}\\%
\the\thm@notefont\thmt@optarg
}%
}
\declaretheoremstyle%
[%
spaceabove={\parskip},
spacebelow=0pt,
headindent=0pt,
postheadspace=0pt,
headformat={},
headpunct={},
headfont=\sffamily\bfseries\small,
notefont=\rmfamily\mdseries\small,
bodyfont=\normalfont,
preheadhook={},
postheadhook={\cl@ThmMarginCaption},
]%
{thmmcaption}
\newcommand{\DeclareTheorem}[2][]%
{%
\declaretheorem[#1]{#2}
\expandafter\let\csname cl@orig@#2\expandafter\endcsname\csname#2\endcsname
\expandafter\let\csname cl@orig@end#2\expandafter\endcsname\csname end#2\endcsname
\renewenvironment{#2}[1][]%
{\csname cl@orig@#2\endcsname[##1]\ignorespaces}%
{\csname cl@orig@end#2\endcsname}%
}
\DeclareTheorem[name=Definition, numberwithin=chapter, style=thmmcaption]{definition}
\DeclareTheorem[name=Satz, numberwithin=chapter, style=thmmcaption]{theorem}
\makeatother
\begin{document}
\chapter{Theorems with margin captions}
\blindtext
\begin{definition}[Kellerautomat (KA)\\pushdown automaton (PDA)]
Eine ganz wichtige Definition, die natürlich länger als eine Zeile sein sollte, um sehen zu können, ob alles funktioniert wie gewünscht.
\end{definition}
\blindtext
\clearpage
\blindtext
\begin{theorem}[Satz von Radó]
Die Radó-Funktion ist nicht berechenbar.
\end{theorem}
\blindtext
\end{document}
定理主体不会自动应用段落缩进,而是\indent
需要在这种环境的主体内手动添加。但是,如果两个紧密相关的定义放在一个段落中,这甚至是需要的。
附录
这是典型的双页纸的样子。页面格式为 DIN A4。装订校正为 12 毫米。