我究竟怎样才能将文本行均匀地放置在两条水平 tikz 线之间?

我究竟怎样才能将文本行均匀地放置在两条水平 tikz 线之间?

最近垂直间距让我很头疼。首先,我不得不学习如何摆脱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

使用 TiZ,我会将文本放在所需宽度的节点中,然后使用节点锚点来绘制线条。

\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}

在此处输入图片描述

这是非 TiZ 回答只是为了展示另一种方法。

\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}

相关内容