列表中 tree 命令的输出

列表中 tree 命令的输出

我正在尝试使用以下代码将 tree 命令的输出放入列表列表中

   \documentclass[10pt,a4paper,compress,svgnames]{beamer}
    \begin{document}
    \usepackage{listings}
    \begin[fragile]{frame}
        \begin{lstlisting}
        5053
        ├── 20141018105053_100_samples.bin
        ├── 20141018105053_101_samples.bin
        ├── 20141018105053_102_samples.bin
        ├── 20141018105053_105_samples.bin
        └── out
            ├── 20141018105053_100_samples.bin.pps
            ├── 20141018105053_101_samples.bin.pps
            ├── 20141018105053_102_samples.bin.pps
            ├── 20141018105053_105_samples.bin.pps
            └── TOA_train.npy
        \end{lstlisting}
    \end{frame}     
    \end{document}

但是我得到了这个输出 在此处输入图片描述 如何使线条出现在输出文档中?

答案1

tree您的机器上的 输出使用特殊的 UTF-8 字符来绘制线条。一方面,这些字符在标准 LaTeX 字体中不可用。另一方面,listings本身无法排版多字节字符。

要将输出“按原样”包含在 LaTeX 文档中,一个简单的解决方案是使用 listingliterate选项将这些字符透明地转换为listings可以排版的内容:

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{listings}
  \lstdefinestyle{ascii-tree}{
    literate={├}{|}1 {─}{--}1 {└}{+}1 
  }
\begin{document}
\begin{frame}[fragile]

\begin{lstlisting}[style=ascii-tree]
5053
├── 20141018105053_100_samples.bin
├── 20141018105053_101_samples.bin
├── 20141018105053_102_samples.bin
├── 20141018105053_105_samples.bin
└── out
    ├── 20141018105053_100_samples.bin.pps
    ├── 20141018105053_101_samples.bin.pps
    ├── 20141018105053_102_samples.bin.pps
    ├── 20141018105053_105_samples.bin.pps
    └── TOA_train.npy
\end{lstlisting}

\end{frame}     
\end{document}

在此处输入图片描述

这基本上模仿了tree不支持 UTF-8 的终端上的输出。但是,您可以用任何您想要的东西(甚至是宏)来替换,这样输出可以得到进一步的改进。在下面,我用一些(普通的)线条绘制命令替换它们:

  \lstdefinestyle{tree}{
    literate=
    {├}{{\smash{\raisebox{-1ex}{\rule{1pt}{\baselineskip}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1 
    {─}{{\raisebox{0.5ex}{\rule{1.5ex}{1pt}}}}1 
    {└}{{\smash{\raisebox{0.5ex}{\rule{1pt}{\dimexpr\baselineskip-1.5ex}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1 
  }
\begin{document}
\begin{frame}[fragile]

\begin{lstlisting}[style=tree]
5053
├── 20141018105053_100_samples.bin
├── 20141018105053_101_samples.bin
├── 20141018105053_102_samples.bin
├── 20141018105053_105_samples.bin
└── out
    ├── 20141018105053_100_samples.bin.pps
    ├── 20141018105053_101_samples.bin.pps
    ├── 20141018105053_102_samples.bin.pps
    ├── 20141018105053_105_samples.bin.pps
    └── TOA_train.npy
\end{lstlisting}

\end{frame}     

其结果是:

在此处输入图片描述

答案2

也许你应该使用dirtree包:

   \documentclass[10pt,a4paper,compress,svgnames]{beamer}
   \usepackage{dirtree}
    \begin{document}
    \begin{frame}
        \dirtree{%
        .1 5053 .
        .2 20141018105053\_100\_samples.bin.
        .2 20141018105053\_101\_samples.bin.
        .2 20141018105053\_102\_samples.bin.
        .2 20141018105053\_105\_samples.bin.
        .2 out .
            .3 20141018105053\_100\_samples.bin.pps.
            .3 20141018105053\_101\_samples.bin.pps.
            .3 20141018105053\_102\_samples.bin.pps.
            .3 20141018105053\_105\_samples.bin.pps.
            .3 TOA\_train.npy.
        }
    \end{frame}
    \end{document}

该软件包似乎不包含在主流 Latex 发行版中,但可以从CTA 在这里在此处输入图片描述

答案3

刚刚在我的 latex 文档中也遇到了这个主题。@Daniel 的解决方案只起到了部分作用。我不得不添加两行来替换treeisch 输出。

\lstdefinestyle{tree}{
literate=
    {├}{{\smash{\raisebox{-1ex}{\rule{1pt}{\baselineskip}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1 
    {│}{{\smash{\raisebox{-1ex}{\rule{1pt}{\baselineskip}}}\raisebox{0.5ex}{\rule{1ex}{0pt}}}}1
    { }{~}1
    {─}{{\raisebox{0.5ex}{\rule{1.5ex}{1pt}}}}1 
    {└}{{\smash{\raisebox{0.5ex}{\rule{1pt}{\dimexpr\baselineskip-1.5ex}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1
}

垂直线和“空格”缺失,导致我在编译时出错。我希望这个答案能帮助那些不熟悉 LaTeX 的人。祝你玩得开心。

答案4

这在 Overleaf 上对我有用,前面的例子遗漏了一些字符。

\lstdefinestyle{tree}{
literate=
    {├}{{\smash{\raisebox{-1ex}{\rule{1pt}{\baselineskip}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1 
    {└}{{\smash{\raisebox{0.5ex}{\rule{1pt}{\dimexpr\baselineskip-1.5ex}}}\raisebox{0.5ex}{\rule{1ex}{1pt}}}}1 
    {─}{{\raisebox{0.5ex}{\rule{1.5ex}{1pt}}}}1 
    {│}{{\smash{\raisebox{-1ex}{\rule{1pt}{\baselineskip}}}\raisebox{0.5ex}{\rule{1ex}{0pt}}}}1 
}

线条的顺序很重要。

相关内容