如何在 Stringstrings 命令中使用重音字符?

如何在 Stringstrings 命令中使用重音字符?

我是法国人,我想在使用 Stringstrings 命令时管理重音字符。

这是一个 LaTeX 最小示例,向您展示我的问题:

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{stringstrings}

\begin{document}

\edef\str{Ô opiniâtre salubrité}

1 -- \str

2 -- \substring{\str}{1}{$}

\end{document}

当我编译时,我得到了这个:

在此处输入图片描述

我尝试过几件事,包括这个:

\encodetoken{\str}

它起作用了,然后我得到了:“Ô opiniâtre salubrité”,但我无法干预链并修改它。字符串似乎冻结了。例如,使用如下语句:

\Treatments{}{}{}{}{}{0} \substring{\str}{1}{$}

根本不要删除空格。

有办法解决这个问题吗?

非常感谢 !

答案1

作为 的很久以前的作者stringstrings,我可以说这个包有很多限制,写得不好。但是,针对你目前的情况,我想说的是:这个包不处理 unicode 字符,而只处理那些构造为 的字符\^O opini\^atre salubrit\'e。其次,包宏的参数,例如\substring不能是宏,而必须是文本。如果你有宏形式,你必须预先展开它,就像我在下面的情况 3 中所做的那样。

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{stringstrings}

\begin{document}

\edef\str{Ô opiniâtre salubrité}

1 -- \str

\def\strB{\^O opini\^atre salubrit\'e}

2 -- \substring{\^O opini\^atre salubrit\'e}{1}{$}

3 -- \expandafter\substring\expandafter{\strB}{1}{$}

\end{document}

在此处输入图片描述

答案2

\newcommand如果您使用而不是,您的代码大部分情况下都可以正常工作\edef。请注意,无论如何,您可能\newcommand大多数时候都应该使用 ,因为它会检查以确保命令尚未定义。由于\str是一个相当常见的 3 个字母的名称,因此它可能是由某个包定义的,它\def会覆盖。

我说大多有效,因为这是我的输出:

在此处输入图片描述

stringstrings似乎不喜欢这个é角色。

另一方面,该包xstring对重音字符没有任何问题:

在此处输入图片描述

命令不同。xstring使用\StrMid代替\substring,并且xstring(据我所知)没有$快捷方式。但您可以使用任何比字符串长度更长的数字。xstring具有与 相同的许多功能,stringstrings因此您很可能可以切换。软件包文档提供法语和英语版本:https://www.ctan.org/pkg/xstring

\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
%\usepackage{stringstrings}
\usepackage{xstring}

\newcommand{\str}{Ô opiniâtre salubrité}

\begin{document}

1 -- \str

2 -- \StrMid{\str}{1}{40}

\end{document}

相关内容