我正在尝试构建一个环境/命令,允许我在文本中放置注释。这个想法是有一个可以跨页面的彩色框,并使用\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
因为文本不严格遵守框边界。如果我将第二个放在\BODY
minipage 中
\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
我只需\RaggedRight
从ragged2e
包中使用:
\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
您必须提供正确的线宽;这当然需要environ
和varwidth
包。
\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
信息。