在tikz'中使用项目符号列表;rmarkdown中的s节点标签

在tikz'中使用项目符号列表;rmarkdown中的s节点标签,r,latex,r-markdown,knitr,tikz,R,Latex,R Markdown,Knitr,Tikz,我有一个tikz代码来生成一些在latex中正常工作的图形(在背面测试:)。但是,这应该是大型rmarkdown文件的一部分,但在rmarkdown中,我似乎无法在一些节点标签中使用项目符号列表。我的问题是: 如何在rmarkdown中使用项目符号列表作为tikz的节点标签 如何自定义该列表以包含一些格式,如颜色、边距等 使用\newlist,\setlist时,使用rmarkdown在latex中定义的内容将转到何处 我可以在latex中生成这些图形,并使用knitr::include_g

我有一个tikz代码来生成一些在
latex
中正常工作的图形(在背面测试:)。但是,这应该是大型
rmarkdown
文件的一部分,但在
rmarkdown
中,我似乎无法在一些节点标签中使用项目符号列表。我的问题是:

  • 如何在
    rmarkdown
    中使用项目符号列表作为tikz的节点标签
  • 如何自定义该列表以包含一些格式,如颜色、边距等
  • 使用
    \newlist
    \setlist
    时,使用
    rmarkdown
    latex
    中定义的内容将转到何处
我可以在
latex
中生成这些图形,并使用knitr::include_graphics(…)包含它们,但我更喜欢使用一种更自动的方式,让代码生成图形,并在图形出现时嵌入到文件中

    ---
    title: "Title"
    author: "Me"
    output:
      bookdown::pdf_document2:
        keep_tex: yes
        latex_engine: xelatex
    ---
在knitr块之外,以下操作非常有效

    p
    \begin{itemize}
    \item first item
    \item second item
    \end{itemize}
当knitr块中的节点标签不涉及项目列表时,它也将作为节点标签工作。否则,它将导致:
!LaTeX错误:出现问题-可能是缺少\项。

    ```{tikz, tikz-ex, echo=F, fig.cap = "Funky tikz", fig.ext = 'png', cache=TRUE, eval=T, engine.opts = list(template = "tikz2pdf.tex")}

    \usetikzlibrary{arrows, shapes}

    \definecolor{myColor}{rgb}{0.98, 0.94, 0.9}

    \begin{tikzpicture}

    \tikzstyle {stile} = [
    ellipse,
    draw=myColor,
    fill=myColor,
    thick,
    inner sep=0pt,
    text centered, 
    align=center
    ]

    \node [stile](P){
    p
    \begin{itemize}
    \item first item
    \item second item
    \end{itemize}
    };

    \end{tikzpicture}
tikz2pdf.tex包含以下内容:

    \documentclass{article}

    \include{preview}
    \usepackage[utf8]{inputenc}
    \usepackage[skins]{tcolorbox}
    \usepackage{
    tikz,
    enumitem,
    xcolor
    }

    \usetikzlibrary{
    shapes,
    arrows
    }

    \begin{document}

    \begin{preview}
    \end{preview}

    \end{document}
最后,我想自定义此列表,以更改项目的格式,如颜色、边距等。为此,我有以下代码也适用于
latex
,但我不确定在使用
rmarkdown
时将其放在何处

    \definecolor{BulletsColor}{rgb}{0.98, 0.94, 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}
    }
理想情况下,我希望能够像在
latex
中那样使用它:

    \node [stile](P){
    p
    \begin{myBullets}
    \item first item
    \item second item
    \end{myBullets}
    };
我预计(很抱歉,我无法提供完整的图片)输出如下:

p

  • 第一项
  • 第二项

在节点标签中。

如果您希望在节点中包含段落、换行等复杂文本,则需要将其放入框中,如parbox或minipage。否则,tikz无法确定文本宽度和执行任何形式的格式化

\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}


我改变了你的颜色,因为文字几乎是白色的,看不见

Alain Merigot解决了你的Tikz问题。您的其他问题与R降价有关。我会尽力解决这些问题

你在评论中问他给你的代码放在哪里。要解决这个问题,您需要考虑R降价过程。
tikz
代码块中的所有代码将插入到
tikz2pdf.tex
%%tikz\u code%%行中。但是你没有那一行,所以你需要加上它。然后LaTeX将处理该文件以生成图形。因此,图形中使用的任何内容都必须进入您的
tikz2pdf.tex
模板。这是阿兰的大部分补充

LaTeX生成图形后,将在主文件上再次调用它,主文件将具有某种类型的
\includegraphics
宏以将图形包含在主文件中。如果您还希望在主文件中使用这些定义中的任何一个(例如,您希望在两个位置使用相同的颜色),您也必须在主文件中重复这些定义。它们应该在代码块之外。如果它们需要位于标题中(例如
\usepackage
调用),则需要 在亚马尔

下面是使用Alain的Tikz代码对示例的修改

tikz2pdf.tex

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\usepackage[utf8]{inputenc}
\usepackage[skins]{tcolorbox}
\usepackage{
tikz,
enumitem,
xcolor
}
\begin{document}

\definecolor{BulletsColor}{rgb}{0, 0, 0.9}
\definecolor{myColor}{rgb}{0.98, 0.94, 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}
}

\tikzstyle {stile} = [
ellipse,
draw=BulletsColor,
fill=myColor,
thick,
inner sep=0pt,
text centered, 
align=center
]

\begin{preview}
%% TIKZ_CODE %%
\end{preview}

\end{document}
Title.Rmd

---
title: "Title"
author: "Me"
output:
  bookdown::pdf_document2:
    keep_tex: yes
    latex_engine: xelatex
---


```{tikz tikz-ex, echo=FALSE, fig.cap = "Funky tikz", fig.ext = 'pdf', cache=FALSE, eval=TRUE, engine.opts = list(template = "tikz2pdf.tex")}
\usetikzlibrary{
shapes,
arrows
}
\begin{tikzpicture}

\node[stile] (a){
\begin{minipage}{2.5cm}
p
\begin{myBullets}
\item first item
\item second item
\end{myBullets}
\end{minipage}
};

\end{tikzpicture}
```
这将生成一个包含


注意:在编辑模板时,我在代码块中设置了
cache=FALSE
。如果不这样做,
knitr
将不会查看对模板的更改,除非对
tikz
块也有更改。停止缓存可以避免开发过程中的混乱。一旦您对模板满意,就可以再次打开缓存以加快速度。

Hi@Alain!添加minipage环境解决了错误:*!LaTeX错误:出现问题--如果只使用\begin{itemize},可能缺少\item**\结束{逐项列出}。我仍然不知道R markdown的风格应该放在哪里。添加\newlist{myBullets}{itemize}{1}和\setlist[myBullets]{…}会导致:*!未定义的控制序列。l、 16\setlist[myBullets]{**。你能帮个忙吗?我关于R降价的问题的第二部分已经解决了,正如你在下面所看到的。由于声誉不佳,我无法给你投票,但你可以期待我一到那里就投票。谢谢!你好@user2554330,这解决了我的问题,谢谢你的澄清!我接受了这个答案!