我正在使用各种宏,这些宏已使用pt
和等单位进行了微调cm
。我通常在某些地方使用这些宏(例如,在正文或脚注文本中)。为了正确概括这些宏,我想用相对单位替换绝对单位。
假设我有一个宏\newcommand*{\aalso}{\textsl{and also}\hspace{1.1pt}}
。假设我通常在脚注中使用该宏。但是现在我意识到我犯了一个错误,并且想将长度更改1.1pt
为某种形式...em
,以便我可以在其他地方使用该宏。我如何获得正确的数字?我认为正确的方法是定义一些类似的宏,如果在脚注上下文中发出,则为我提供脚注上下文中\emConverter{1.1pt}
的长度转换为 的相对长度。它不需要是 LaTeX 可解析的值;如果直接将其打印到文档中,然后我可以手动将新值写入源代码。1.1pt
em
em
一些相关问题:
答案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}