如何正确转换作为参数传递给环境的大小?

如何正确转换作为参数传递给环境的大小?

我正在努力适应,但失败了图表-latex.sty做我想做的事情。它需要传递给外部脚本的可选参数widthheight,但希望它们作为语义上解释为bp的无量纲值。我想以一种方式改变环境,而不是

\begin{diagram}[width=100]
...
\end{diagram}

我可以写:

\begin{diagram}[width=0.5\textwidth]
...
\end{diagram}

并且该值在后台转换为 bp 并作为参数传递给外部脚本。

我设法通过调整获得了一个转换函数这个答案,通过定义

\usepackage{pgfmath}
\newcommand\tobp[1]{\pgfmathsetmacro\len{#1/1bp}\len{}}

\tobp产生一个无量纲数,正如我想要的那样,并且在将结果数字打印到文档中时它可以工作。但我不能在参数列表中调用它,[width=\tobp{...}]也不能用它来包装参数diagrams-latex.sty。我尝试过改变

\DeclareOptionX{width}[]{\def\dtt@width{-w #1}}

\DeclareOptionX{width}[]{\def\dtt@width{-w \tobp{#1}}}

但无论我做什么,我都会收到各种错误消息,例如

Incomplete \iffalse; all text was ignored after line 61.

我想要的事情怎样才能正确完成?

提前谢谢您!


“最小工作示例”:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{tikz}
\usepackage[backend=pgf, extension=pgf, outputdir=diagrams, input, cmdprefix={stack exec --}]{diagrams-latex}

% this seems to convert any unit to unitless number which is in bp
\usepackage{pgfmath}
\newcommand\tobp[1]{\pgfmathsetmacro\len{#1/1bp}\len{}}

\begin{document}

% this works
\tobp{\textwidth}
\tobp{10em}
\tobp{100pt}

% \begin{diagram}[width=0.5\textwidth] % <- what I ACTUALLY want to write
% \begin{diagram}[width=\tobp{0.5\textwidth}] % <- what I tried to do
\begin{diagram}[width=100]
dia = circle 1
\end{diagram}

\end{document}

解决方案:

添加\RequirePackage{graphics}

并根据线的宽度(和类似的高度)修改为:

\DeclareOptionX{width}[]{\Gin@defaultbp\foo{#1}\def\dtt@width{-w \foo}}

答案1

图形包中有一个命令可以完成这个任务:

100=100
.5\textwidth=171.85512
100bp=99.99976
100pt=99.62616

是输出

\documentclass{article}
\usepackage{graphics}
\makeatletter

\Gin@defaultbp\foo{100}
\typeout{100=\foo}


\Gin@defaultbp\foo{.5\textwidth}
\typeout{.5\string\textwidth=\foo}

\Gin@defaultbp\foo{100bp}
\typeout{100bp=\foo}


\Gin@defaultbp\foo{100pt}
\typeout{100pt=\foo}


\stop

相关内容