答案1
下面是一个使用该movement-arrows
包的示例,该包提供了一个\mkword
宏来标记文本并为其指定节点名称。然后我创建了一个\link
链接发言人标签的宏。我将文本本身变成了表格。
\spkr{<name>}{<subscript>}
这里定义的宏\spkr
有两个参数。第二个参数是下标,第一个参数是文本。这实际上使用宏\mkword
并创建一个由名称和下标数字组成的可引用节点。名称不能包含任何标记;如果需要,则需要\mkword
直接使用宏。
\link[depth]{<node 1>}{<node 2>}
该宏将先前用(或)\link
定义的两个节点链接起来,并以 的深度将它们链接起来。\spkr
\mkword
<depth>
长度\maxlink
是一个调整因素,以便链接不会渗入左边距。
此解决方案仍需要大量手动格式化。因此,对于小型示例,它效果很好,但自动化则需要更多工作。
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{movement-arrows}
\newlength{\maxlink}
\setlength{\maxlink}{2em}% extra space for links
\newcommand\spkr[2]{\mkword[#1#2]{#1\sb#2}}
\newcommand\link[3][1em]{\tikz[overlay,remember picture]{\draw(#2.west) -|-[distance=-#1] (#3.west);}}
\usepackage{tabularx}
\usepackage{array}
\newcolumntype{s}{@{}>{\hspace{\maxlink}}r}
\newcolumntype{t}{>{: ``}X<{''}}
\let\sb\textsubscript
\begin{document}
\begin{tabularx}{\linewidth}{slt}
\spkr{A}{1} & to trainman in station & Have you got the time? \\
\spkr{B}{2} & & Standard or Daylight Savings?\\
\spkr{A}{3} & & What are you running on?\\
\spkr{B}{3} & & Standard.\\
\spkr{A}{2} & & Standard then.\\
\spkr{B}{1} & & It's five o'clock.
\end{tabularx}
\link[3em]{A1}{B1}
\link[2em]{A2}{B2}
\link[1em]{A3}{B3}
\end{document}
答案2
使用tikzmark
和ext.paths.ortho
库。为了获得最终结果,您需要至少编译 MWE 三次:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{ext.paths.ortho, % -|- and |-| path operations
tikzmark}
\usepackage{tabularray}
\begin{document}
\hfil\begin{tblr}{colspec = {Q[l, mode=math] c Q[l, preto={:\ "}, appto={"}]},
colsep = 4pt }
\tikzmarknode{a1}{A_1} & to trainman in station & Have you got the time? \\
\tikzmarknode{b1}{B_2} & & Standard or Daylight Savings?\\
\tikzmarknode{c1}{A_3} & & What are you running on?\\
\tikzmarknode{c2}{B_3} & & Standard.\\
\tikzmarknode{b2}{A_2} & & Standard then.\\
\tikzmarknode{a2}{B_1} & & It's five o'clock.
\end{tblr}
\begin{tikzpicture}[overlay,remember picture]
\draw (a1.west) -|- [distance=-7mm] (a2);
\draw (b1.west) -|- [distance=-5mm] (b2);
\draw (c1.west) -|- [distance=-3mm] (c2);
\end{tikzpicture}
\end{document}