如何定义新的标点符号?

如何定义新的标点符号?

以下是变体感叹号的一些代码,尽管它存在各种缺点(例如不可扩展性)

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\bigexclaim{%%
  \tikz{%%
    \node[circle,fill,inner sep=0.55pt] (A) at (0,0)     {};
    \coordinate                         (B) at (0,2.5ex)   ;
    \draw[fill,rounded corners=1.25pt] ($(A)!1.5pt!-23:(B)$) -- 
                                       ($(A)!1!-16:(B)$)     -- 
                                       ($(A)!1!-30:(B)$)     -- 
                                        cycle;
  }}
\newsavebox{\myexclamationptbox}
\savebox{\myexclamationptbox}{\bigexclaim}
\newcommand{\myexclamationpt}{\usebox{\myexclamationptbox}\kern-2pt}

\begin{document}

  Prove\myexclamationpt    \par
  Prove!

\end{document}

在此处输入图片描述

对于数学模式,我们有各种格式化命令,例如 \mathbin,, \mathrel\mathpunct获取间距正确的围绕新的二元运算符、关系和标点符号。是否有类似的东西可以创建自定义标点符号?是否有需要考虑的粘合?或者这一切都只是猜测,直到你喜欢你所看到的东西?

答案1

至于前后间距,您自己判断。标志前可能需要留出一些小空间。

然而,您最明显缺少的是空间因子代码。

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcommand\bigexclaim{%%
  \tikz{%%
    \node[circle,fill,inner sep=0.55pt] (A) at (0,0)     {};
    \coordinate                         (B) at (0,2.5ex)   ;
    \draw[fill,rounded corners=1.25pt] ($(A)!1.5pt!-23:(B)$) -- 
                                       ($(A)!1!-16:(B)$)     -- 
                                       ($(A)!1!-30:(B)$)     -- 
                                        cycle;
  }}
\newsavebox{\myexclamationptbox}
\savebox{\myexclamationptbox}{\bigexclaim}
\newcommand{\myexclamationpt}{\usebox{\myexclamationptbox}\kern-2pt}
\newcommand{\Smyexclamationpt}{\usebox{\myexclamationptbox}\kern-2pt
  \spacefactor\sfcode`\!\relax}


\begin{document}

Prove\myexclamationpt{} Something after

Prove! Something after

\bigskip

Prove\Smyexclamationpt{} Something after

Prove! Something after

\bigskip\hrule\bigskip


\xspaceskip=20pt % just to emphasize the effect

Prove\myexclamationpt{} Something after

Prove! Something after

\bigskip

Prove\Smyexclamationpt{} Something after

Prove! Something after

\end{document}

在上半部分,我们有相同的输入,但有两个不同的版本,下面是“空间因子调整”的版本。

为了强调效果并更好地展示发生的情况,在下半部分排版了相同的输入,但\xspaceskip设置为 20pt,这会放大 TeX 在标点符号后使用的额外空间。

在此处输入图片描述

答案2

我意识到这并没有回答你的问题的主要内容,但你可以用这个包使它具有可扩展性scalerel

\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{scalerel}

\newcommand\bigexclaim{%%
  \tikz{%%
    \node[circle,fill,inner sep=0.55pt] (A) at (0,0)     {};
    \coordinate                         (B) at (0,2.5ex)   ;
    \draw[fill,rounded corners=1.25pt] ($(A)!1.5pt!-23:(B)$) -- 
                                       ($(A)!1!-16:(B)$)     -- 
                                       ($(A)!1!-30:(B)$)     -- 
                                        cycle;
  }}
\newsavebox{\myexclamationptbox}
\savebox{\myexclamationptbox}{\bigexclaim}
\newcommand{\myexclamationpt}{%
  \scaleto{\kern1pt\usebox{\myexclamationptbox}\kern-2pt}{2.5ex}}

\begin{document}

  Prove\myexclamationpt    \par
  \scriptsize Prove\myexclamationpt    \par
  \tiny  Prove\myexclamationpt    \par
  \normalsize Prove!

\end{document}

在此处输入图片描述

相关内容