Sản phẩm tensor có nguồn gốc

Nov 15 2020

Tôi đã cố gắng viết các sản phẩm tensor có nguồn gốc bằng cách sử dụng semantex (sao chép từ trang 27 trong sách hướng dẫn).

\documentclass{article}

\usepackage{amsmath,semantex}

\NewSymbolClass\MyBinaryOperator[
    definekeys={
        {Lder}{upper=L},
        {Rder}{upper=R},
    },
]
\NewObject\MyBinaryOperator\tensor{\otimes}[
    definekeys={
        {der}{Lder},
    },
]
\NewObject\MyBinaryOperator\fibre{\times}[
    % Americans are free to call it \fiber instead
    definekeys={
        {der}{Rder},
    },
]

\begin{document}

\begin{equation}
    A\tensor[R,der] B 
\end{equation}

\end{document}

Nhưng tôi muốn chữ L xuất hiện trên đầu biểu tượng tensor thay vì ở bên phải. Điều này có khả thi không?

Cảm ơn!

Trả lời

5 azetina Nov 15 2020 at 23:28

Đây là một MWE đang sử dụng semantex. Ý tưởng là sử dụng commandphím và nhập lệnh mong muốn. Trong trường hợp này, bạn muốn đặt L trên biểu tượng. Vì vậy, sử dụng command=\overset{L}sẽ đủ.

\documentclass{article}

\usepackage{amsmath,semantex}

\NewSymbolClass\MyBinaryOperator[
    definekeys={
        {Lder}{command=\overset{L}},
        {Rder}{upper=R},
    },
]
\NewObject\MyBinaryOperator\tensor{\otimes}[
    definekeys={
        {der}{Lder},
    },
]
\NewObject\MyBinaryOperator\fibre{\times}[
    % Americans are free to call it \fiber instead
    definekeys={
        {der}{Rder},
    },
]

\begin{document}

\begin{equation}
    A\tensor[R,der] B 
\end{equation}

\end{document}
4 egreg Nov 15 2020 at 23:24

Tôi không biết làm thế nào để làm điều đó semantex, nhưng nó không khó với các công cụ khác.

\documentclass{article}
\usepackage{amsmath}
%\usepackage{xparse} % not needed with LaTeX 2020-10-01 or later

\ExplSyntaxOn

\keys_define:nn { cinque/tensor }
 {
  der .tl_set:N = \l__cinque_tensor_upper_tl,
  der .default:n = L,
  unknown .code:n = \tl_set_rescan:Nnx \l__cinque_tensor_subscript_tl { } { \l_keys_key_str },
 }
\tl_new:N \l__cinque_tensor_subscript_tl

\NewDocumentCommand{\tensor}{O{}}
 {
  \group_begin:
  \keys_set:nn { cinque/tensor } { #1 }
  \tl_if_empty:NTF \l__cinque_tensor_upper_tl
   { \otimes }
   { \overset{\l__cinque_tensor_upper_tl}{\otimes} }
  \tl_if_empty:NF \l__cinque_tensor_subscript_tl { \sb{\l__cinque_tensor_subscript_tl} }
  \group_end:
 }

\ExplSyntaxOff

\begin{document}

$A\otimes B$

$A\tensor B$

$A\tensor[R] B$

$A\tensor[der,R] B$

$A\tensor[R,der] B$

$A\tensor[\mathcal{X}] B$

\end{document}

3 AlanXiang Nov 15 2020 at 22:58

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\usepackage{expl3}
\usepackage{amsmath}

\ExplSyntaxOn
\clist_new:N \l_doc_tmpa_clist
\tl_new:N \l_doc_tmpa_tl
\tl_new:N \l_doc_tmpb_tl

\tl_new:N \g_doc_template_a_tl
\tl_gset:Nn \g_doc_template_a_tl {
  \overset{\tiny L}{*1}
}

\cs_generate_variant:Nn \tl_set_rescan:Nnn {NnV}

\DeclareDocumentCommand{\tensor}{O{}}{
  \clist_set:Nn \l_doc_tmpa_clist {#1}
  \tl_set:Nn \l_doc_tmpa_tl {\otimes}
  
  \clist_map_inline:Nn \l_doc_tmpa_clist {
    \str_case:nn {##1}{
      {der} {
       \tl_set_eq:NN \l_doc_tmpb_tl \g_doc_template_a_tl
       \regex_replace_once:nnN {*1} {\u{\l_doc_tmpa_tl}} \l_doc_tmpb_tl
       \tl_set_eq:NN \l_doc_tmpa_tl \l_doc_tmpb_tl
      }
    }
  }
  
  \clist_map_inline:Nn \l_doc_tmpa_clist {
    \str_case:nn {##1}{
      {R} {
       \tl_set:No \l_doc_tmpa_tl {\l_doc_tmpa_tl \c_math_subscript_token {R}}
      }
    }
  }
  
  \mathbin{\tl_use:N \l_doc_tmpa_tl}
}
\ExplSyntaxOff

\begin{document}

\par $a \tensor[R] b$
\par $a \tensor[R,der] b$
\par $a \tensor[der] b$
\end{document}