以下文本使用 PGF/TikZ 在 PDF 文件上书写。用例是填写 PDF 表单。
在某些情况下,人们希望写一段对齐的文本。假设左对齐,如下例所示。
但是,此外,有人可能希望该文本块中的行间距任意。我不确定有没有好的方法来实现这一点,所以这就是我的问题。
如何编写具有任意指定间距的左对齐文本块,包括非均匀间距的可能性?
我使用的代码将文本块写入节点内。我不有这样做是行不通的,但到目前为止,我一直都是这么做的。如果我把这些线放在不同的节点中,那么我必须手动对齐它们。
\documentclass[twoside=semi, 12pt]{scrartcl}
\usepackage{tikz}
\usepackage{pdfpages}
\usepackage[T1]{fontenc}
\usepackage{fouriernc}
% From https://unix.stackexchange.com/q/277892/4671
% echo | groff -T pdf > blank.pdf
% echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
\def\Filename{blank.pdf}
%http://www.freepubquiz.co.uk/famous-addresses.html
\begin{document}
\includepdf[pagecommand=
{\begin{tikzpicture}[remember picture, overlay]
\node [font=\fontsize{11}{11}\bfseries, align=left] at (11, -1.5){Dr John Dolittle\\Oxenthorpe Road\\Puddleby-on-the-Marsh\
\\Slopshire, England};
\end{tikzpicture}}
,pages=1]{\Filename}
\end{document}
答案1
正如评论中提到的,一种选择可能是使用 TikZ \matrix
,借助\usetikzlibrary{matrix}
。像表格一样,一行以 结尾\\
,但特别注意最后一行还必须结束于\\
但是,这可能使事情变得过于复杂,在设置的\\[<distance>]
正常节点中align=...
也可以工作,并且就我所见,结果是相同的,因为row sep
和\baselineskip
匹配。因此,您可以采用现有代码并[<distance>]
根据需要添加。
基线间距是文本行基线之间的距离。在 中\fontsize{10}{12}
,10
表示字体大小,12
基线间距以点为单位。请注意,在下面的代码中,我将 设置row sep
为 12pt,这与 中使用的 相同\fontsize{10}{12}
。如果您在下面的示例中将row sep
值增加到例如15pt
,并在设置\fontsize{10}{15}
中使用node
,则线条仍将对齐。
下面的示例展示了这两种方法,并添加了一些水平线以表明除了填充(节点/矩阵边框和文本之间的空白)之外,结果是相同的。左,,右,matrix
正常。node
align=left
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}
\matrix (m) [draw,matrix of nodes,nodes={anchor=base west, font=\bfseries\strut}, row sep={12pt,between origins}] {Dr John Dolittle\\Oxenthorpe Road\\[20pt]Puddleby-on-the-Marsh\\[2cm]Slopshire, England\\};
% the positioning here is to vertically align the bottom rows of the node and matrix
\path (m-4-1.base east) ++(1.5cm,0) node (a) [draw,anchor=base west, font=\fontsize{10}{12}\bfseries, align=left] {Dr John Dolittle\\Oxenthorpe Road\\[20pt]Puddleby-on-the-Marsh\\[2cm]Slopshire, England};
% horizontal lines to indicate that the spacing is the same in both cases
\foreach \Row in {1,2,3,4}
\draw [red] (m-\Row-1.base west) -- ++(9cm,0);
\end{tikzpicture}
\end{document}