Вывод размера мини-страницы из содержащего узла tikz для rmarkdown - PullRequest
1 голос
/ 17 июня 2019

Это дополнительный вопрос к Использование списка маркеров в метке узла tikz в rmarkdown .У меня был какой-то код TikZ, который отлично работает в чистом LaTex, но НЕ, когда я переносил его в rmarkdown, где возникает ошибка ! LaTeX Error: Something's wrong--perhaps a missing \item..Это было решено в ответе на Использование списка маркеров в метке узла tikz в rmarkdown , но возникает другая проблема с применением решения, которое я там нашел.

Вы можете обратиться к исходному вопросу ( Использование списка маркеров в метке узла tikz в rmarkdown ), но в основном у меня есть некоторый код TikZ для изображений, которые будут использоваться как часть большего rmarkdown файл.Он работает в LaTex, как я тестировал в https://www.overleaf.com/, но однажды в rmarkdown возникает ошибка пропущенного элемента.Предложенное решение в Использование списка маркеров в метке узла tikz в rmarkdown заключалось в добавлении среды \minipage в rmarkdown (см. Код ниже).

Моя проблема с использованиемсреда \minipage заключается в том, что мне придется вручную устанавливать ее ширину (или, по крайней мере, я не знаю, как это автоматизировать) перед созданием узла, который должен быть частью большого TikZ изображения.Другими словами, мне нужно знать выделенное пространство для каждого узла, чтобы воспроизвести картинку в rmarkdown.Мне было интересно, есть ли способ заранее определить размер узла, чтобы я мог создать мини-страницу, соответствующую размеру узла, который он будет содержать.

\documentclass{article}

\usepackage{tikz}
\usepackage{enumitem}

\begin{document}
\definecolor{BulletsColor}{rgb}{0, 0, 0.9}
\newlist{myBullets}{itemize}{1}

\setlist[myBullets]{
  label=\textcolor{BulletsColor}{\textbullet},
  leftmargin=*,
  topsep=0ex,
  partopsep=0ex,
  parsep=0ex,
  itemsep=0ex,
  before={\color{BulletsColor}\itshape}
}


\begin{tikzpicture}
  \node[draw, rounded corners] (a)  {
    \begin{minipage}{2.5cm}
      p
      \begin{myBullets}
      \item first item
      \item second item
      \end{myBullets}
    \end{minipage}
  }
  ;
  \end{tikzpicture}
\end{document}

Я также открыт для другихрешения до тех пор, пока мне не придется указывать размер моих узлов вручную.Например, выполнение (обратите внимание на закомментированные строки)

\begin{tikzpicture}
  \node[draw, rounded corners] (a)  {
    % \begin{minipage}{2.5cm}
      p
      \begin{myBullets}
      \item first item
      \item second item
      \end{myBullets}
    % \end{minipage}
  }
  ;
  \end{tikzpicture}

в TikZ выведет размер узла из его размера текста, и я ищу что-то, что позволило бы мне использовать тот же код в rmarkdown без необходимости вручную указывать размер каждой министраницы в моих узлах.

1 Ответ

1 голос
/ 17 июня 2019

Вы можете заменить minipage средой varwidth из одноименного пакета:

\documentclass{article}

\usepackage{tikz}
\usepackage{enumitem}

\usepackage{varwidth}


\begin{document}
\definecolor{BulletsColor}{rgb}{0, 0, 0.9}
\newlist{myBullets}{itemize}{1}

\setlist[myBullets]{
  label=\textcolor{BulletsColor}{\textbullet},
  leftmargin=*,
  topsep=0ex,
  partopsep=0ex,
  parsep=0ex,
  itemsep=0ex,
%  before={\color{BulletsColor}\itshape}
}


\begin{tikzpicture}
  \node[draw, rounded corners, font=\itshape, text=BulletsColor] (a)  {
    \begin{varwidth}{\textwidth}
      p
      \begin{myBullets}
      \item \textcolor{BulletsColor}{first item}
      \item \textcolor{BulletsColor}{second item}
      \end{myBullets}
    \end{varwidth}
  }
  ;
  \end{tikzpicture}
\end{document}

enter image description here

...