在 LaTeX 中检查特定字符?

在 LaTeX 中检查特定字符?

我有一个无法自己解决的 LaTeX 问题。我有一个重复的字符排列,我想在 LaTeX 中自动格式化它们。

1H-NMR (400 MHz; DMSO-d6): \textdelta  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).

现在我必须将所有内容改为J 斜体*J*。当然我可以手动完成所有这些操作,但我有相当多的数据集,自动化将非常有帮助。我想到了一个将所有 J 改为斜体的新环境J。有可能吗?我可以用 if-then 命令检查吗?喜欢if="character"=J then italic else normal

我希望你能帮助我解决这个问题。

更新:

感谢大家的帮助。我尝试理解你们的所有建议,发现它们对于一个数据集都适用。现在我尝试定义一个新环境,可以在工作中将其用于多个数据集。

\documentclass{article}
\begin{document}
\newenvironment{NMR2}
    {
        \def\dataset{
    }
    {
        }
        \xpatchcmd*{\dataset}{J}{\emph{J}}{}{} % making problems
        \dataset
    }

\begin{NMR2}
1H-NMR (400 MHz; DMSO-d6):  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).
\end{NMR2}
\end{document}

我对第二个想法也做了同样的尝试:

\documentclass{article}
\begin{document}
\newenvironment{NMR}
    {
    \def\oldJ{J} % \oldJ contains "J"
    \let\J=\oldJ % \J contains "J"
    \catcode`\J=13 % makes J an active character
    \defJ{\textit{\J}} % makes J italic
    }
    {
    \catcode`\J=11 %  makes J from an active character to a letter again
    }

\begin{NMR}
1H-NMR (400 MHz; DMSO-d6):  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).
\end{NMR}
\end{document}

这两个示例都存在问题,并且不起作用。我做错了什么?

答案1

您无法像编辑中建议的那样定义环境。但是,您可以吸收环境的内容,然后进行替换。

我可以提出三种方法,均基于该environ包。

方法 1(使用regexpatch

environ包的定义NMR2方式是,环境的内容存储在 中\BODY;然后我们可以使用\xpatchcmd*将所有出现的 替换J\textit{J}

\documentclass{article}
\usepackage{regexpatch,environ}

\NewEnviron{NMR2}{%
  \xpatchcmd*\BODY{J}{\textit{J}}{}{}%
  \BODY}

\begin{document}

\begin{NMR2}
1H-NMR (400 MHz; DMSO-d6):  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).
\end{NMR2}
\end{document}

方法 2(使用l3regex

由于regexpatch基于l3regex,因此可以直接使用正则表达式模块。

\documentclass{article}
\usepackage{l3regex,environ}

\ExplSyntaxOn
\NewEnviron{NMR2}
 {
  \regex_replace_all:nnN { J } { \c{textit}\cB\{ J \cE\} } \BODY
  \BODY
 }
\ExplSyntaxOff

\begin{document}

\begin{NMR2}
1H-NMR (400 MHz; DMSO-d6):  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).
\end{NMR2}
\end{document}

方法 3(使用\scantokens

\documentclass{article}
\usepackage{environ}

\NewEnviron{NMR2}{%
  \begingroup\lccode`\~=`\J
  \lowercase{\endgroup\def~}{\textit{J}}%
  \catcode`\J=\active\scantokens\expandafter{\BODY\relax}}

\begin{document}

\begin{NMR2}
1H-NMR (400 MHz; DMSO-d6):  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).
\end{NMR2}
\end{document}

所有三种方法的输出

在此处输入图片描述

答案2

(根据我的定义\textdelta):

\documentclass{article}

\begin{document}

\def\textdelta{\mbox{$\delta$}}

\def\oldJ{J}
\let\J=\oldJ

\catcode`\J=13
\defJ{\textit{\J}}
1H-NMR (400 MHz; DMSO-d6): \textdelta  12.41 (s, OH), 7.36-7.30 (m,
Cbz), 7.20 (t, J = 5.5 Hz, NH), 5.00 (s, Cbz-CH2), 3.48 (q, J = 13.4
Hz, N-CH2), 3.33 (t, J = 7.3 Hz, N-CH), 2.96 (q, J = 6.2 Hz, NH-CH2),
1.57 (td, J = 16.8, 9.0 Hz, CH2), 1.40 (d, J = 3.4 Hz, CH2), 1.30-1.24 (m, CH2).

\catcode`\J=11 %  an attempt to final cleaning

\end{document}

在此处输入图片描述

警告:如果加载了额外的包,可能会产生副作用。

相关内容