J'ai écrit une macro appelée J'ai voulu m'en servir avec un code (page 758 du manuel de TikZ) pour construire un graphique, afin d'apprendre à les construire avec TikZ uniquement (je veux d'abord comprendre le code de base). Lorsque je commente la macro, le code compile, lorsque je décommente, le code plante et affiche l'erreur : Ouvrir dans l'éditeur Overleaf
Package tikz Error: Semicolon expected. Pensant que le problème pouvait venir de Cela reste sans effet : j'en conclus que le problème vient de la macro que j'ai écrite. Merci de vos lumières. Voici un ECM : Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt,landscape]{article} % Présentation générale et mise en page \usepackage[left=0.5cm, right=0.5cm, top=0.6cm, bottom=0.6cm]{geometry} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{amsmath, amsfonts, amssymb} \usepackage[frenchb]{babel} % Règles françaises de typographie \usepackage{pgf,tikz} \usetikzlibrary{datavisualization} \usetikzlibrary{datavisualization.formats.functions} \usetikzlibrary{babel} % Nouvelle commande \dupli[]{} % Le premier argument est le nombre de double cadres % Le deuxième argument est le contenu qui est dupliqué dans chaque cadre. \newlength{\ligne} % nouvelle largeur appelée "ligne" \newcommand{\dupli}[2]{% \setlength{\ligne}{0.46\textwidth}% \newsavebox{\maboite}% \savebox{\maboite}{% \par \noindent% \hspace*{\fill}% \parbox{% % boîte sans cadre pouvant contenir des paragraphes 0.46\textwidth}{% % largeur du texte identique à celle du cadre \noindent\makebox[\ligne][c]{% \begin{minipage}[c]{\ligne}{#2}\end{minipage}% }% }% \hspace*{\fill}% }% \foreach \i in {1,...,#1} {% \vspace*{\stretch{1}}% \parbox{\textwidth}{% \hspace*{\fill}% \usebox{\maboite}% \hfill\vrule\hfill% \usebox{\maboite}% \hspace*{\fill}{\null}% }% \vspace*{\stretch{1}}% \par% }% \vfill% } \begin{document} \dupli{3}{ \begin{tikzpicture} \shorthandoff{:;} \datavisualization [school book axes, visualize as smooth line] data [format=function] { var x : interval [-2:2]; func y = \value x*\value x + 1; }; \shorthandon{:;} \end{tikzpicture} } \end{document} |
C'est un problème courant dû au changement de Ouvrir dans l'éditeur Overleaf
\textcolor{red}{% \begin{tikzpicture} \datavisualization [school book axes, visualize as smooth line] data [format=function] { var x : interval [-2:2]; func y = \value x*\value x + 1; }; \end{tikzpicture}} Une solution est de créer un environnement Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper, 11pt,landscape]{article} \usepackage[left=0.5cm, right=0.5cm, top=0.6cm, bottom=0.6cm]{geometry} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{amsmath, amssymb} \usepackage[frenchb]{babel} % Règles françaises de typographie \usepackage{tikz} \usetikzlibrary{datavisualization} \usetikzlibrary{datavisualization.formats.functions} \usetikzlibrary{babel} % Nouvelle commande \dupli[]{} % Le premier argument est le nombre de double cadres % Le deuxième argument est le contenu qui est dupliqué dans chaque cadre. \newsavebox{\maboite}% \newlength{\ligne} % nouvelle largeur appelée "ligne" \newcommand{\dupli}[2]{% \setlength{\ligne}{0.46\textwidth}% \savebox{\maboite}{% \par \noindent% \hspace*{\fill}% \parbox{% % boîte sans cadre pouvant contenir des paragraphes 0.46\textwidth}{% % largeur du texte identique à celle du cadre \noindent\makebox[\ligne][c]{% \begin{minipage}[c]{\ligne}#2\end{minipage}% }% }% \hspace*{\fill}% }% \foreach \i in {1,...,#1} {% \vspace*{\stretch{1}}% \parbox{\textwidth}{% \hspace*{\fill}% \usebox{\maboite}% \hfill\vrule\hfill% \usebox{\maboite}% \hspace*{\fill}{\null}% }% \vspace*{\stretch{1}}% \par% }% \vfill% } \newenvironment{Dupli}[1]{% \def\mtfois{#1}% \setbox\maboite\hbox\bgroup \begin{minipage}[c]{.46\textwidth}}{% \end{minipage}\egroup \foreach \i in {1,...,\mtfois} {% \vspace*{\stretch{1}}% \parbox{\textwidth}{% \hspace*{\fill}% \usebox{\maboite}% \hfill\vrule\hfill% \usebox{\maboite}% \hspace*{\fill}{\null}% }% \vspace*{\stretch{1}}% \par% }% \vfill} \begin{document} \begin{Dupli}{2} \begin{tikzpicture} \datavisualization [school book axes, visualize as smooth line] data [format=function] { var x : interval [-2:2]; func y = \value x*\value x + 1; }; \end{tikzpicture} \end{Dupli} \end{document} Merci beaucoup, cela fonctionne parfaitement. Si je crée un environnement, n'ai je pas intérêt à en faire un package personnel ? Et si oui comment ?
(03 Jui '17, 22:51)
AndréC
1
@AndréC Il suffit d'ajouter le code (définition) de l'environnement au fichier Remarque Pour éviter la répétition de code il est préférable de créer une nouvelle commande
(04 Jui '17, 00:11)
touhami
@Touhami, Merci, j'ai créé un package perso où j'ai placé le code, cela fonctionne parfaitement et c'est bien plus pratique. Concernant la répétition de code, vous avez raison mais vous remarquerez que je déclare une longueur \ligne et je ne m'en ressers pas partout où je le pourrai... Cette macro évolue au fil de mes besoins et de mon apprentissage de TeX et de LaTeX. Pour l'instant elle me suffit même si je compte bien l'améliorer...
(04 Jui '17, 00:38)
AndréC
@touhami, vous dites que c'est un problème courant du au changement de catcode. Je n'ai pas trouvé de référence ni d'articles sur ce problème. En avez-vous qui expliquent plus en détail les subtilités de ce problème ?
(19 Jui '17, 01:49)
AndréC
1
@AndréC Vous pouvez, par exemple, voir :
Cette entrée de UK TeX FAQ
(20 Jui '17, 11:40)
touhami
|