\StrLen{#1}
我目前正在我的 中使用\newcommand
。这对于用拉丁字母书写的任何常见字符串都完美无缺。
例如,“Hello”的字符串长度为 5。问题出在中文字符上。“容容”的字符串长度为 8,从技术上讲是正确的,但我找不到返回 2 的 StrLen 的多字节替代方案。
注意:我正在使用 pdflatex。
问候,Jan
答案1
你可以计算 utf-8 的起始字节数,例如
\documentclass{article}
\usepackage[utf8]{inputenc}
\makeatletter
\def\zz#1{\zzz0#1\relax}
\def\zzz#1#2{%
\ifx\relax#2 \the\numexpr#1\relax
\else
\expandafter\zzz\expandafter{%
\the\numexpr(#1+\ifnum\expandafter`\string#2<"80 1\else \ifnum\expandafter`\string#2>"BF 1 \else 0 \fi\fi
\expandafter)\expandafter\relax\expandafter}%
\fi}
\begin{document}
\zz{容容}
\zz{abc}
\zz{¢Àïα}
\end{document}