在准备讲义时,我决定创建一个命令(可能是一个新的环境),用于突出显示我展示的示例。我想出了以下代码。该代码确实满足了我的一般用途及其目的,但我正在寻找一个可能更好的代码,其中包括以下内容:
环境应使用整个文本宽度,并在添加文本时垂直扩展。表格有点实现了此功能,因为它会在您添加文本时垂直扩展。如果您注意到我的代码中我强制了表格的文本宽度,以便它看起来更适合页面。我仍在努力。
环境可能会扩展到下一页,其中“示例 1”是“续示例 1”。我希望这不太难弄清楚。
我强制 tikzpicture 与表格边框对齐,但我知道这不是最好的方法。如能得到任何帮助,我将不胜感激。
\documentclass[letterpaper]{article}
\usepackage{fullpage,color}
\usepackage{array,tikz}
\parindent0pt
\definecolor{mblue}{rgb}{0,0.6,0.8}
\newcounter{mEgnum}
\newcommand{\eg}[1]{%
\par\vspace*{0.5cm}\stepcounter{mEgnum}
\begin{tabular}{p{15cm}l|}
\hline\setlength\parindent{-2.17mm}
\begin{tikzpicture}
\draw [color=mblue,fill=mblue](0,0) rectangle (0.25,0.75);
\draw [color=mblue!20,fill=mblue!20](0.25,0) rectangle (3.5,0.75);
\draw (0.5,0.375) node [right] {\large\textbf{ Example \arabic{mEgnum}}};
\end{tikzpicture}
& \tabularnewline
#1
&\tabularnewline\cline{2-2}
\end{tabular}\par\vspace{0.5cm}\noindent%
}
\begin{document}
\eg{Solve the following inequalities and represent the solution set in Set-Builder, Interval Notations and on the Number Line.&\tabularnewline}
\end{document}
答案1
事实上,你的环境将不是如果示例长度超过一页,则无法正常工作。因此,为了解决您的第一个问题,我建议使用包裹mdframed
它至少可以处理跨越页面边界的情况。
如果您希望它看起来像这样,那么问题的第 2 部分会更难解决:
我尝试使用repeatframetitle
最新版本中提供的选项,但无法使其工作(发布如下)。看来软件包作者已经意识到了这一点,因为它在他们的待办事项列表中:
改善分页符。
进一步增强(请参阅下面不起作用的解决方案):
- 处理如上所述的后续示例
- 我必须调整
tikz
代码以继续示例图像。这其实没有必要,因此可能也可以改进。
代码:
\documentclass[letterpaper]{article}
\usepackage{fullpage,color}
\usepackage{tikz}
\usepackage{mdframed}
\usepackage{lipsum}% for dummy text
%\usepackage{showframe}% to see page frame
\parindent0pt
\definecolor{mblue}{rgb}{0,0.6,0.8}
\newcounter{mEgnum}
\newcommand{\eg}[1]{%
\topskip=0pt% otherwise there is a space above
\stepcounter{mEgnum}%
\begin{mdframed}[
leftline=false,
innerleftmargin=0pt,
skipabove=0pt,
innertopmargin=0pt,
]
%\setlength\parindent{-2.17mm}% only if you want header to be bleed into margin
\begin{tikzpicture}
\draw [color=mblue,fill=mblue](0,0) rectangle (0.25,0.75);
\draw [color=mblue!20,fill=mblue!20](0.25,0) rectangle (3.5,0.75);
\draw (0.5,0.375) node [right] {\large\textbf{Example \arabic{mEgnum}}};
\end{tikzpicture}
\par\noindent
#1
\end{mdframed}
}
\begin{document}
\eg{\lipsum[1-10]}
\end{document}
增强解决方案(但尚未完全发挥作用):
这是我尝试使用最新版本的mdframed
在顶部重复标题,并且如果不是第一页,还会调整此标题。但由于某种原因,这不起作用,我不知道为什么。文档中关于该repeatframetitle
选项有一条注释:
该功能目前尚未很好实现!!!
所以不确定这是否是第二页上框架标题不调整的原因
\documentclass[letterpaper]{article}
\usepackage{fullpage,color}
\usepackage{tikz}
\usepackage{mdframed}
\usepackage{lipsum}% for dummy text
%\usepackage{showframe}% to see pageframe
\parindent0pt
\definecolor{mblue}{rgb}{0,0.6,0.8}
\newcounter{mEgnum}
\newlength{\YShift}
\newlength{\InnerSep}
\newcommand*{\MyHeight}{0.75cm}%
\pgfmathsetlength{\YShift}{\MyHeight/2}%
\pgfmathsetlength{\InnerSep}{1.27ex}% should be computed
\newcommand*{\TitlePrefix}{Example}%
\newcommand{\MyFrameTitle}[1]{% Define a macro for this
\begin{tikzpicture}
\draw [color=mblue,fill=mblue](0,0)
rectangle (0.25,\MyHeight)
node [
rectangle, right,fill=mblue!20,
inner sep=\InnerSep, yshift=-\YShift
]
{\large\textbf{\TitlePrefix #1}};
\end{tikzpicture}
}
\newcommand{\eg}[1]{%
\topskip=0pt% otherwise there is a space above
\stepcounter{mEgnum}%
\global\renewcommand{\TitlePrefix}{Example}% Initial title
\begin{mdframed}[
leftline=false,
innerleftmargin=0pt,
skipabove=0pt,
innertopmargin=0pt,
frametitle={\MyFrameTitle{\arabic{mEgnum}}},
repeatframetitle=true,
]
\par\noindent%
\global\renewcommand{\TitlePrefix}{Contd Example}% Subsequent Titles
#1
\end{mdframed}
}
\begin{document}
\eg{\lipsum[1-10]}
\end{document}