包 changepage 的严格选项的奇怪副作用

包 changepage 的严格选项的奇怪副作用

我以为我的以前的问题将定理的名称、编号和注释放在边注栏中的问题已经得到解决。

事实上,我的回答中提出的代码按预期工作:

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

包含定理信息的边注被放置在所需位置。

边注的正确位置

当我开始将此解决方案与其他代码混合时,strict包选项changepage就变得必不可少。使用此选项,边注会向下移动,如您在此处所见。

边注位置错误

%当它不存在时,在每行末尾添加changepage.sty根本没有帮助。

为什么该选项会对strict我的定义产生影响\RaggedOuter

答案1

在水平模式下使用严格形式,这样它就不会强制改变行距,也要注意误用%

\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[strict]{changepage}
\usepackage{blindtext}

\KOMAoption{mpinclude}{true}
\recalctypearea
\setlength{\marginparsep}{2em}
\setlength{\marginparwidth}{10em}

\makeatletter

\newcommand{\RaggedOuter}
{%
  \if@twoside
    \leavevmode\checkoddpage
    \ifoddpage
      \RaggedRight
    \else
      \RaggedLeft
    \fi
  \else
    \RaggedRight
  \fi
  \ignorespaces}

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

相关内容