我目前正在使用longtable
环境,并且已经设置了每行的宽度。在某一行中,我需要包含一些恰好带有下划线字符的 Prolog 代码。例如:
predicate_name_test(argument1, argument2, argument3)
问题是 latex 似乎没有用下划线包裹文本(至少这是我的猜测,如果我错了请纠正我),导致 Prolog 代码超出了行宽。你能帮帮我吗?
下面是我用来插入长表的语法:
\begin{document}
\begin{landscape}
\begin{center}
\scriptsize
\begin{longtable}{|p{2cm}|p{4cm}|p{8cm}|}\hline\hline
\multicolumn{1}{|p{2cm}|}{\textbf{Text1}} &
\multicolumn{1}{p{4cm}|}{\textbf{Text2}} &
\multicolumn{1}{p{8cm}|}{\textbf{Text3}}\\ \hline
\endfirsthead
\multicolumn{3}{p{3cm}}
{{\bfseries \tablename\ \thetable{} -- continued from previous page}}\\
\hline\multicolumn{1}{|p{2cm}|}{\textbf{Text1}} &
\multicolumn{1}{p{4cm}|}{\textbf{Text2}} &
\multicolumn{1}{p{8cm}|}{\textbf{Text3}}\\\hline
\endhead
\hline \multicolumn{3}{|r|}{{Continued on next page}} \\ \hline
\caption[Caption]{Caption}\label{label-caption}
\endfoot
\caption[Caption]{Caption}\label{label-caption}
\endlastfoot
\end{longtable}
\end{center}
\end{landscape}
\end{document}
答案1
一种解决方案是将代码通过一些预处理过滤器来解决可打印性问题。我在 longtables 中遇到了文件名和函数名的问题,这些文件和函数名提供了有关这些实体的各种指标。我使用这个 perl 正则表达式,$line =~ s/_/\\_\\hspace{0pt}/g;
使下划线可分解。在 Python 中,您可以使用它line = re.sub('_', '_\hspace{0}', line)
来实现相同的目的。
另一个解决方案是玩猫代码。其他人肯定会想出一个聪明的基于猫代码的解决方案。
另一个解决方案,也是我推荐的,是采用 80 列思维模式前你排版代码。这种想法有很好的理由。比这更长的行很难阅读。当你的眼睛从一行的末尾扫描到下一行的开头时,当行开始变长时,你的眼睛就会开始忘记你刚才在哪里。研究表明,当行数保持在合理的限度内时,代码的可读性会更高。仅仅因为你的屏幕可以显示很长的行并不意味着你应该利用这一点。
无法跟踪是 LaTeX 默认边距如此宽的主要原因。从第一天起,人为因素和可读性就在 TeX 和 LaTeX 中发挥了重要作用。将相同的概念应用于您的代码。您会发现,在大多数情况下,当您将行长度保持在合理较小(80 个字符左右是“合理较小”)时,它的可读性会大大提高。
答案2
一种解决方案是使用(或)\path
包,它以打字机字体排版参数并将其拆分:url
hyperref
\documentclass{article}
\usepackage{url}
\pagestyle{empty}
\begin{document}
\hsize1cm
\noindent\path{predicate_name_test(argument1, argument2, argument3)}
\end{document}