Я пытаюсь создать среду/команду, которая позволит мне размещать комментарии в тексте. Идея состоит в том, чтобы иметь цветной блок, который может разрываться между страницами и использовать шрифт \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
внутри мини-страницы
\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
сообщения.