可能重复这个问题
梅威瑟:
\documentclass[%
parskip=full,% empty line after each paragraph.
twoside=false% not a 2-sided print for a book.
]{scrbook}
% \usepackage[utf8]{inputenc} % For non-English languages
\usepackage[latin1]{inputenc} % listings needs this encoding instead!
\usepackage{listings, tcolorbox}
\usepackage{tcolorbox}
\tcbuselibrary{listings,skins,theorems,xparse}
\NewTotalTCBox{\inlinebox}{ O{white} v}
{ tcbox raise base,
arc=2pt,
nobeforeafter,% makes the box inline
colback=#1!10!white,% pales given color for background
boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt,
boxrule=0pt}
{\lstinline[style=tcblatex,texcsstyle=*\color{blue}\bfseries]§#2§}
\newcommand\cil{\inlinebox[green]}
\begin{document}
\cil|\TeX| (\TeX) is a control word because it is made up of letters. Any non-letter will end the sequence.
\end{document}
\UseRawInputEncoding
如果我按照以下方法操作,这一切都会成功这个答案。
我应该这么做吗?或者我应该做更正确的事情吗?
\usepackage[latin1]{inputenc}
顺便说一下,也可以。
答案1
有问题的部分是:
\lstinline[...]§#2§
这个角色§
是不是一个 ASCII 字符。
8 位 TeX 引擎(TeX、pdfTeX)
自包listings
确实不是支持多字节编码,文本编码仅限于 8 位编码latin1
。然后应通过以下方式声明此编码
\usepackage[latin1]{inputenc}
为了提高可移植性,我建议使用 ASCII 范围之外的其他围栏字符(|
、&
、...)。这样可以避免在输入文件编码更改为 UTF-8 时出现问题。
Unicode 引擎(LuaTeX、XeTeX)
这里的角色§
只是一字符(大字符),它可以作为\lstinline
包的围栏字符listings
。
但是,LuaTeX 或 XeTeX 支持的最佳输入编码是 UTF-8。因此,输入文件应从 Latin-1 重新编码为 UTF-8。