问题:如何在 Latex 中插入 txt 文件(源代码),而不改变缩进、制表符、格式等?
设想 :
假设我有一个如下的文本文件(它是在 gEdit 中编辑的 VHDL 代码的一部分):
我想将这段代码原封不动地包含在 Latex 中。
我使用了 Kile 中的逐字方法,下面是我得到的结果:
您可以看到标签和缩进错位了。(这只是一小部分,其他部分也类似,就是说,全部都错位了)
我怎样才能将这样的代码添加到乳胶文件中?
编辑 :
我也用过listings
这个包。还是同样的问题。意图不正确。而且它甚至剪切了右侧的一些文本部分。
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity TOP_MODULE is
port (CLK : IN STD_LOGIC; -- clock
RESET : IN STD_LOGIC; -- reset signal
DECODED_DATA : OUT STD_LOGIC_VECTOR(0 TO 15) -- decoded message
);
end TOP_MODULE;
答案1
fancyvrb
您的输入文件中可能存在制表符。但是,您可以使用或来修复此问题,而无需更改输入文件listings
;这两个包还允许缩小字体大小,以便代码适合边距。
\documentclass{article}
\usepackage{fancyvrb} % for simple solution
\usepackage{listings,color} % for colored solution
% for colored solution
\lstnewenvironment{VHDLlisting}[1][]
{\lstset{
language=VHDL,
basicstyle=\footnotesize\ttfamily,
columns=flexible,
keepspaces=true,
keywordstyle=\color{red},
identifierstyle=\color{green},
commentstyle=\color{blue},
}}{}
\begin{document}
% simple solution (no colors)
\begin{Verbatim}[tabsize=8,fontsize=\footnotesize]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity TOP_MODULE is
port (CLK : IN STD_LOGIC; -- clock
RESET : IN STD_LOGIC; -- reset signal
DECODED_DATA : OUT STD_LOGIC_VECTOR(0 TO 15) -- decoded message
);
end TOP_MODULE;
\end{Verbatim}
% colored solution
\begin{VHDLlisting}[tabsize=8]
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity TOP_MODULE is
port (CLK : IN STD_LOGIC; -- clock
RESET : IN STD_LOGIC; -- reset signal
DECODED_DATA : OUT STD_LOGIC_VECTOR(0 TO 15) -- decoded message
);
end TOP_MODULE;
\end{VHDLlisting}
\end{document}
在示例中,显示的行);
中只有一个制表符,只是为了表明包可以处理它。准确地说,
<TAB><SP><SP>);
因此在我的编辑器中,制表符覆盖 8 个空格,将括号对齐到其上方行中的“D”下是正确的。
但是,将制表符改为空格更好:编辑者对于 的长度有不同的看法<TAB>
,因此在一个编辑器中对齐的内容在另一个编辑器中可能看起来不对齐。