![我究竟怎样才能将文本行均匀地放置在两条水平 tikz 线之间?](https://linux22.com/image/395148/%E6%88%91%E7%A9%B6%E7%AB%9F%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E5%B0%86%E6%96%87%E6%9C%AC%E8%A1%8C%E5%9D%87%E5%8C%80%E5%9C%B0%E6%94%BE%E7%BD%AE%E5%9C%A8%E4%B8%A4%E6%9D%A1%E6%B0%B4%E5%B9%B3%20tikz%20%E7%BA%BF%E4%B9%8B%E9%97%B4%EF%BC%9F.png)
最近垂直间距让我很头疼。首先,我不得不学习如何摆脱center
环境后自动生成的垂直间距,因为它是关闭的(\partopsep+\topsep
),然后我不得不学习如何摆脱equation
或\[\]
环境后自动生成的垂直间距(将belowdisplayskip
和设置belowdisplayshortskip
为 0),因为它是关闭的。现在我很难将文本行均匀地放置在用绘制的两条水平线之间tikz
。这太疯狂了!(能更简单一点吗,比如 HTML?)
所以我指望你能帮助我解决这个问题。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path[draw](0,0)--(\textwidth,0);
\end{tikzpicture}\\
hello\\
\begin{tikzpicture}
\path[draw=red](0,0)--(\textwidth,0);
\end{tikzpicture}
\end{document}`
显然,文字应该稍微低一些。
答案1
你不应该用它\\
来结束一个段落,最简单的方法就是用 Ti 来做所有事情钾Z。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\newcounter{bpnode}
\tikzset{every node/.append style={/utils/exec=\stepcounter{bpnode},
alias=bpnode-\number\value{bpnode}}}
\begin{document}
\begin{tikzpicture}
\node[outer sep=0pt,inner sep=0pt,text width=\textwidth,align=left] (txt)
{hello hello hello hello hello hello hello hello hello
hello hello hello hello hello hello hello hello hello
hello hello hello hello hello hello hello hello hello};
\path[draw]([yshift=1em]txt.north west)--++(\textwidth,0);
\path[draw=red]([yshift=-1em]txt.south west)--++(\textwidth,0);
%\draw (bpnode-1) -- ++ (2,0);
\typeout{\the\textwidth}
\end{tikzpicture}
\end{document}
这是一个使用该密钥的“快速而又粗糙”的建议baseline
。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[baseline=-0.6ex]
\path[draw](0,0)--(\textwidth,0);
\end{tikzpicture}\par
\noindent%
hello\par
\noindent%
\begin{tikzpicture}[baseline=-0.6ex]
\path[draw=red](0,0)--(\textwidth,0);
\end{tikzpicture}
\end{document}
答案2
使用 Ti钾Z,我会将文本放在所需宽度的节点中,然后使用节点锚点来绘制线条。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node(a)[minimum width=\linewidth,text width=\linewidth]{hello};
\draw(a.north west)--(a.north east);
\draw[red](a.south west)--(a.south east);
\end{tikzpicture}
\end{document}
这是非 Ti钾Z 回答只是为了展示另一种方法。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{tabularx}
\begin{document}
\begin{tabularx}{\linewidth}{@{}l@{}}
\midrule
hello\\
\arrayrulecolor{red}\midrule
\end{tabularx}
\end{document}
答案3
这使用了\parbox
和\vfill
。在这种情况下,基线被忽略,因为 的基线比的上方或下方都\parbox
大,因此 LaTeX 会添加(1pt) 的间隙。在 内,s 会扩展为相同的大小。使用 [c] 代替 [s] 和 可实现相同的效果,但我想展示\baselineskip
\lineskip
\parbox
\vfill
\vfill
如何完成了。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\noindent\begin{tikzpicture}
\path[draw](0,0)--(\textwidth,0);
\end{tikzpicture}\\
\parbox[c][3\baselineskip][s]{\textwidth}{\vfill
hello
\vfill}\\
\begin{tikzpicture}
\path[draw=red](0,0)--(\textwidth,0);
\end{tikzpicture}
\end{document}
用于\raisebox
相对于基线移动文本。\rule
显示基线所在的位置。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path[draw](0,0)--(\textwidth,0);
\end{tikzpicture}\\
\raisebox{\dimexpr 0.5\depth-0.5\height}{Hellow}
\rule{1em}{0.5pt}
\raisebox{\dimexpr 0.5\depth-0.5\height}{pygmy}\\
\begin{tikzpicture}
\path[draw=red](0,0)--(\textwidth,0);
\end{tikzpicture}
\end{document}
答案4
看一下这个。
\documentclass[border=5mm,varwidth=150mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\path[draw](0,0)--(\textwidth,0);
\end{tikzpicture}
\nointerlineskip\vspace{5pt}
hello xy % or use \par to replace following blank line
\nointerlineskip\vspace{5pt}
\begin{tikzpicture}
\path[draw=red](0,0)--(\textwidth,0);
\end{tikzpicture}
\end{document}