盒子宽度问题

盒子宽度问题

我有以下代码,绘制一个虚线框:

\documentclass{book}

\usepackage{lipsum}

\usepackage{arydshln,paralist}

\setlength{\parindent}{0pt}

\newenvironment{mybox}[1]
  {\vspace{6pt}\par\tabular{:p{\linewidth}:}\hdashline
   \rule{0pt}{4ex}#1\\
   \compactitem}
  {\endcompactitem\hspace*{1ex}\\\hdashline\endtabular\vspace*{1ex}}


\begin{document}
\lipsum[1]

\begin{mybox}{There are many items:}
\item First item
\item Second item
\end{mybox}

\end{document}

结果如下所示(请注意,框比其应有的宽度要宽):

箱子太宽

但是,它画得太宽,不符合我的边距。如何更改定义的框环境以减小其宽度?

谢谢。

答案1

\tabcolsep正如前面提到的,你必须从长度中移除两倍的表格列分隔量(?) 。这可以轻松完成,使用\dimexpr(eTeX)如下所示。或者,您可以使用长度寄存器,如下所示Yossi 的回答

\documentclass{book}
\usepackage{lipsum}

\usepackage{arydshln,paralist}

\setlength{\parindent}{0pt}

\newenvironment{mybox}[1]
{\vspace{6pt}\par\tabular{:p{\dimexpr\linewidth-2\tabcolsep}:}\hdashline
   \rule{0pt}{4ex}#1\\
   \compactitem}
  {\endcompactitem\hspace*{1ex}\\\hdashline\endtabular\vspace*{1ex}}


\begin{document}
\lipsum[1]

\begin{mybox}{There are many items:}
\item First item
\item Second item
\end{mybox}

\end{document}

将此值@{}设置sep为零在这里不起作用。:它会导致错误,并且它内部会使文本接触虚线。

答案2

问题是列会在您指定的宽度周围添加空间。LaTeX 只是按照您的指示执行操作。为了获得“正确”的输出,您需要将文本的宽度减少2\tabcolsep

\documentclass{book}

\usepackage{lipsum}
\usepackage{arydshln,paralist}

\setlength{\parindent}{0pt}
\newlength{\mycolwidth}
\setlength{\mycolwidth}{\linewidth}
\addtolength{\mycolwidth}{-2\tabcolsep}

\newenvironment{mybox}[1]
  {\vspace{6pt}\par\tabular{:p{\mycolwidth}:}\hdashline
   \rule{0pt}{4ex}#1\\
   \compactitem}
  {\endcompactitem\hspace*{1ex}\\\hdashline\endtabular\vspace*{1ex}}

\begin{document}
\lipsum[1]

\begin{mybox}{There are many items:}
\item First item
\item Second item
\end{mybox}

\end{document}

相关内容