删除代码后面所有符号且不留空格的宏

删除代码后面所有符号且不留空格的宏

下列宏 X 在 TeX 中如何定义?

word in previous sentence?\macroX . Next sentence

给出的输出相同

word in previous sentence? Next sentence

动机:另一个宏会自动放置一个句号,以自动执行重复数据输入并显示在文档的各个部分中。但有时需要不同的标点符号。句号在 95% 的情况下都是合适的,但在例外情况下,需要这样的宏 X 来允许数据输入保持自动化。人们可能会想象这在以前已经做过了,可能是出于同样的原因?

需要澄清的是,这个想法是,宏后面的任何字符都会被忽略。

编辑:我的问题本身实际上比回答的问题更简单(我必须在这里补充一点,就我而言,egreg 对我首先试图解决的具体问题提出了更好的解决方案)。

我的问题仅仅是(1):什么宏会删除其右边的任何字符?

为了将来的知识和对问题的总体完整性,对于其他任何搜索此类输出的人来说,也许我自己以后会知道什么宏符合我的问题(1)中的描述?(如果要删除的对象不是句点而是某个任意字母或数字。)

MWE(此一般情况):

\documentclass[12pt]{article}
\usepackage{amsfonts,mathtools,amsthm,amssymb}
\def\relevantpartofbigmacro{\textit{#1}.\egroup\par}
\begin{document}
\relevantpartofbigmacro{test}
\end{document}

给出

\textit{test}.

而这个想法是写(在特殊情况下)

\documentclass[12pt]{article}
\usepackage{amsfonts,mathtools,amsthm,amssymb}
\def\relevantpartofbigmacro{\textit{#1}.\egroup\par}
\begin{document}
\relevantpartofbigmacro{test?\macroX}
\end{document}

给予

\textit{test?}

或者

\documentclass[12pt]{article}
\usepackage{amsfonts,mathtools,amsthm,amssymb}
\def\relevantpartofbigmacro{\textit{#1}5\egroup\par}
\begin{document}
\relevantpartofbigmacro{test}
\end{document}

给出

\textit{test}5

而这个想法是写(在特殊情况下)

\documentclass[12pt]{article}
\usepackage{amsfonts,mathtools,amsthm,amssymb}
\def\relevantpartofbigmacro{\textit{#1}5\egroup\par}
\begin{document}
\relevantpartofbigmacro{test7\macroX}
\end{document}

给予

\textit{test7}

答案1

我不确定我是否理解了这个问题。以下是\@addpunct使用 提供的宏来处理它的方法amsthm

\documentclass{article}
\usepackage{amsthm}

\makeatletter
\newcommand{\macroaddingperiod}[1]{%
  \emph{#1}\@addpunct{.}%
}
\makeatother

\begin{document}
Here we use \macroaddingperiod{on some text}

Should we add \macroaddingperiod{a period here?}
\end{document}

在此处输入图片描述

让我们处理用户应该帮助 LaTeX 并\macroX在特殊情况下进行输入的情况。

\documentclass[12pt]{article}
\usepackage{amsfonts,mathtools,amsthm,amssymb}

\makeatletter
\def\relevantpartofbigmacro#1{%
  \bgroup...% just to have a balance
  \textit{#1}%
  5%
  \egroup\par
}
\def\macroX{\aftergroup\macroX@aux}
\def\macroX@aux#1#2{#1}
\makeatother

\begin{document}
\relevantpartofbigmacro{test7}
\relevantpartofbigmacro{test7\macroX}
\end{document}

\textit这利用了已经放在\maybe@ic组后面的事实;因此\macroX@aux我们删除第一个标记(5)并应用于\maybe@ic下一个。

在此处输入图片描述

答案2

问题不太清楚,但是

\newcomamnd\macroX[1]{}

似乎按照你的要求去做了。

相关内容