如何让 mdframed 感知奇数/偶数页?

如何让 mdframed 感知奇数/偶数页?

对于定理和类似问题,我使用mdframed包。到目前为止,我使用在 SE 上收集的解决方案:

\documentclass[twoside]{book}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{showframe}
    \usepackage{lipsum}

\usepackage[framemethod=tikz]{mdframed}
\mdfdefinestyle{box}{% common style
    topline=false, bottomline=false,
    rightline=false,
    linewidth=2pt,
    backgroundcolor=none,
apptotikzsetting={\tikzset{mdfbackground/.append style={%
                  fill=teal!40, fill opacity=0.25}}},
    frametitlefont=\sffamily\bfseries\color{black},
    splittopskip=1mm,
    frametitlebelowskip=0mm,
}
% Example
\mdtheorem[style=box,linecolor=teal!70
           ]{example}{Example}[chapter]%section

\begin{document}
\chapter{Test}
    \lipsum[2]    
\begin{example}[cross correlation]
\lipsum[2]
\end{example}

\newpage
    \lipsum[1-2]    
\begin{example}[cross correlation]
\lipsum[2]
\end{example}

\end{document}

这使:

在此处输入图片描述

现在我想定义 mdframed(不可破坏)框,它会知道它是在奇数页还是偶数页,例如,左线将始终位于页面的外侧。到目前为止,我尝试了以下方法:

  • 定义\mdfdefinestyle{box-L}{... rightline=false, ...}\mdfdefinestyle{box-R}{... leftline=false ...}

  • example根据是在奇数页还是偶数页选择其中一个框

我尝试使用以下代码来完成这封信:

\mdtheorem[%
    \label{example:\thechapter.\theexample},
    \ifodd\pageref{example:\thechapter.\theexample}
  style=box-L
    \else
  style=box-R
    \fi,      
  linecolor=teal!70
            ]{example}{Example}[chapter]%section

不幸的是,我的这个(幼稚的)方法不起作用。我收到错误:

Use of \\mdframed doesn't mathch its definition.

有没有什么办法可以实现我的愿望呢?

答案1

也许settings=...钥匙可以帮到这里。

rightlineleftline是触发mdf@rightlinemdf@leftlinebool 变量的键。使用

settings={\ifodd\value{page}\booltrue{mdf@leftline}\boolfalse{mdf@rightline}\else\boolfalse{mdf@leftline}\booltrue{mdf@rightline}\fi}

应提供相关的“映射”。settings代码在开始时作为钩子执行mdframed

\documentclass[twoside]{book}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage{showframe}
    \usepackage{lipsum}

\usepackage[framemethod=tikz]{mdframed}
\makeatletter
\mdfdefinestyle{box}{% common style
    topline=false, bottomline=false,
    rightline=false,
    linewidth=2pt,
    backgroundcolor=none,
    settings={\ifodd\value{page}\booltrue{mdf@leftline}\boolfalse{mdf@rightline}\else\boolfalse{mdf@leftline}\booltrue{mdf@rightline}\fi},
apptotikzsetting={\tikzset{mdfbackground/.append style={%
                  fill=teal!40, fill opacity=0.25}}},
    frametitlefont=\sffamily\bfseries\color{black},
    splittopskip=1mm,
    frametitlebelowskip=0mm,
}
\makeatother
% Example
\mdtheorem[style=box,linecolor=teal!70
           ]{example}{Example}[chapter]%section

\begin{document}
\chapter{Test}
    \lipsum[2]    
\begin{example}[cross correlation]
\lipsum[2]
\end{example}

\newpage
    \lipsum[1-2]    
\begin{example}[cross correlation]
\lipsum[2]
\end{example}

\end{document}

相关内容