我正在尝试使用以下代码将 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 的解决方案只起到了部分作用。我不得不添加两行来替换tree
isch 输出。
\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
}
线条的顺序很重要。