我有以下代码,绘制一个虚线框:
\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}