如何使用 showexpl 和 tufte-handout

如何使用 showexpl 和 tufte-handout

我正在使用该类处理一个文档tufte-handout,其中我需要包含一些LaTeX代码示例,我尝试showexpl按照它在 MWE 中出现的方式使用该包:

\documentclass[twoside]{tufte-handout}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%\usepackage[spanish,mexico]{babel}    
\usepackage{showexpl}

 \lstloadlanguages{[LaTeX]Tex}
 \lstset{%
     basicstyle=\ttfamily\small,
     commentstyle=\itshape\ttfamily\small,
     showspaces=false,
     showstringspaces=false,
     breaklines=true,
     breakautoindent=true,
     captionpos=t
 }

\begin{document}
\begin{LTXexample}  
\begin{itemize}
\item Introducción a \LaTeX
\item Texto con \LaTeX
\begin{itemize}
\item Reglas básicas
\item Entornos de texto
\begin{itemize}
\item Incisos, citaciones y poemas
\begin{itemize}
\item \textsf{quote}
\item \textsf{quotation}
\item \textsf{verse}
\end{itemize}
\item Listas
\begin{itemize}
\item \textsf{itemize}
\item \textsf{enumerate}
\item \textsf{description}
\end{itemize}
\item Texto alineado horizontalmente
\begin{itemize}
\item \textsf{flushleft}
\item \textsf{center}
\item \textsf{flushright}
\end{itemize}
\item Texto mecanografiado
\begin{itemize}
\item \textsf{verbatim}
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
\end{LTXexample}
\end{document}

但是,出现了问题,似乎无法编译。我不知道它是否必须查看此类中的印刷大小写,还是因为它无法在两列中工作。

我收到以下错误消息:

Package inputenc Error: Unicode char \u8:\expandafter not set up for use with LaTeX.
Package inputenc Error: Keyboard character used is undefined

仅当我尝试引入LTXexampe环境时才会发生这种情况。否则编译会运行良好。

答案1

问题不在于文档类别,而在于西班牙语中的重音字母(在此特定情况下为“ó”和“á”)。已知的列表解决方法:使用文字或甚至将重音字符转义为 LaTeX(例如,建议在如何在列表中插入带有重音符号的代码?) 不起作用,showexpl因为在写入内部使用的临时文件时非 ascii 字符会丢失。

我想向你推荐强大的tcolorbox包及其与的良好交互listings;这里有一个小例子(根据您的需要调整设置;特别是,您需要添加对重音大写元音、crema 和 eñe 的支持):

