跨页的彩色框

跨页的彩色框

我正在尝试构建一个环境/命令,允许我在文本中放置注释。这个想法是有一个可以跨页面的彩色框,并使用\ttfamily带连字符的字体。我还想在其中使用任何结构(表格、枚举、逐项列出等)。此外,框宽度是可变的,最大值为\linewidth。我的 MWE 如下。

\documentclass{article} 

\usepackage{blindtext}
\usepackage[showframe]{geometry}

\usepackage{xcolor}
\usepackage{calc}
\usepackage{mdframed}
\usepackage{environ,varwidth}
\newsavebox\MyTempBox
\NewEnviron{mycomment}{%
\savebox\MyTempBox{%
\begin{varwidth}{\linewidth}
\BODY
\end{varwidth}}%
\begin{mdframed}
[topline=false,
rightline=false,
bottomline=false,
leftline=false,
innerleftmargin=1ex,
innerrightmargin=1ex,
innertopmargin=1ex,
innerbottommargin=1ex,
backgroundcolor=pink,
font=\ttfamily,
userdefinedwidth=\dimexpr\wd\MyTempBox\relax
]
\hyphenchar\font=\defaulthyphenchar\relax
\BODY
\end{mdframed}%
}%

\begin{document}

\begin{mycomment}
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\end{mycomment}

\end{document}

到目前为止,它几乎可以正常工作,问题是它会产生很多,Overfull \hbox因为文本不严格遵守框边界。如果我将第二个放在\BODYminipage 中

\begin{minipage}{\linewidth}
\BODY
\end{minipage}

它工作得更好,但我失去了分页功能。我认为可以分页的迷你页面可以解决这个问题。

我没有使用 mdframed 包。例如,

\newcommand{\ccomment}[1]{%
\noindent\colorbox{pink}{\begin{varwidth}{\linewidth-1em}%
\ttfamily
\hyphenchar\font=\defaulthyphenchar\relax % enable hyphenation
#1
\end{varwidth}}}

对我来说还可以,但我无法将它用于可能跨页的长文本。

谢谢。

答案1

我只需\RaggedRightragged2e包中使用:

\documentclass{article}

\usepackage{blindtext}
\usepackage[showframe]{geometry}
\usepackage{xcolor}
\usepackage{ragged2e}
\usepackage{mdframed}

\newenvironment{mycomment}
  {\begin{mdframed}[topline=false,
    rightline=false,
    bottomline=false,
    leftline=false,
    innerleftmargin=1ex,
    innerrightmargin=1ex,
    innertopmargin=1ex,
    innerbottommargin=1ex,
    backgroundcolor=pink,
    font=\ttfamily,
   ]\hyphenchar\font=\defaulthyphenchar\RaggedRight}
  {\end{mdframed}\ttfamily\hyphenchar\font=-1 }

\begin{document}

\begin{mycomment}
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\blindtext
\end{mycomment}

\end{document}

的最终设置\hyphenchar是恢复打字机字体的默认无连字符(这种分配始终是全局的)。


为了适应,varwidth您必须提供正确的线宽;这当然需要environvarwidth包。

\NewEnviron{mycomment}
  {\sbox0{\ttfamily\hbadness=10000
   \begin{varwidth}{\dimexpr\linewidth-2ex\relax}
   \BODY
   \end{varwidth}}%
   \begin{mdframed}[topline=false,
    rightline=false,
    bottomline=false,
    leftline=false,
    innerleftmargin=1ex,
    innerrightmargin=1ex,
    innertopmargin=1ex,
    innerbottommargin=1ex,
    backgroundcolor=pink,
    font=\ttfamily,
    userdefinedwidth=\dimexpr\wd0+2ex\relax
   ]\hyphenchar\font=\defaulthyphenchar\RaggedRight\BODY
   \end{mdframed}\ttfamily\hyphenchar\font=-1 }

\hbadness=10000你一起关闭虚假Underfull \hbox信息。

相关内容