避免自动替换

避免自动替换

考虑以下 MWE:

\documentclass{article}    
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
a << b
\end{document}

编译时,两个“ <”字符将被单个“开头的法语引号”字符替换(抱歉,不知道它的名字)。

有没有办法避免这种行为(除了使用数学模式)?

编辑a $<<$ b:我知道我可以使用或(如评论中所建议的)或逐字模式来解决a {<}< b。我的问题可以改写为:

有没有办法告诉 Latex 不要进行这些自动字符替换?

編輯2:用例:我在操作系统上发布一些课程文本文档,并将其附加到写入文件中a >> b

答案1

如果您希望将其全局化,则可以使用微类型:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\DisableLigatures[<]{encoding = T1}
\begin{document}
a << b
\end{document}

在此处输入图片描述

答案2

要局部禁用连字符,可以使用以下几种方法:

\documentclass{article}    
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
a << b

a <{}< b

a {<}< b

a <\/< b

a <\textcompwordmark< b

\end{document}

我更喜欢带有 的那个,因为它独立于引擎; LuaTeX 中的\/相同示例(但带有)fontspec

\documentclass{article}    

\usepackage{fontspec}

\begin{document}
a << b

a <{}< b

a {<}< b

a <\/< b

a <\textcompwordmark< b

\end{document}

会给

在此处输入图片描述

因为 LuaTeX 在进行连字符时会忽略括号。

当然,最好的办法是定义一个个人命令,这样您就可以修改渲染而不必追逐文档<\/<

\newcommand\textll{<\/<}

a \textll{} b

当有人告诉您必须在小于号之间应用一些负向字距调整时,您会很高兴选择了一种抽象方法。

旁注:这假设不使用 OT1 编码;使用它,输入<<不会产生连字,而是 ¡¡(两个反向感叹号);<<左 guillemet 的连字仅在 T1 编码(可能还有 LY1)中有效,并且fontspec对于使用选项加载的字体,以及(Xe|Lua)LaTeX 中有效Ligatures=TeX

答案3

在评论中,我们指定这实际上是 bash 源代码。因此 LaTeX 应该知道它是 bash 源代码。例如,可以使用 listings 包来完成此操作:

\documentclass{article}    
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{listings}
\lstset{basicstyle=\ttfamily}

\begin{document}
As listing:
\begin{lstlisting}[language=bash]
a << b
\end{lstlisting}

Inline:
\lstinline[language=bash]{a << b}
or
\lstinline[language=bash]/a << b/
\end{document}

答案4

对于数学类型设置的情况:

\documentclass{article}
\begin{document}
\[ a \ll b \]
\end{document}

结果

amssymb

\documentclass{article}
\usepackage{amssymb}
\begin{document}
\[ a < b \ll c \lll d \]
\end{document}

使用 amssymb 的结果

相关内容