
tcolorbox
pdf에서 잘 작동하는 코드 형식화를 위해 with를 사용하고 있지만 listings
이 패키지는 tex4ht에서 작동하지 않습니다(잘못된 출력이 생성됨).
코드 조각 자체를 복제할 필요 없이 tex4ht와 pdf로 컴파일할 때 Latex에 무엇을 해야 하는지 알려주는 데 필요한 라텍스 매직 코드를 파악하는 데 어려움을 겪고 있습니다.
작은 예가 도움이 될 것입니다. 현재 이것이 내가 가지고 있는 것입니다
\documentclass[12pt]{book}%
...
\begin{document}
\newtcblisting{....}{....code is here ...}
문제는 패키지 \newtcblisting
와 같은 환경이라는 것입니다 tcolorbox
. 위의 전체 정의는 아래에 있습니다(MWE).
\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}
\usepackage{upquote} %to fix string quotes
\usepackage{fancyvrb}
\newtcblisting{matlab}[1]{
nobeforeafter,colback=bg,size=minimal,hbox,listing only,
listing options={style=Matlab-editor,basicstyle=\ttfamily#1,
breaklines= false,escapechar= `,mlshowsectionrules = true
}}
\begin{document}
\begin{matlab}{\small}
clear all;
m_zeros = [-1 -2];
m_poles = [0 -4 -6];
\end{matlab}
\end{document}
그리고 문제는 코드 자체를 복제하지 않고도 tex4ht에서 다른 작업을 수행할 수 있는 새로운 환경을 정의하는 방법입니다. 즉, 물론 이렇게 할 수 있습니다.
...
\ifdefined\HCode
\begin{verbatim}%font size option not important, so no need to pass it
... code listing....
\end{verbatim}
\else
\begin{matlab}{\small}%in pdf using tcblisting
... code listing....
\end{matlab}
\fi
.....
하지만 코드 조각이 크고 문서가 이미 그대로 복잡하기 때문에 코드 자체를 복제하고 싶지 않습니다. 또한 여러 가지 이유로 이러한 코드 조각을 파일에 넣거나 파일에서 읽고 싶지 않습니다.
그리고 이것이 내가 붙어있는 곳입니다. 나는 이것을하고 싶습니다 :
....
\ifdefined\HCode
\newenvironment{matlab}[1]
{\begin{verbatim}}
{\end{verbatim}}
\else
\newtcblisting{matlab}[1]{
....
그러나 위의 내용은 작동하지 않습니다. 왜냐하면 축어적 환경이 허용되지 않기 때문입니다. 그래서 대신 이것을 시도했습니다
\DefineVerbatimEnvironment{matlabX}{Verbatim}{fontsize=\small}
\ifdefined\HCode
\newenvironment{matlab}[1]
{\begin{matlabX}}
{\end{matlabX}}
\else
\newtcblisting{matlab}[1]{
.....
그리고 이로 인해 tex4ht에 구문 오류가 발생합니다. 나는 이 시점에서 너무 오버해서 라텍스 코드 마법의 한계에 도달했습니다. 무엇을 해야할지 모르겠습니다.
질문은: 코드 자체를 복제하지 않고도 tex4ht가 실행될 때 시작되는 새로운 환경을 정의하는 것이 가능합니까?
파일은 명령을 사용하여 HTML로 컴파일되며 동일한 폴더에 make4ht foo.tex
생성됩니다 . foo.html
를 사용하여 PDF로 컴파일했습니다 lualatex foo.tex
.
답변1
listings
tex4ht의 경우 어쨌든 로드하는 중이므로 새 환경을 사용할 수 없는 이유는 무엇입니까 ?
\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}
\usepackage{upquote} %to fix string quotes
\usepackage{fancyvrb}
\ifdefined\HCode
\lstnewenvironment{matlab}
{}
{}
\else
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\newtcblisting{matlab}[1]{%
nobeforeafter,
colback=bg,
size=minimal,
hbox,
listing only,
listing options={%
style=Matlab-editor,
basicstyle=\ttfamily#1,
breaklines= false,
escapechar= `,
mlshowsectionrules = true,
},
}
\fi
\begin{document}
\begin{matlab}{\small}
clear all;
m_zeros = [-1 -2];
m_poles = [0 -4 -6];
\end{matlab}
\end{document}
답변2
패키지를 사용하는 방법은 다음과 같습니다 moreverb
.
\documentclass[12pt]{book}%
\usepackage[T1]{fontenc}
\usepackage{color}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{listings}
\usepackage{matlab-prettifier}
\definecolor{bg}{RGB}{240,240,240}
\usepackage{upquote} %to fix string quotes
\newtcblisting{matlab}[1]{
nobeforeafter,colback=bg,listing only,
listing options={style=Matlab-editor,basicstyle=\ttfamily#1,
breaklines= false,escapechar= `,mlshowsectionrules = true
}}
\def\putVerb{%
\HCode{<PRE>}%
\verbatiminput{a.tex}%
\HCode{</PRE>}%
}
\ifdefined\HCode
\usepackage{moreverb}
\newenvironment{code}
{\verbatimwrite{a.tex}}
{\endverbatimwrite
\aftergroup\putVerb}
\else
\usepackage{fancyvrb}
\newenvironment{code}
{\matlab{\small}}
{\endmatlab}
\fi
\begin{document}
\begin{code}
clear all;
m_zeros = [-1 -2];
m_poles = [0 -4 -6];
\end{code}
and
\begin{code}
clear all;
m_poles = [0 -4 -6];
m_zeros = [-1 -2];
\end{code}
\end{document}
및 .htlatex
pdflatex