字形的垂直对齐

字形的垂直对齐

pgfornaments为了风格起见,我尝试用 装饰我的书的页码。

以下是我使用的代码:

\documentclass{extreport}
\usepackage{lipsum}
\usepackage{pgfornament} 
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}  
\fancyhead{}  
\fancyfoot{}  
\cfoot{\pgfornament[scale=0.25]{11} \thepage\ \pgfornament[scale=0.25]{14}}
\begin{document}
\lipsum[1]
\end{document}

这是我的结果:

在此处输入图片描述

我的问题是:我怎样才能将装饰物稍微向上移动,以便装饰物与页码高度的中间对齐?我希望它是对称的。

答案1

可以提出装饰品使用一种\vcenter{\hbox{...}}方法。这样,装饰品将被放置在(隐式)数学轴上。

一些与样式相关的评论:(i) 如果您提供这种类型的装饰,我认为您应该使用采用旧式数字的字体——至少对于页码。(ii) 我还会在装饰和页码之间留出更多空间,例如,借助\quad语句。否则,页码块可能会看起来太“块状”。

在此处输入图片描述

\documentclass{extreport}
\usepackage{pgfornament,cfr-lm}
\newcommand{\myraise}[1]{$\vcenter{\hbox{#1}}$}

\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\fancyhead{}
\fancyfoot{}
\cfoot{\myraise{\pgfornament[scale=0.25]{11}}\quad%
       \thepage\quad\myraise{\pgfornament[scale=0.25]{14}}}

\begin{document}
\setcounter{page}{316}
\null % make sure document isn't entirely empty
\end{document}

附录:如果您希望使用cfr-lm字体包,同时仅将旧式数字用于页码(因此,在文档的其他地方使用“衬线”数字),我建议您在序言中添加以下说明:

\usepackage[rm={lining,tabular},sf={lining,tabular},tt={lining,tabular}]{cfr-lm}
\renewcommand\thepage{\textpo{\arabic{page}}} 

这样,除了页码之外,所有地方都将默认使用排列/表格数字,而页码将使用旧式/比例数字。

答案2

装饰物对称地位于基线上,这有助于决定在您的情况下将其提升多少。

假设您使用衬线数字,则凸起的量恰好是当前字体中数字高度的一半。

\documentclass{article}
\usepackage{pgfornament}

\newcommand{\figureornament}[2][1]{%
  \raisebox{.5\fontcharht\font`0}{%
    \pgfornament[scale=#1]{#2}%
  }%
}

\begin{document}

\figureornament[0.25]{11} 317 \figureornament[0.25]{14}

\end{document}

是否使用它并不重要\cfoot

在此处输入图片描述

答案3

您可以使用该\raisebox命令。

\raisebox{distance}[extend-above][extend-below]{text}

\raisebox命令用于升高或降低文本。第一个强制参数指定文本升高多少(如果是负数,则降低多少)。文本本身在 LR 模式下处理。

有时让 LaTeX 认为某个物体的尺寸与实际尺寸不同(或者与 LaTeX 通常认为的尺寸不同)很有用。该\raisebox命令可让您告诉 LaTeX 它有多高。

第一个可选参数extend-above使 LaTeX 认为文本超出了指定的长度。第二个可选参数extend-below使 LaTeX 认为文本超出了指定的长度。

来源

在这种情况下,请将\pgfornament命令包装在 中\raisebox,然后调整distance值直到看起来正确为止。例如,

\raisebox{3pt}{\pgfornament[scale=0.25]{11}}

答案4

有趣。我尝试了纯 TikZ 方法:

\documentclass{extreport}
\usepackage[pass,showframe]{geometry}
\usepackage{pgfornament}
\usepackage[rm={lining,tabular},sf={lining,tabular},tt={lining,tabular}]{cfr-lm}

\renewcommand\thepage{\textpo{\arabic{page}}}

\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\fancyhead{}
\fancyfoot{}
\cfoot{%
    \tikz[baseline]{%
        \node[anchor=east] at (0,0){\pgfornament[scale=0.25]{11}};
        \node[anchor=center] at (0.5,0) {\thepage};
        \node[anchor=west] at (1,0) {\pgfornament[scale=0.25]{14}};
    }%
}

\begin{document}
\noindent This is some text with lining 123,456,789.0 numerals.
\setcounter{page}{1234}
\null % make sure document isn't entirely empty
\end{document}

这样做的好处是,无需上下调整装饰或页码——TikZ 通过对齐节点的东、中、西锚点来实现这一点。此外,页码的位置恰好位于两个装饰的坐标中间,这再次要感谢 TikZ。这可能并非在所有情况下都有效,但在这种情况下似乎有效。

输出

只是一个想法。

相关内容