编辑 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]
,因此高度测量了整个框,除了最后一行的深度,无论如何都应该忽略它。