框中完美居中字符

框中完美居中字符

我在 Inkscape 中制作了一个页面布局,其中有一些框,每个框应包含一个汉字字符。这些汉字应在框中水平和垂直居中。在框的正中间,我放置了一个带有虚拟 latex 函数名称(如 \MyBox)的文本框,然后我使用 pdf+latex 选项导出了布局。

这里是 MWE(XeLaTeX):

\documentclass[12pt]{letter}

\usepackage[margin=0cm, a5paper]{geometry}
\usepackage{adjustbox}
\usepackage{fontspec}

\newfontfamily{\fontK}[Scale=2.00]{epkyouka.ttf}

\newcommand{\MyBox}{}%


\begin{document}

\def\svgwidth{\paperwidth}

\pagestyle{empty}
\renewcommand{\MyBox}{\fontK{一}}
%\renewcommand{\MyBox}{\fontK{日}}
\centerline{\input{layout.pdf_tex}}

\end{document} 

布局.pdf_tex:

\begingroup%
  \makeatletter%
  \providecommand\color[2][]{%
    \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}%
    \renewcommand\color[2][]{}%
  }%
  \providecommand\transparent[1]{%
    \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}%
    \renewcommand\transparent[1]{}%
  }%
  \providecommand\rotatebox[2]{#2}%
  \ifx\svgwidth\undefined%
    \setlength{\unitlength}{595.27558594bp}%
    \ifx\svgscale\undefined%
      \relax%
    \else%
      \setlength{\unitlength}{\unitlength * \real{\svgscale}}%
    \fi%
  \else%
    \setlength{\unitlength}{\svgwidth}%
  \fi%
  \global\let\svgwidth\undefined%
  \global\let\svgscale\undefined%
  \makeatother%
  \begin{picture}(1,1.4142857)%
    \put(0,0){\includegraphics[width=\unitlength]{layout.pdf}}%
    \put(0.06949339,1.29607556){\color[rgb]{0,0,0}\makebox(0,0)[lt]{\begin{minipage}{0.05495935\unitlength}\centering \MyBox\end{minipage}}}%
  \end{picture}%
\endgroup%

例如,为了使“日”居中,我不得不将 Inkscape 中的文本框向下移动一点,但似乎“一”需要再向下移动一些才能居中。我想我的问题在于基线对齐。有办法得到我需要的东西吗?

编辑

因此,像往常一样,在我为我的问题发布悬赏之后,我找到了一个肮脏的解决方法:) 长话短说:

\renewcommand{\MyBox}{\fontK{一\phantom{日}}}

听起来不错,但仍然是一种 hack。正确的做法是什么?

答案1

我在使用 Inkscape 时也遇到了同样的问题。搜索这里,我发现了一些有关该\raisebox命令的信息:

\raisebox{lift}[height][depth]{text}

您可以在第一个参数中使用\height\depth\totalheight常数来精确设置垂直偏移。

对于我自己的使用,我使用以下内容:

\newcommand{\inksvcenter}[1]{\raisebox{-0.5\height}{#1}}

我在我的 Inkscape 文本中使用它:\inksvcenter{\fontK{日}}

并且我将基线与放置文本的矩形的垂直中间对齐。

当然,您可以使用-0.5自己的值调整系数以正确对齐文本。

相关内容