如何将 pt/in/cm/mm 转换为 em/ex,因为它们是在文档的给定点定义的?

如何将 pt/in/cm/mm 转换为 em/ex,因为它们是在文档的给定点定义的?

我正在使用各种宏,这些宏已使用pt和等单位进行了微调cm。我通常在某些地方使用这些宏(例如,在正文或脚注文本中)。为了正确概括这些宏,我想用相对单位替换绝对单位。

假设我有一个宏\newcommand*{\aalso}{\textsl{and also}\hspace{1.1pt}}。假设我通常在脚注中使用该宏。但是现在我意识到我犯了一个错误,并且想将长度更改1.1pt为某种形式...em,以便我可以在其他地方使用该宏。我如何获得正确的数字?我认为正确的方法是定义一些类似的宏,如果在脚注上下文中发出,则为我提供脚注上下文中\emConverter{1.1pt}的长度转换为 的相对长度。它不需要是 LaTeX 可解析的值;如果直接将其打印到文档中,然后我可以手动将新值写入源代码。1.1ptemem

一些相关问题:

答案1

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\convertto}{mm}
    % #1 = em or ex (or any other unit)
    % #2 = dimen to convert
 {
  \texttt{#2~=~\fp_to_decimal:n { (#2)/(1#1) }#1}
 }
\ExplSyntaxOff

\begin{document}
\convertto{em}{1.1pt}

\convertto{ex}{1.1pt}

\Large
\convertto{em}{1.1pt}

\convertto{ex}{1.1pt}

\end{document}

在此处输入图片描述

还提供了以不同测量单位(默认)显示给定长度(显式或隐式)的变体mm;我还添加了四舍五入到五位数字的功能

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\convertto}{mm}
    % #1 = em or ex (or any other unit)
    % #2 = dimen to convert
 {
  \texttt{#2~=~\fp_to_decimal:n { round ( (#2)/(1#1), 5 ) }#1}
 }
\DeclareExpandableDocumentCommand{\thelength}{ O{mm} m }
 {
  \fp_to_decimal:n { round ( #2/1#1, 5 ) } #1
 }
\ExplSyntaxOff

\begin{document}
\convertto{em}{1.1pt}

\convertto{ex}{1.1pt}

\Large
\convertto{em}{1.1pt}

\convertto{ex}{1.1pt}

\thelength{\textwidth}

\thelength[cm]{\textwidth}

\end{document}

在此处输入图片描述

一个示例应用程序;我们想要修改的输出,layout使其使用毫米。我们只需要\thelength

\documentclass{article}
\usepackage{xparse}
\usepackage{layout}


\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\thelength}{ O{mm} m }
 {
  \fp_to_decimal:n { round ( (#2)/(1#1), 5 ) } #1
 }
\ExplSyntaxOff

% redefine the output macro
\makeatletter
\renewcommand*{\lay@value}[2]{\thelength{\csname #2\endcsname}}
\makeatother

\begin{document}
\layout
\end{document}

我只显示输出的相关部分,长度

在此处输入图片描述

答案2

您可以使用pgfmath来计算转换:

\pgfmathsetmacro\len{1.1pt/1em}

这是一个完整的例子:

在此处输入图片描述

\documentclass{article}
\usepackage[paperwidth=12cm,paperheight=6cm,vmargin=1cm]{geometry}
\usepackage{pgfmath}
\pagestyle{empty}
\newcommand\pttoem[1]{%
  \pgfmathsetmacro\len{#1pt/1em}Here, with the current font, #1\,pt is
  \len{}\,em.
}
\begin{document}
\raggedright
\texttt{\pttoem{1.1}} \textbf{\pttoem{1.1}}
\pttoem{1.1}\footnote{\pttoem{1.1}}

{\large \pttoem{1.1}\par}
\end{document}

相关内容