您我有一个复杂的转录与中线对齐的文本,我一直使用制表符来自动进行,但它显然不会换行甚至我想编写一个宏(除非已经存在)可以执行以下操作:
这
1 xxxxxxxxxxxxxxxx\=(tab yuydrtstop)xxxxxx\=xxxxxxx|xx\=yyyfzdfyggthrxxxxxxxxxxxx
2 yyyyyyyyyyyyyyyyyyyyyyyyy|yyyyyyyyyyyyyyyyyy
3 zzzzzzz|zzzzzz
4 | aaa
将被分解成:
1 xxxxxxxxxxxxxxxx\=(tab stop)xxxxxx\=xxxxxxx
2 yyyyyyyyyyyyyyyyyyyyyyyyy
3 zzzzzzz
4 xx\=xxxxxxxxxxxx
5 yyyyyyyyyyyyyyyyyy
6 zzzzzz
7 aaa
我希望在必要时换行,并在最后一行换行后继续下一行,并且顺序相同。我希望这有意义,而且我不会把它弄得太复杂。我很感激任何建议,手动操作很麻烦,而且每次页面布局更改后都需要重做。
答案1
我不确定您是否以自动化方式生成这些成绩单。此外,您的示例成绩单是否代表了一般情况(例如,您给出了 2 列,我认为总是如此)。我在下面提供的解决方案中假设了这一点,并对排版(如字体)做了一些其他假设。这是基本想法...
我们使用具有 2 列的 来排版结构tabular
。您以类似于示例中的形式提供tabular
内容(使用 指定换行符&
),然后打印两次。第一次只显示左列,而第二次只显示右列。每次打印内容时,都会使用中描述的技术来填补缺失的列删除列的最简单方法?这environ
包裹可以轻松收集中的所有内容tabular
并使其可用(用于多次用途)\BODY
,从而可以进行两次处理。
在下面的例子中,我使用\ttfamily
(等距 Computer Modern 字体)排版成绩单,因为它可以轻松实现跨行水平对齐。此外,我还习惯于\phantom
调整以填充某些行,使其包含正确数量的“空白字母”。array
包裹提供\newcolumntype
用于指定“gobble column”的宏H
。新的“line-breakable”tabular
包含在创建的transcript
环境内:
\documentclass{article}
\usepackage{environ}% http://ctan.org/pkg/environ
\usepackage{array}% http://ctan.org/pkg/array
\newcolumntype{H}{>{\setbox0=\hbox\bgroup}c<{\egroup}@{}}% Gobble column
\NewEnviron{transcript}{%
\begin{tabular}{r@{}H}
\BODY
\end{tabular} \par
\begin{tabular}{H@{}l}
\BODY
\end{tabular}
}
\begin{document}
\ttfamily % Monospaced Computer Modern
tabular \textrm{environment:}
\begin{tabular}{r@{}l}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&xxxxxxxxxxxxxx \\
yyyyyyyyyyyyyyyyyyyyyyyyy&yyyyyyyyyyyyyyyyyy \\
zzzzzzz&zzzzzz \\
&\phantom{aa}aaa
\end{tabular}
transcript \textrm{environment:}
\begin{transcript}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&xxxxxxxxxxxxxx \\
yyyyyyyyyyyyyyyyyyyyyyyyy&yyyyyyyyyyyyyyyyyy \\
zzzzzzz&zzzzzz \\
&\phantom{aa}aaa
\end{transcript}
\end{document}
上图展示了常规tabular
环境transcript
。