上下文
我想通过计算生成包含不同样式文本的 1920x1080 PNG 图像。由于LaTeX
具有丰富的文本样式设置功能,并且可以使用命令行编译文档(因此,创建脚本很方便),所以我决定使用LaTeX
。
我想创建三个垂直排列且高度相同的区域,并在这些区域的中心显示一个句子。下图是使用 Inkscape 创建的,它显示了我想要的结果。
我尝试过的方法
以下最小工作示例展示了我为实现预期结果所做的一次尝试。
\documentclass[aspectratio=169]{beamer}
\setbeamersize{text margin left=0mm,text margin right=0mm}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{background canvas}{bg=yellow}
\begin{document}
\begin{frame}
\begin{center}
This is a sentence in the first area.
\end{center}
\par\noindent\rule{\textwidth}{1pt}
\begin{center}
This is a sentence in the second area.
\end{center}
\par\noindent\rule{\textwidth}{1pt}
\begin{center}
This is a sentence in the third area.
\end{center}
\end{frame}
\end{document}
该文档的问题是三个区域大小不一样,并且句子不居中。
我知道的
我知道可以使用 PDF 文件创建 1920x1080 PNG 图像convert
。
$ convert -quality 100 -density 300 -resize 1920x1080 document.pdf document.png
我们可以用它ffprobe
来确认所需的尺寸。
$ ffprobe -v error -show_entries stream=width,height -print_format default=nw=1 document.png
width=1920
height=1080
答案1
您可以使用固定高度的迷你页面:
\documentclass[varwidth=16cm]{standalone}
\setlength{\fboxsep}{0pt}
\newlength{\myheight}
\setlength{\myheight}{\dimexpr3cm-2\fboxrule}
\usepackage{xcolor}
\pagecolor{yellow}
\begin{document}
\nointerlineskip
\hskip-\fboxrule\fbox{\begin{minipage}[c][\myheight]{16cm}
\centering
This is a sentence in the first area.
\end{minipage}}%
\nointerlineskip
\hskip-\fboxrule\fbox{\begin{minipage}[c][\myheight]{16cm}
\centering
This is a sentence in the first area.
\end{minipage}}%
\nointerlineskip
\hskip-\fboxrule\fbox{\begin{minipage}[c][\myheight]{16cm}
\centering
This is a sentence in the first area.
\end{minipage}}%
\end{document}
答案2
你可以使用 TikZ:
\documentclass[aspectratio=169]{beamer}
\setbeamertemplate{navigation symbols}{}
\setbeamercolor{background canvas}{bg=yellow}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{frame}
\begin{tikzpicture}[remember picture,overlay]
\draw ($(current page.north west)!0.33!(current page.south west)$) -- ($(current page.north east)!0.33!(current page.south east)$);
\draw ($(current page.north west)!0.66!(current page.south west)$) -- ($(current page.north east)!0.66!(current page.south east)$);
\node[text width=\linewidth,align=center] at ($(current page.north)!0.1667!(current page.south)$) {sentence 1};
\node[text width=\linewidth,align=center] at ($(current page.north)!0.5!(current page.south)$) {sentence 2};
\node[text width=\linewidth,align=center] at ($(current page.north)!0.8333!(current page.south)$) {sentence 3};
\end{tikzpicture}
\end{frame}
\end{document}