答案1
稍微改进了 ThV 的答案,以保留正确的数学风格。
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand*{\encircled}[1]{\relax\ifmmode\mathpalette\@encircled@math{#1}\else\@encircled{#1}\fi}
\newcommand*{\@encircled@math}[2]{\@encircled{$\m@th#1#2$}}
\newcommand*{\@encircled}[1]{%
\tikz[baseline,anchor=base]{\node[draw,circle,outer sep=0pt,inner sep=.2ex] {#1};}}
\makeatother
\begin{document}
\encircled{Text} outside math. $\encircled{n=1}$ formula.
\[
f_{\encircled{n}} = \encircled{f_n}
\]
\end{document}
答案2
我会使用 TikZ 来实现这一点。以下是一些粗略的示例代码,类似于问题 1和问题2你提到的:
\documentclass{article}
\usepackage{tikz}
\newif\ifstartedinmathmode
\newcommand\encircled[1]{%
\relax\ifmmode\startedinmathmodetrue\else\startedinmathmodefalse\fi%
\tikz[baseline,anchor=base]{%
\node[draw,circle,outer sep=0pt,inner sep=.2ex]
{\ifstartedinmathmode$#1$\else#1\fi};}%
}
\begin{document}
\encircled{Text} outside math. \encircled{$n=1$} formula.
Or $\encircled{n}$ like this.
\[ f_{\encircled{n}} = \encircled{f_n} \]
\end{document}
为了方便起见,我添加了代码以在需要时自动切换到数学模式。这是基于问题 3。