自定义命令用箭头表示方程中的特定项

自定义命令用箭头表示方程中的特定项

目前,我正在使用notate此自定义命令TeX SE 答案。该命令的语法为:

\notate[B<race>]{<referenced math>}{<dropline length in \baselineskips>}{<math notation>}

这是MWE:

\documentclass{article}
\usepackage{graphicx,amsmath}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}

% \parskip \baselineskip  % it's creating a problem with my theorem environment designs
\def\svmybf#1{\rotatebox{90}{\stretchto{\{}{#1}}}
\def\svnobf#1{}
\def\rlwd{.5pt}
\newcommand\notate[4][B]{%
  \if B#1\let\myupbracefill\svmybf\else\let\myupbracefill\svnobf\fi%
  \def\useanchorwidth{T}%
  \setbox0=\hbox{$\displaystyle#2$}%
  \def\stackalignment{c}\stackunder[-6pt]{%
    \def\stackalignment{c}\stackunder[-1.5pt]{%
      \stackunder[2pt]{\strut $\displaystyle#2$}{\myupbracefill{\wd0}}}{%
    \rule{\rlwd}{#3\baselineskip}}}{%
  \strut\kern9pt$\rightarrow$\smash{\rlap{$~\displaystyle#4$}}}%
}

\begin{document}

\begin{equation*}
   S = \int \sqrt{\notate[X]{F}{1}{\text{$F$ is functional}}[x^a(\tau)]} d\tau
\end{equation*}

\end{document}

但我想要的输出如下:

在此处输入图片描述

我需要在命令中更改什么notate才能获得所需的输出?

我喜欢命令中的另一个功能是将箭头的位置作为可选参数,以便可以根据用户的选择将其放置在<math notation>或/和方向上<referenced math>。默认情况下,它应该指向<math notation>。我希望的命令语法:

\notate[<Brace>, <arrowhead>]{<referenced math>}{<dropline length in \baselineskips>}{<math notation>}

默认选择是括号位于 处<referenced math>,箭头指向<math notation>。例如:

  1. 以下两个应该生成相同的输出并被[B,A]视为可选参数的默认选择:
\notate[B,A]{<referenced math>}{1}{<math notation>}
\notate{<referenced math>}{1}{<math notation>}
  1. 要移除支架并保留箭头,请执行以下操作<math notation>
\notate[X,A]{<referenced math>}{1}{<math notation>}
  1. 要交换支架和箭头的位置(箭头在一端<referance math>,支架在另一端):
\notate[A,B]{<referenced math>}{1}{<math notation>}
  1. 要保持两端的箭头:
\notate[A,A]{<referenced math>}{1}{<math notation>}
  1. 保持两端空白(无括号,无箭头):
\notate[X,X]{<referenced math>}{1}{<math notation>}

答案1

一种可能性是使用annotate-equations包。与包的默认输出的唯一区别是箭头的方向:

\documentclass{article}
\usepackage{amsmath}
\usepackage{annotate-equations}
\usepackage{derivative}

\begin{document}

\renewcommand{\eqnannotationfont}{\footnotesize}
\begin{equation*}
S = \int \sqrt{\tikzmarknode{f}{F}[x^a(\tau)]}\odif{\tau}
\end{equation*}
\annotate[yshift=-1em]{below}{f}{$F$ is functional}

\end{document}

在此处输入图片描述

不相关的事情:根据这个帖子derivative差速器应直立,而不是斜体。我使用包更改了差速器。

当然,另一种选择是tikzmark使用软件包。无论如何,作为一名普通用户,我认为最好使用附带文档的软件包,而不是无法完全理解的代码。

答案2

至于如何实现所给出的方程的期望结果这个直接问题,只需要\smash命令即可\notate

已编辑以显示箭头选择的更多灵活性。与以前一样,B可选参数在引用的数学上提供了上括号。但是,U提供的\uparrow不是简单的行尾,而是。

可以采用类似的逻辑来渲染\rightarrow或不渲染,具体取决于可选参数的值。

\documentclass{article}
\usepackage{graphicx,amsmath}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}

% \parskip \baselineskip
\def\myupbracefill#1{\rotatebox{90}{\stretchto{\{}{#1}}}
\def\rlwd{.4pt}
\newcommand\notate[4][B]{%
  \if B#1\else\def\myupbracefill##1{}%
    \if U#1\def\myuparrow{$\uparrow$}\else\def\myuparrow{}\fi\fi%
  \def\useanchorwidth{T}%
  \setbox0=\hbox{$\displaystyle#2$}%
  \def\stackalignment{c}\stackunder[-6pt]{%
    \def\stackalignment{c}\stackunder[-1.5pt]{%
      \stackunder[2pt]{\strut $\displaystyle#2$}{\myupbracefill{\wd0}}}{%
    \stackunder[-.2pt]{\myuparrow}{\rule{\rlwd}{#3\baselineskip}}}}{%
  \strut\kern9pt$\rightarrow$\smash{\rlap{$~\displaystyle#4$}}}%
}
\begin{document}

\begin{equation*}
   S = \int \sqrt{
  \smash{\notate[X]{F}{1}{\text{$F$ is functional}}}
  [x^a(\tau)]} d\tau
\end{equation*}
\bigskip
\begin{equation*}
   S = \int \sqrt{
  \smash{\notate[U]{F}{.2}{\text{$F$ is functional}}}
  [x^a(\tau)]} d\tau
\end{equation*}

\end{document}

在此处输入图片描述

相关内容