
Я пытаюсь задать расстояние относительно размера шрифта. Проблема в том, что расстояние используется повторно несколько раз в документе, возможно, в средах с другим размером шрифта. В каждом случае расстояние должно автоматически масштабироваться, чтобы сохранить пропорцию к размеру шрифта. К сожалению, простое указание расстояния в em
или ex
не работает, поскольку расстояние сохраняется в размере em
или ex
в текущем шрифте. Когда шрифт изменяется, расстояние не обновляется соответствующим образом.
Есть ли способ обойти это? В идеале решение должно работать как под LaTeX, так и под PlainTeX.
Ниже приведена модель M(n)WE, которая показывает текущее нежелательное поведение.
\documentclass[12pt]{article}
\newskip\test
\test = 1em
\begin{document}
In each row, the lines should be the same length.
\rule{0.4pt}{1em} \rule{0.4pt}{\test}
{\tiny\rule{0.4pt}{1em} \rule{0.4pt}{\test}}
{\Huge\rule{0.4pt}{1em} \rule{0.4pt}{\test}}
\end{document}
решение1
Определите расстояние как макрос, а не регистр длины:
\documentclass[12pt]{article}
\newcommand{\test}{1em}
\begin{document}
In each row, the lines should be the same length.
\rule{0.4pt}{1em} \rule{0.4pt}{\test}
{\tiny\rule{0.4pt}{1em} \rule{0.4pt}{\test}}
{\Huge\rule{0.4pt}{1em} \rule{0.4pt}{\test}}
\end{document}
решение2
Вы можете определить новую команду для правила, которая сбрасывает длину правила каждый раз, когда вы ее вызываете. Поскольку было запрошено решение, совместимое с Plain, я использовал \newskip
, но я включаю версию LaTeX, закомментированную ниже.
\documentclass[12pt]{article}
\newskip\ruleheight
\def\myrule{%
\ruleheight = 1em
\rule{0.4pt}{\ruleheight}%
}
% LaTeX version
%\newlength{\ruleheight}
%\newcommand{\myrule}{%
% \setlength{\ruleheight}{1em}
% \rule{0.4pt}{\ruleheight}%
%
\begin{document}
In each row, the lines should be the same length.
\rule{0.4pt}{1em} \myrule
\tiny \rule{0.4pt}{1em} \myrule
\Huge \rule{0.4pt}{1em} \myrule
\end{document}
Нижние три строки показывают вывод новой команды в разных размерах.