我想导入森林中的许多输入文本文件。下面是一个例子来说明我的想法:
输入1.txt
This line is a long sentence that may need more space to fit inside a single line.
This is a new line that I expect to go right after the above line.
And here is a line with some special characters: @#_'"$[]{}()/\
输入2.txt
here goes input2.txt content
这是我的起始代码
\documentclass{standalone}
\usepackage{forest}
\usepackage{verbatim}
\newbox\verbbox
\begin{document}
\setbox\verbbox=\vbox{\verbatiminput{input1.txt}}
\begin{forest}
[root,draw
[\box\verbbox,draw]
[here goes input2.txt content,draw]]
\end{forest}
\end{document}
输出
上面的代码有两个问题:
- 仅需一个输入即可工作
- 输入文本不适合输入框
这是我期望的输出:
答案1
我建议编写一个样式来输入文件。verbatimbox
这里似乎使用 package 更可取,因为它可以根据文件内容的宽度调整框的宽度。
\documentclass{standalone}
\usepackage{forest}
\usepackage{verbatimbox}
\forestset{
verbatim input/.style={
content={\verbfilebox{#1}\theverbbox},
fill=yellow,
},
}
\begin{document}
\begin{forest}
for tree=draw,
[root
[,verbatim input=input1.txt]
[branch
[,verbatim input=input2.txt]
[,verbatim input=input3.txt]
]
]
\end{forest}
\end{document}
答案2
您可以在环境中使用更多框之前读取它们。每个框都有其自己的编号。如果您想与第一行对齐,可以\top
使用。\vbox
\documentclass{standalone}
\usepackage{forest}
\usepackage{verbatim}
\def\infile#1#2{\setbox\numexpr1000+#1=\vtop{\verbatiminput{#2}}}
\def\putfile#1{\box\numexpr1000+#1\relax}
\begin{document}
\infile 1 {input.txt}
\infile 2 {input2.txt}
\begin{forest}
[root,draw
[\putfile1,draw]
[\putfile2,draw]]
\end{forest}
\end{document}