Тикз в нижнем индексе или в экспоненте

Aug 19 2020

Иногда я использую tikz, чтобы нарисовать специальный символ, который затем используется в уравнении. Я не знаю, есть ли лучший способ сделать это, но это очень просто и дает хороший результат. Приведу конкретный пример:

\newcommand{\symb}{\tikz[baseline=(s.base)]{
        \node[inner sep=1pt,outer sep=0pt] (s) {$s$};
        \draw[-] (s.north east) -- (s.south east) -- (s.south west) -- (s.north west);
    }}

чтобы получить s в математическом стиле с тремя сторонами рамки вокруг него. Он хорошо работает почти во всех ситуациях, за одним исключением: он не масштабируется должным образом при использовании в качестве подстрочного индекса или показателя степени.

В обоих s одинаковый размер, даже если они появляются в заголовке или с разным размером шрифта, например, оба s имеют одинаковый размер. Но когда задействован сценарий, то есть второй$s$ vs $\symb${\Large $s$ vs $\symb$}$X_s$ vs $X_\symb$$s$ не в размере скрипта.

Итак, есть ли способ изменить команду $\symb$ выше, так что при использовании в подстрочном индексе или экспоненте он масштабируется так же, как и текст?

Я уже нашел рабочее решение: создайте вторую версию команды, которая будет использоваться в стиле сценария:

\newcommand{\symbsc}{\tikz[baseline=(s.base)]{
        \node[inner sep=1pt,outer sep=0pt] (s) {$\scriptstyle s$};
        \draw[-] (s.north east) -- (s.south east) -- (s.south west) -- (s.north west);
    }}

который дает желаемый результат визуально, но меня немного раздражает наличие двух разных функций в зависимости от того, использую я стиль сценария или нет. Я надеялся, что кто-нибудь может предложить мне лучший способ сделать это?

Минимальный пример:

\documentclass{article}
\usepackage{tikz}

\newcommand{\symb}{\tikz[baseline=(s.base)]{
        \node[inner sep=1pt,outer sep=0pt] (s) {$s$};
        \draw[-] (s.north east) -- (s.south east) -- (s.south west) -- (s.north west);
    }}

\begin{document}

In normale size: $\symb$ vs $s$.

In large scale, it scales well: {\Large $\symb$ vs $s$ }

But in subscript, it doesn't: $X_{\symb}$ vs $X_{s}$

It especially look bad if both appear in the same subscrit:

$X_{s \symb}$ vs $s \symb$

\end{document}

Ответы

2 muzimuzhiZ Aug 19 2020 at 22:17

Обертывание все \tikzвещи внутри \text{...}предоставленный amsmathпакет делает работу. Обратите внимание, что \textэто похоже на \mboxиспользование в текстовом режиме, что в данном случае не повредит.

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}

\makeatletter
\newcommand{\symb}{%
  \text{%
    \tikz[baseline=(s.base)] {
      \node[inner sep=1pt, outer sep=0pt] (s) {$s$};
      \draw (s.north east) -- (s.south east) -- (s.south west) -- (s.north west);
    }%
  }%
}
\makeatother

\begin{document}

In normale size: $\symb$ vs $s$.

In large scale, it scales well: {\Large $\symb$ vs $s$ }

But in subscript, it doesn't: $X_{\symb}$ vs $X_{s}$

It especially look bad if both appear in the same subscrit:

$X_{s \symb}$ vs $s \symb$

\end{document}