§ xelatex/lualatex+{fontspec} 和 pdflatex+[utf8]{inputenc} 之间的兼容性

§ xelatex/lualatex+{fontspec} 和 pdflatex+[utf8]{inputenc} 之间的兼容性

我对某些宏和 § 符号感到困惑。我可以使用 xelatex/lualatex 来处理,但不能使用 pdflatex。

这是我的代码:

\documentclass{article}

\usepackage{fontspec} % <- xelatex/lualatex works
%\usepackage[utf8]{inputenc} % <- pdflatex fails
\usepackage{etoolbox}

\makeatletter
\def\instring#1#2{TT\fi\begingroup
  \edef\x{\endgroup\noexpand\in@{#1}{#2}}\x\ifin@}
\makeatletter

\begin{document}

\def\A{§ 2|1:3}

Spilt ``\A{}'' at ``|'':
\DeclareListParser{\dopipedlist}{|}
\edef\B{{\A}}
\renewcommand*{\do}[1]{\item #1}
\begin{itemize}
\expandafter\dopipedlist\B
\end{itemize}

Searching for §:
\if\instring{§}{\A}
Found.
\else
Not found.
\fi

\end{document}

理想情况下,我希望能够\A使用§\textsection或进行定义\S,并使其工作,无论使用哪种 *latex 风格。(我知道如果没有 fontspec/inputenc,§ 将无法工作。)

\textsection通过使用\noexpand\textsection并转向更强大的xstring 包,我取得了一些成功InSubStr,但这并不像我想要的那么简洁。\A是用户提供的,最终用户必须破译 TeX 的错误消息并知道他们需要添加,这似乎是不合理的\noexpand

有没有“有效”的解决方案?后端代码乱七八糟也没关系。我更关心的\A是简单。

最后,\A可能包含任何内容,尽管我想要检查的唯一奇怪字符instring是§。

答案1

为了增加趣味性,我进行了定义\itemizelist,以便将给定的输入拆分为|(或运行时选择的另一个字符)并添加到\item各个部分的前面。如果该部分包含§,则将其打印为红色。

\documentclass{article}

\usepackage{xparse,ifxetex}
\usepackage{xcolor}

\ifxetex
  \usepackage{fontspec} % <- xelatex/lualatex works
\else
  \usepackage[utf8]{inputenc} % <- pdflatex too
\fi
\usepackage{etoolbox}

\ExplSyntaxOn
\NewDocumentCommand{\itemizelist}{sO{|}m}
 {
  \IfBooleanTF { #1 }
   {
    \purton_itemizelist:no { #2 } { #3 }
   }
   {
    \purton_itemizelist:nn { #2 } { #3 }
   }
 }

\cs_new_protected:Nn \purton_itemizelist:nn
 {
  \seq_set_split:Nnn \l_tmpa_seq { #1 } { #2 }
  \seq_map_inline:Nn \l_tmpa_seq
   {
    \tl_if_in:nnTF { ##1 } { § }
     {
      \item \textcolor{red}{##1}
     }
     {
      \item ##1
     }
   }
 }
\cs_generate_variant:Nn \purton_itemizelist:nn { no }
\ExplSyntaxOff

\begin{document}

\def\A{§ 2|1:3}

\begin{itemize}
\itemizelist*{\A}
\itemizelist[;]{2:x;§ 3}
\end{itemize}

\end{document}

在此处输入图片描述

这些宏是“引擎不可知的”,因此它们的结果都是相同的。

相关内容