我正在努力适应,但失败了图表-latex.sty做我想做的事情。它需要传递给外部脚本的可选参数width
和height
,但希望它们作为语义上解释为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