如何制作具有对数刻度的尺子?

如何制作具有对数刻度的尺子?

我正在尝试制作一个自定义剪切计算尺的滑块,每侧都有对数增量/刻度。一侧的刻度需要从 100 到 5000。另一侧需要从 0.1 到 10。

我可以制作一把尺子,如下所示:

\documentclass[12pt]{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[rotate=0,transform shape]
    %% Draws a 15 cm ruler ''box''
        \draw (-0.2,0) rectangle (15.5,1);
        %% Lower side divisions in cm
            % Draws long line every 1 cm
            \foreach \x in {0,1,...,15}{
            \draw (\x,0) -- (\x,0.2)node[above,scale=0.4]{\x};
            }
            % Draws medium line every 0.5 cm
            \foreach \x in {0.1,0.2,...,14.9}{
            \draw (\x,0) -- (\x,0.075);
            }
            % Draws short line every 0.1 cm
            \foreach \x in {0.5,1,...,14.5}{
            \draw (\x,0) -- (\x,0.15);
            }

    %% Upper side divisions in inches
            % Draws long line every 1 in
            \foreach \x in {0,1,...,6}{
            \draw (\x in,1) -- (\x in,0.8)node[below,scale=0.4]{\x};
            }
            % Draws medium line every 0.5 in
            \foreach \x in {0.1,0.2,...,5.9}{
            \draw (\x in,1) -- (\x in,0.925);
            }
            % Draws short line every 0.1 in
            \foreach \x in {0.5,1,...,5.5}{
            \draw (\x in,1) -- (\x in,0.85);
            }
    \end{tikzpicture}
\end{document}

但这只是正常的、均匀的增量。我一直在到处寻找如何使它们成为对数,但到目前为止我还没有运气。我最接近的是 axis 和 pgfplots,但我不知道如何将其用于像上面那样的滑块/标尺。

如果能提供任何正确的建议或指引,我将非常感激!

提前感谢所有能够提供帮助的人。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

问题澄清/更新:

你好,我们又见面了。

我之前做的不够精确。我想制作一个与此类似的尺子: 在此处输入图片描述

它不需要完全一样,而且刻度的内部位置目前并不重要。我只是想知道如何进行对数除法。我看过这里的另一篇文章:如何在 TikZ 中制作计算尺?

这里的解决方案是具有隐藏轴的对数网格系统,产生如下效果:对数轴

这给我带来了几个问题:我还没搞清楚如何在上面加上自定义编号,即 (0.1,0.2,0.3,...1,2,3,...10,20,30,...100) 而不是 1e0.1,1e0,2 等等。另一个方法是将两个并排放在“标尺”中,以便剪切。

如果 \foreach 可以直接执行此操作,那就太完美了。但我在任何地方都找不到有关它的任何信息。

我希望这能让我的问题更清楚一些。

答案1

这是您的问题的解决方案。可以通过在 -循环中选择其他计算来调整值foreach。此示例使用循环通过应用乘数(,和)来创建从1到 的步骤。这会移动以适应其位置。100.1110scope

为了获得正确的方向,您必须旋转tikzpicture(您也可以使用另一个scope)并调整node's位置和旋转。

\documentclass[tikz, border=6mm]{standalone}

\begin{document}
  \begin{tikzpicture}[scale=4, rotate=90]
    \foreach \i\s in {0.1/0,1/1,10/2} {
      \begin{scope}[xshift=\s cm]
        \foreach \x [evaluate=\x as \y using log10(\x), evaluate=\x as \l using \x*\i] in {1,...,10} {
          \draw (\y,0) -- ++(0,.25) node [left, rotate=0] {\tiny \pgfmathprintnumber{\l}};
        }
        \foreach \x [evaluate=\x as \y using log10(\x)] in {1,1.2,...,10} {
          \draw (\y,0) -- ++(0,.1);
        }
      \end{scope}
    }
    \draw (-.1,0) rectangle ++(3.2,.5);
  \end{tikzpicture}
\end{document}

渲染图像

相关内容