我使用longtable
环境来制作对话框,如下所示。
我更喜欢它而不是dialogue
环境,因为:
||
左边的线- 演讲者姓名的风格(与文本分开)
问题在于大文本!当我编写下面的代码时,第二个学生的行无法拆分成页面。我知道这是不可能的,所以我问是否有人知道我的解决方案的替代方案,例如dialogue
环境定制。
\documentclass[a4paper,11pt,twoside]{book}
\usepackage{longtable}
\usepackage{lipsum}
\begin{document}
\begin{longtable}{||lp{0.7\textwidth}}
Student1:& \lipsum[1] \\
Teacher: & \lipsum[1] \\
Student2:& \lipsum[1-3]
\end{longtable}
\end{document}
先谢谢了!!!
答案1
这是避免使用表格的初步猜测。段落内仍然不会出现分页符,但是,如果将每个段落换行到新的行中\speaks{...}
,则段落之间可能会出现分页符。不过,以下代码需要对新页面的开始进行一些修正。
\documentclass{scrartcl}
\usepackage{tikz}\usetikzlibrary{backgrounds}
\usepackage{enumitem}
\newlength\fntheight
\newlength\fntdepth
\newlength\parcorrection
\newif\iffirstitem
\newif\iffirstpar
\widowpenalties 1 10000
\raggedbottom
\newenvironment{dialogue}[1][25mm]{
\newcommand{\speaks}[2][]{%
\def\temp{##1}%
\ifx\temp\empty%
\vspace{-\itemsep}%
\else%
\firstpartrue%
\fi%
\setlength{\fntheight}{\fontcharht\font`B}%
\setlength{\fntdepth}{\fontchardp\font`q}%
\setlength{\parcorrection}{
\dimexpr
\fntheight
+\iffirstitem
0pt
\else
\parsep
+\baselineskip
+\iffirstpar
\itemsep
\else
0pt
\fi
\fi
\relax
}
\item[##1]
\begin{tikzpicture}[remember picture, overlay]
\node[inner sep=0] (start) at (-1ex-#1, \parcorrection) {};
\end{tikzpicture}%
##2
\hfill
\begin{tikzpicture}[remember picture, overlay]
\node[inner sep=0] (end) at (-1ex-\textwidth, -\fntdepth) {};
\draw[double] (start) -- (end);
\end{tikzpicture}
\firstitemfalse
\firstparfalse
\par
}
\firstitemtrue
\begin{description}[
labelwidth=#1,
leftmargin=#1,
labelsep=0pt,
font={\normalfont\scshape}
]
}{
\end{description}
}
\begin{document}
\begin{dialogue}
\speaks[Christian]{The square is a refuge for everyone.}
\speaks[Visitor]{Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.}
\end{dialogue}
\end{document}
答案2
我玩过这回答一下,我会为我自己做一个。
下面的代码对我来说很好用,但我不知道它是否是最简单的。如果有人知道更好的版本,我会很高兴听到!
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{dialogue}
\usepackage{environ}
\usepackage{lipsum}
\newtcolorbox{four}[1][]{%
enhanced,
breakable,
frame hidden,
colback=white,
overlay unbroken={%
\draw[thick,black,double] (interior.north west)--(interior.south west)--(interior.south west);
},
overlay first={
\draw[thick,black,double] (interior.north west)--(interior.south west);
},
overlay middle={
\draw[thick,black,double] (interior.north west)--(interior.south west);
},
overlay last={
\draw[thick,black,double] (interior.north west)--(interior.south west)--(interior.south west);
},
#1,
}
\NewEnviron{dialogos}{
\begin{four}
\begin{dialogue}
\BODY.
\end{dialogue}
\end{four}
}
\begin{document}
\begin{dialogos}
\speak{Someone} \lipsum[1]
\lipsum[3]
\speak{someone else} \lipsum[2]
\speak{Someone} \lipsum[1]
\end{dialogos}
\end{document}
先谢谢了!