我正在尝试创建一个简单的环境。该环境包含一个被虚线框包围的迷你页面。
\NewEnviron{Notes}{
\par
\begin{tikzpicture}
\node[rectangle,minimum width=0.95\textwidth] (m) {
\begin{minipage} {0.75\textwidth}
\color{red}\BODY
\end{minipage}
};
\draw[dashed] (m.south west) rectangle (m.north east);
\end{tikzpicture}\\
}
本质上,我想根据盒子的内容按比例增加盒子的大小。因此,类似这样的操作:\vspace{0.2*\BODYHeight}
做到这一点的最好方法是什么?
答案1
您可以做的是将\BODY
用必要的间距括起来。这是 MWE。
\documentclass{article}
\usepackage{environ}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\NewEnviron{Notes}{
\par
\begin{tikzpicture}
\node[rectangle,minimum width=0.95\textwidth] (m) {
\begin{minipage} {0.75\textwidth}
\vspace*{0.1\textwidth}
\color{red}\BODY
\vspace{0.1\textwidth}
\end{minipage}
};
\draw[dashed] (m.south west) rectangle (m.north east);
\end{tikzpicture}\\
}
\begin{Notes}
\lipsum[1]
\end{Notes}
\end{document}
更好的方法是使用固定量的填充:
\documentclass{article}
\usepackage{environ}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\NewEnviron{Notes}{
\par
\begin{tikzpicture}
\node[rectangle,minimum width=0.5\textwidth] (m) {
\fbox{\begin{minipage} {0.5\textwidth}
\color{red}\BODY
\end{minipage}}
};
\draw[dashed] (m.south west) rectangle (m.north east);
\end{tikzpicture}\\
}
\begin{Notes}
\lipsum[1]
\end{Notes}
\end{document}
如果添加\fboxsep0pt
,则不会显示内部规则。可以使用 的合适值来增加填充\fboxsep
。我认为这在排版方面是一个更好的解决方案,并且可以很好地缩放。垂直间距的非线性缩放也是可能的,可以采用我在 中首次遇到的技术amsgen
,latex amsgen.dtx
并查找 的定义\compute@ex@
。困难在于找到一个可接受的公式来描述这种间距的美感。公式应包括文本宽度、高度、字体大小和与其余文本的关系等变量。
答案2
不完全成比例,因为 eI 添加了 2pt 以避免值太小。可以进行更改.05\htbox
,.1\htbox
但现在问题出在大值上。
\documentclass{article}
\usepackage{environ}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\newbox\mybox
\newdimen\htbox
\newdimen\innersep
\NewEnviron{Notes}{%
\setbox\mybox=\vbox{%
\begin{minipage} {0.75\textwidth}
\color{red}\BODY
\end{minipage}}%
\htbox\ht\mybox
\advance\htbox by \dp\mybox
\innersep=.05\htbox
\advance\innersep by 2pt
\par
\begin{tikzpicture}
\node[draw,inner sep=\innersep,rectangle,
text width=0.95\textwidth-2\innersep] (m) {\unvcopy\mybox};
\end{tikzpicture}\\
}
\begin{Notes}
Texte
\end{Notes}
\begin{Notes}
\lipsum[1]
\end{Notes}
\end{document}