![自定义命令用箭头表示方程中的特定项](https://linux22.com/image/463948/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4%E7%94%A8%E7%AE%AD%E5%A4%B4%E8%A1%A8%E7%A4%BA%E6%96%B9%E7%A8%8B%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E9%A1%B9.png)
目前,我正在使用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>
。例如:
- 以下两个应该生成相同的输出并被
[B,A]
视为可选参数的默认选择:
\notate[B,A]{<referenced math>}{1}{<math notation>}
\notate{<referenced math>}{1}{<math notation>}
- 要移除支架并保留箭头,请执行以下操作
<math notation>
:
\notate[X,A]{<referenced math>}{1}{<math notation>}
- 要交换支架和箭头的位置(箭头在一端
<referance math>
,支架在另一端):
\notate[A,B]{<referenced math>}{1}{<math notation>}
- 要保持两端的箭头:
\notate[A,A]{<referenced math>}{1}{<math notation>}
- 保持两端空白(无括号,无箭头):
\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}