编辑:

编辑:

编辑 3 中的解决方案。它运行良好,但似乎需要优化。:)

梅威瑟:

\documentclass{scrartcl}
\usepackage{calc}
\usepackage{mathptmx}
\usepackage{anyfontsize}

\newcommand{\Title}[1]{
   \newlength\tbheight
   \setlength{\tbheight}{\heightof{\phantom{\fontsize{0.04\textheight}   {0.04\textheight}\selectfont \parbox{\titlewidth\textwidth}{\textbf{#1}}\par}}}
%\setlength{\headheight}{\tbheight + 0.055\textwidth}
}

%it should not matter if I use:
\Title{A longer Text that goes over two or maybe three lines}
\begin{document}
%or I use it in this place:
%\Title{A longer Text that goes over two or maybe three lines}
\end{document}

有人建议在某些线程上这样做。但事实并非如此。我想测量被操纵的输入的高度。我自己的想法是:操纵输入,使其不可见,将其放在一个框中,让框按文本增长,测量框的高度。这听起来很容易,但我想,我的技能还不够成熟。

有人有解决这个问题的好主意吗?

编辑:

如果我使用此代码,则不会出现任何错误:

\newcommand{\Title}[1]{\title{#1}
\def\tbheight{\heightof{\vphantom{\fontsize{0.04\textheight}{0.04\textheight}\selectfont \parbox{\titlewidth\textwidth}{\textbf{#1}}\par}}}
\setlength{\headheight}{ 0.055\textheight}
}

但如果我这样做

\newcommand{\Title}[1]{\title{#1}
    \def\tbheight{\heightof{\vphantom{\fontsize{0.04\textheight}{0.04\textheight}\selectfont \parbox{\titlewidth\textwidth}{\textbf{#1}}\par}}}
    \setlength{\headheight}{\tbheight + 0.055\textheight}
    }

有6个。

错误 1 ​​段落在 \calc@textsize 完成之前结束。我想要解决这个问题,还需要另一个命令吗?

错误 2-4 太多“{”或忘记端组 5,6 缺少数字,非法单位

编辑2:

如果我使用此代码,则不会出现任何错误,但测量结果错误。

\newcommand{\temp}{}
\newcommand{\Title}[1]{\title{#1}
        \renewcommand\temp{\parbox{\titlewidth\textwidth}{\fontsize{0.04\textheight}{0.04\textheight}\selectfont \textbf{Titelmasterformat durch Klicken bearbeiten}\par}}
        \newlength{\tbheight}
        \settoheight\tbheight{\heightof{\temp}}

        \renewcommand{\temp}{\parbox[c][0.055\textheight]{1pt}{$_{}$}}
        \newlength\headspace
        \settoheight\headspace{\temp}

    \setlength{\headheight}{\tbheight + \headspace}
}

当我输入 \the\textheight 时,输出是

3383.03267 如果我将其乘以 0.055,则为 3383.03267 * 0.055 ~ 186 但 \the\headspace ~ 100

编辑3:

如果我使用\settototalheight而不是\settoheight,我会得到正确的测量值,但出了问题。它不是我猜测的“高度”。

\newcommand{\temp}{}
    \newcommand{\Title}[1]{\title{#1}
            \renewcommand\temp{\parbox{\titlewidth\textwidth}{\fontsize{0.04\textheight}{0.04\textheight}\selectfont \textbf{Titelmasterformat durch Klicken bearbeiten}\par}}
        \newlength{\tbheight}
        \settototalheight\tbheight{\temp}

        \renewcommand{\temp}{\parbox[c][0.055\textheight]{1pt}{$_{}$}}
        \newlength\headspace
        \settoheight\headspace{\temp}

    \setlength{\headheight}{\tbheight + \headspace}
}

答案1

您可以在序言中创建一个保存框并在正文中使用它(多次)。

\documentclass{scrartcl}
%\usepackage{calc}
\usepackage{mathptmx}
\usepackage{anyfontsize}

\newsavebox{\titlebox}

\newcommand{\Title}[1]{\savebox{\titlebox}%
  {\selectfont \parbox[b]{\textwidth}{\fontsize{0.04\textheight}{0.05\textheight}\textbf{#1}}}%
}

\Title{A longer Text that goes over two or maybe three lines}
\begin{document}
height = \the\ht\titlebox\par
depth = \the\dp\titlebox\par
total = \the\dimexpr \ht\titlebox+\dp\titlebox\relax\par
width = \the\wd\titlebox

\usebox{\titlebox}
\end{document}

演示

答案2

不太清楚你想要实现什么。无论如何,这是代码。

\documentclass{scrartcl}
\usepackage{mathptmx}

\newlength\tbheight % should be outside
\newcommand{\titlewidth}{0.3} % ???

\newcommand{\Title}[1]{% <-- don't forget
   \settoheight{\tbheight}{%
     \parbox[b]{\titlewidth\textwidth}{%
       \fontsize{0.04\textheight}{0.04\textheight}\selectfont
       \bfseries #1
     }%
   }%
}

%it should not matter if I use:
\normalfont
\Title{A longer Text that goes over two or maybe three lines}
\edef\THETBHEIGHT{\the\tbheight} % just to save the set value
\begin{document}
%or I use it in this place:
\Title{A longer Text that goes over two or maybe three lines}

\THETBHEIGHT

\the\tbheight

\end{document}

请注意,在序言中排版文本并不能保证产生有意义的结果;这里我使用了\normalfont,但通常最好在开始文档时推迟这样的事情。

我使用了\settoheight\parbox[b],因此高度测量了整个框,除了最后一行的深度,无论如何都应该忽略它。

在此处输入图片描述

相关内容