\documentclass[twoside]{tufte-handout}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish,mexico]{babel}    
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

 \lstset{%
     language=[LaTeX]TeX,
     basicstyle=\ttfamily\small,
     commentstyle=\itshape\ttfamily\small,
     showspaces=false,
     showstringspaces=false,
     breaklines=true,
     breakautoindent=true,
     captionpos=t,
     literate=%
       {á}{{\'a}}1 
       {é}{{\'e}}1 
       {í}{{\'i}}1 
       {ó}{{\'o}}1 
       {ú}{{\'u}}1 
}

\tcbset{
  example/.style 2 args={
    colframe=red!50!black, 
    colback=red!50!black!5,
    fonttitle=\small\sffamily\bfseries, 
    fontupper=\small,   
    fontlower=\small,
    text outside listing,
    title={Ejemplo~\thetcbcounter: #1},label={#2}},
}
\newtcblisting[auto counter]{micodigo}[3][]{example={#2}{#3},#1}

\begin{document}

\begin{micodigo}{ejemplo de listas}{eje:lista}
\begin{itemize}
\item Introducción a \LaTeX
\item Texto con \LaTeX
\begin{itemize}
\item Reglas básicas
\item Entornos de texto
\begin{itemize}
\item Incisos, citaciones y poemas
\begin{itemize}
\item \textsf{quote}
\item \textsf{quotation}
\item \textsf{verse}
\end{itemize}
\item Listas
\begin{itemize}
\item \textsf{itemize}
\item \textsf{enumerate}
\item \textsf{description}
\end{itemize}
\item Texto alineado horizontalmente
\begin{itemize}
\item \textsf{flushleft}
\item \textsf{center}
\item \textsf{flushright}
\end{itemize}
\item Texto mecanografiado
\begin{itemize}
\item \textsf{verbatim}
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
\end{micodigo}

\end{document}

结果:

在此处输入图片描述

作为伊格纳西建议his commentliterate,您可以通过使用包来避免使用listingsutf8。在这种情况下,您可以tcolorbox按如下方式加载:

\usepackage[many]{tcolorbox}
\tcbuselibrary{listingsutf8}
\tcbset{listing utf8=latin1}

完整示例:

\documentclass[twoside]{tufte-handout}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish,mexico]{babel}    
\usepackage[many]{tcolorbox}
\tcbuselibrary{listingsutf8}
\tcbset{listing utf8=latin1}

 \lstset{%
     language=[LaTeX]TeX,
     basicstyle=\ttfamily\small,
     commentstyle=\itshape\ttfamily\small,
     showspaces=false,
     showstringspaces=false,
     breaklines=true,
     breakautoindent=true,
     captionpos=t,
}

\tcbset{
  example/.style 2 args={
    colframe=red!50!black, 
    colback=red!50!black!5,
    fonttitle=\small\sffamily\bfseries, 
    fontupper=\small,   
    fontlower=\small,
    text outside listing,
    title={Ejemplo~\thetcbcounter: #1},label={#2}},
}
\newtcblisting[auto counter]{micodigo}[3][]{example={#2}{#3},#1}

\begin{document}

\begin{micodigo}{ejemplo de listas}{eje:lista}
\begin{itemize}
\item Introducción a \LaTeX
\item Texto con \LaTeX
\begin{itemize}
\item Reglas básicas
\item Entornos de texto
\begin{itemize}
\item Incisos, citaciones y poemas
\begin{itemize}
\item \textsf{quote}
\item \textsf{quotation}
\item \textsf{verse}
\end{itemize}
\item Listas
\begin{itemize}
\item \textsf{itemize}
\item \textsf{enumerate}
\item \textsf{description}
\end{itemize}
\item Texto alineado horizontalmente
\begin{itemize}
\item \textsf{flushleft}
\item \textsf{center}
\item \textsf{flushright}
\end{itemize}
\item Texto mecanografiado
\begin{itemize}
\item \textsf{verbatim}
\end{itemize}
\end{itemize}
\end{itemize}
\end{itemize}
\end{micodigo}

\end{document}

答案2

listings 无法处理 utf8 字符。请使用xelatex代替pdflatex。但是,只能处理双字节字符。

\documentclass[twoside]{tufte-handout}
\usepackage{fontspec}
\usepackage{showexpl}

\lstloadlanguages{[LaTeX]Tex}
\lstset{%
    basicstyle=\ttfamily\small,
    commentstyle=\itshape\ttfamily\small,
    showspaces=false,
    showstringspaces=false,
    breaklines=true,
    breakautoindent=true,
    captionpos=t,
}

\begin{document}
\begin{LTXexample}  
\begin{itemize}
  \item Introducción a \LaTeX
  \item Texto con \LaTeX
  \begin{itemize}
    \item Reglas básicas
    \item Entornos de texto
    \begin{itemize}
      \item Incisos, citaciones y poemas
      \begin{itemize}
        \item \textsf{quote}
        \item \textsf{quotation}
        \item \textsf{verse}
      \end{itemize}
      \item Listas
     \begin{itemize}
        \item \textsf{itemize}
        \item \textsf{enumerate}
        \item \textsf{description}
      \end{itemize}
      \item Texto alineado horizontalmente
      \begin{itemize}
        \item \textsf{flushleft}
        \item \textsf{center}
        \item \textsf{flushright}
      \end{itemize}
      \item Texto mecanografiado
      \begin{itemize}
        \item \textsf{verbatim}
      \end{itemize}
    \end{itemize}
  \end{itemize}
\end{itemize}
\end{LTXexample}
\end{document}

在此处输入图片描述

相关内容