Поэтому я потратил несколько часов, пытаясь найти способ получить тот же самый светлый пользовательский блок со значком в выводе LaTeX, как я это делал в html с помощью CSS. Код LaTex хорош, так как он работает в минимальном воспроизводимом примере, но он просто некорректно рендерится при рендеринге с помощью rMarkdown и пакета bookdown
. Самый близкий, который я получил, - серый фон в блоке с плохо выровненным значком слева без серого фона, но я хочу вот что:

Вот краткий пример того, как это работает в обычном LaTeX.
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\definecolor{lightgray}{HTML}{f5f5f5}
\usepackage{adjustbox}
\usepackage{fontawesome}
\newenvironment{warning}[1]% #1 = text on left
{\noindent\begin{adjustbox}{minipage=\linewidth,margin=1ex,bgcolor=lightgray,env=center}
\sbox0{#1}% measure width
\usebox0\hfill% align baseline with center of minipage
%\raisebox{\dimexpr 0.5\dp0-0.5\ht0}{\usebox0}\hfill% align center with center
\begin{minipage}{\dimexpr \textwidth-\wd0-\columnsep}% added \columnsep gap between
}
{%
\end{minipage}\end{adjustbox}%
}
\begin{document}
\begin{warning}{\Huge \faWarning}
I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works. I hope it works.
\end{warning}
\end{document}
Так как у rMarkdown есть известная проблема с xcolor
, можно легко изменить цвет на shadecolor
, как это было в пример, где я получил код для ближайшего рабочего решения, пока. Но когда я рендерил свой код в preamble.tex
, блок становится очень крошечным, так что для чтения содержимого потребуется увеличить его как 300x. Почему это? В чем причина того, что rMarkdown настолько требователен, какой код LaTeX позволяет компилировать? У кого-нибудь есть идеи, как заставить это работать, как в Html?
Эквивалентом CSS будет
div.warning {
padding: 1em 1em 1em 5em;
margin-bottom: 10px;
background: #f5f5f5;
position:relative;
}
div.warning:before {
content: "\f071";
font-family: FontAwesome;
left:10px;
position:absolute;
top:5px center/3em no-repeat;
font-size: 55px;
}
PS: код, который на самом деле работает в моем файле preamble.tex
, но не 'у него серый фон и плохой выровненный значок здесь:
\usepackage{booktabs}
\usepackage{amsthm}
\usepackage[ngerman]{babel}
\usepackage{fontawesome}
% larger font size for fontawesome icons
\makeatletter
\renewcommand\Huge{\@setfontsize\Huge{30pt}{20}}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Grey Blocks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\newenvironment{kframe}{%
\medskip{}
\setlength{\fboxsep}{.8em}
\def\at@end@of@kframe{}%
\ifinner\ifhmode%
\def\at@end@of@kframe{\end{minipage}}%
\begin{minipage}{\columnwidth}%
\fi\fi%
\def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
\colorbox{shadecolor}{##1}\hskip-\fboxsep
% There is no \\@totalrightmargin, so:
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
\MakeFramed {\advance\hsize-\width
\@totalleftmargin\z@ \linewidth\hsize
\@setminipage}}%
{\par\unskip\endMakeFramed%
\at@end@of@kframe}
\makeatother
\makeatletter
\@ifundefined{Shaded}{
}{\renewenvironment{Shaded}{\begin{kframe}}{\end{kframe}}}
\makeatother
% \raisebox{-.7\height}[0pt][0pt]{
\newenvironment{rmdblock}[1]
{
\begin{itemize}
\renewcommand{\labelitemi}{
\raisebox{-0.9\height}[0pt][0pt]{
{\setkeys{Gin}{width=3em,keepaspectratio}\Huge #1}
}
}
\setlength{\fboxsep}{1em}
\begin{kframe}
\item
}
{
\end{kframe}
\end{itemize}
}
\newenvironment{warning}
{\begin{rmdblock}{\faWarning}}
{\end{rmdblock}}
, дающий вам это изображение 