使用 PGF/TikZ 在 PDF 文件上写入具有任意间距的左对齐文本块

使用 PGF/TikZ 在 PDF 文件上写入具有任意间距的左对齐文本块

以下文本使用 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正常。nodealign=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}

相关内容