文字を重ねて書く方法

文字を重ねて書く方法

同じ場所に 2 つの文字を書くにはどうすればよいでしょうか?

特に、矢印を書き$\rightarrow$、次に矢印が文字を横切るように文字を書きたいです。似たような質問がいくつか見つかりました(文字の上の範囲記号文字を別の文字に置き換える (Lualatex)など)がありますが、これらはまったく同じ質問ではありません。

答え1

テキストで表示したいのか、それとも数式で表示したいのかは不明です...

\documentclass{article}
\usepackage{stackengine}
\begin{document}
In te\stackengine{0pt}{x}{$\rightarrow$}{O}{c}{F}{T}{L}t...

$\ensurestackMath{\stackengine{0pt}{y}{\rightarrow}{O}{c}{F}{T}{L}} = mx + b$
\end{document}

ここに画像の説明を入力してください

また、矢印の幅を考慮する必要があるかどうかも明確ではありません。

\documentclass{article}
\usepackage{stackengine}
\begin{document}
In te\stackengine{0pt}{x}{$\rightarrow$}{O}{c}{F}{F}{L}t...

$\ensurestackMath{\stackengine{0pt}{y}{\rightarrow\!}{O}{c}{F}{F}{L}} = mx + b$
\end{document}

ここに画像の説明を入力してください

上記で簡単に調整できるその他の項目としては、水平方向の配置 (現在は中央) や矢印配置の垂直方向の高さ (現在は自然な高さに配置) などがあります。

ユースケースの詳細が決まったら、それをマクロに簡単にカプセル化できます。

以下では、egregs に倣って、\overarrow数式スタイルを保持する数式のマクロ バージョン ( ) を実装します。

\documentclass{article}
\usepackage{stackengine,scalerel}
\newcommand\overarrow[1]{\ThisStyle{\ensurestackMath{%
  \stackengine{0pt}{\SavedStyle#1}{\SavedStyle\rightarrow\!}{O}{c}{F}{F}{L}}}}
\begin{document}
$\overarrow{y} = mx_{\overarrow{z}} + b$
\end{document}

ここに画像の説明を入力してください

答え2

シンプルな方法で\makebox[0pt]{..}これを実現できます。実際の使用例によっては、多少の調整が必要になる場合があります。

\documentclass[12pt,a4paper]{article}    
\begin{document}

$\makebox[0pt][l]{$\rightarrow$}A$

\end{document}

ここに画像の説明を入力してください

答え3

ここに 2 つのバージョンのテキストがあります:

\documentclass{article}

\DeclareRobustCommand{\asA}[1]{% arrow strike
  \leavevmode\begingroup
  \vphantom{#1}%
  \ooalign{\hidewidth$\mathsurround0pt\rightarrow$\hidewidth\cr#1\cr}%
  \endgroup
}
\DeclareRobustCommand{\asB}[1]{% arrow strike
  \leavevmode\begingroup
  \vphantom{#1}%
  \ooalign{$\mathsurround0pt\rightarrow$\cr\hidewidth#1\hidewidth\cr}%
  \endgroup
}

\begin{document}

st\asA{r}uck

st\asB{r}uck

\end{document}

ここに画像の説明を入力してください

数学の場合:

\documentclass{article}

\makeatletter
\DeclareRobustCommand{\as}[1]{% arrow strike
  {\vphantom{#1}\mathpalette\erel@as{#1}}%
}

\newcommand{\erel@as}[2]{%
  \ooalign{\hfil$\m@th#1\rightarrow$\hfil\cr\hfil$\m@th#1#2$\hfil\cr}%
}
\makeatother

\begin{document}

$a+\as{b}+c_{\as{x}}$

\end{document}

ここに画像の説明を入力してください

答え4

柔軟性を少し高め、矢印が通過する対象物の幅に合わせて調整したい場合は、 を使用するとよいでしょうtikzmark

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcounter{atm}
\newcommand{\arrowthrough}[2][]{\stepcounter{atm}\tikzmarknode[path picture={
\draw[->,#1] (path picture bounding box.west) --
(path picture bounding box.east);}]{atm-\theatm}{#2}}
\begin{document}
 \arrowthrough{x}
 \[ E=\arrowthrough{m}c^2\]
 \arrowthrough[red,-latex]{Hello} \arrowthrough[latex-,thick,blue]{World!}
\end{document}

ここに画像の説明を入力してください

関連情報