长表和带下划线的文本换行

长表和带下划线的文本换行

我目前正在使用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包,它以打字机字体排版参数并将其拆分:urlhyperref

\documentclass{article}
\usepackage{url}
\pagestyle{empty}
\begin{document}
\hsize1cm
\noindent\path{predicate_name_test(argument1, argument2, argument3)}
\end{document}

在此处输入图片描述

相关内容