r bookdown: пользовательские блоки в формате PDF с серым фоном и значком - PullRequest
1 голос
/ 05 ноября 2019

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

enter image description here

Вот краткий пример того, как это работает в обычном 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}}

, дающий вам это изображение enter image description here

...