如何在不实际输入字母的情况下模拟 Unicode 输入?

如何在不实际输入字母的情况下模拟 Unicode 输入?

我承认,这是一个不寻常的问题,大多数人都想做相反的事情。但是,我经常使用一些较旧的工具,这些工具并不总是能很好地处理 Unicode,所以最好只使用纯 ASCII,而不必费力地让 Unicode 工作。作为参考,这是我的 MWE(使用 LuaLaTex 编译):

\documentclass{article}
\usepackage{fontspec}
\usepackage{lmodern}
\usepackage{hyperref}

\setmonofont{Latin Modern Mono Prop}

\UndeclareUTFcomposite{x0233}{\=}{y}


\makeatletter
\g@addto@macro\UrlSpecials{\do\ȳ{\=y}}
\makeatother

\usepackage[backend=biber,bibencoding=utf8,useprefix,mincrossrefs=1]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{testbib.bib}
    @online {mysite,
        author = "John Doe",
        date = "2016-01-01",
        url = "http://www.\=y.com/",
        organization = "My Website",
    }
\end{filecontents}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=url]
      \step[fieldset=verba, origfieldval]
    }
  }
}

\DeclareFieldFormat{url}{\mkbibacro{URL}\addcolon\space\url{\thefield{verba}}}

\addbibresource{testbib.bib}

\begin{document}

\cite{mysite}

\printbibliography
\end{document}

注意:\DeclareSourcemap\DeclareFieldFormat命令是为了防止 URL 被转换为 URI 转义,我们可以忽略它。

问题在于命令\g@addto@macro\UrlSpecials{\do\ȳ{\=y}}。现在,显然,这是一个相当简单的例子,但我想弄清楚这是否可以供将来参考。我想要的是这样的:

\newcommand{\ym}{\char"0233} % U+0233 is the codepoint for ȳ

\makeatletter
\g@addto@macro\UrlSpecials{\expandafter\do\csname \ym\endcsname{\=y}}
\makeatother

不幸的是,这行不通。有什么想法可以让我实现我想要的功能吗?这样的事可能吗?

答案1

你可以总是输入范围内的 Unicode 字符x0xFFFF

^^^^xyzw

xyzw四个十六进制在哪里小写数字。对于上面的字符,x10000必须使用^^^^^^xyzuvw,包含六个十六进制数字。因此,字符 U+0233 可以表示为 ,^^^^0233而 U+FFFF 可以表示为^^^^ffff

x0实际上,在 Knuth TeX 中,-范围内的字符xFF也可以表示为^^xy。重要的是,它的^类别代码为 7(通常在文档序言中)。

在你的情况下

\makeatletter
\g@addto@macro\UrlSpecials{\expandafter\do\^^^^0233{\=y}}
\makeatother

会做。

答案2

感谢 Joseph Wright 的建议,我找到了使用\Uchar命令的解决方案。

\documentclass{article}
\usepackage{fontspec}
\usepackage{lmodern}
\usepackage{hyperref}

\setmonofont{Latin Modern Mono Prop}

\UndeclareUTFcomposite{x0233}{\=}{y}


\makeatletter
\g@addto@macro\UrlSpecials{\expandafter\do\csname \Uchar"0233\endcsname{\=y}}
\makeatother



\usepackage[backend=biber,bibencoding=utf8,useprefix,mincrossrefs=1]{biblatex}
\usepackage{filecontents}


\begin{filecontents}{testbib.bib}
    @online {mysite,
        author = "John Doe",
        date = "2016-01-01",
        url = "http://www.\=y.com/",
        organization = "My Website",
    }
\end{filecontents}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=url]
      \step[fieldset=verba, origfieldval]
    }
  }
}

\DeclareFieldFormat{url}{\mkbibacro{URL}\addcolon\space\url{\thefield{verba}}}


\addbibresource{testbib.bib}

\begin{document}

\cite{mysite}.

\printbibliography
\end{document}

相关内容