我正在用 LaTeX 创建一份文档,其中包含位于单独的 BibTeX 文件中的参考书目。
当我在没有任何参考书目的情况下编译文档时,它可以正确运行,但是当我添加对参考书目的引用时,它会发送以下错误。
! You can't use `the character 1' after \the.
我做了一些测试,当我删除时tikzpicture
,整个文件(包括参考书目)都可以正确编译。但是当我再次添加图片时,我得到了同样的错误。
以下代码是带有触发错误的图像的示例。
\documentclass[openany]{book}
\usepackage[utf8]{inputenc}
%Si se activa no funcionan algunos gráficos
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{circuitikz}
\usepackage{amsmath}
\usetikzlibrary{positioning,shadows,backgrounds}
\usetikzlibrary{positioning,shadows,backgrounds,arrows,intersections}
\usepackage{cite}
\usepackage{float}
\usepackage{venndiagram}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{pgf}
\usetikzlibrary{arrows,automata}
\usepackage{verbatim}
\usepackage[left=2cm,right=2cm, top=2.5cm, bottom=2.5cm]{geometry}
\usetikzlibrary{decorations.pathmorphing,patterns}
\usetikzlibrary{trees}
%\setlength\parindent{0pt}
\usepackage{cancel}
\setcounter{secnumdepth}{3} %para que ponga 1.1.1.1 en subsubsecciones
\setcounter{tocdepth}{3} % para que ponga subsubsecciones en el indice
\usepackage{titlesec}
\graphicspath{ {imagenes/} }
\titleformat
{\chapter} % command
[display] % shape
{\bfseries\Large\itshape} % format
{}
%{Story No. \ \thechapter} % label
{0.5ex} % sep
{
\rule{\textwidth}{1pt}
\vspace{1ex}
\centering
} % before-code
[
\vspace{-0.5ex}%
\rule{\textwidth}{0.3pt}
] % after-code
\setlength{\parskip}{1ex}
\begin{document}
\title{Apuntes y Tareas de Probabilidad.}
\author{Luis Alejandro Barranco Ju\'arez}
\maketitle
%\begin{titlepage}
%\begin{center}
%\begin{Huge}
%\textsc{Apuntes y Tareas.}
%\end{Huge}
%\end{center}
%\end{titlepage}
\pagenumbering{roman}
\tableofcontents % indice de contenidos
\newpage
\pagenumbering{arabic}
\chapter{Tarea 1}
\markboth{TAREA 1}{TAREA 1}
\section{Tri\'angulos de Pascal.}
\begin{tikzpicture}[x=13mm,y=9mm]
% some colors
\colorlet{even}{cyan!60!black}
\colorlet{odd}{orange!100!black}
\colorlet{links}{red!70!black}
\colorlet{back}{yellow!20!white}
% some styles
\tikzset{
box/.style={
minimum height=5mm,
inner sep=.7mm,
outer sep=0mm,
text width=10mm,
text centered,
font=\small\bfseries\sffamily,
text=#1!50!black,
draw=#1,
line width=.25mm,
top color=#1!5,
bottom color=#1!40,
shading angle=0,
rounded corners=2.3mm,
drop shadow={fill=#1!40!gray,fill opacity=.8},
rotate=0,
},
link/.style={-latex,links,line width=.3mm},
plus/.style={text=links,font=\footnotesize\bfseries\sffamily},
}
% Pascal's triangle
% row #0 => value is 1
\node[box=odd] (p-0-0) at (0,0) {1};
\foreach \row in {1,...,16} {
% col #0 => value is 1
\node[box=odd] (p-\row-0) at (-\row/2,-\row) {1};
\pgfmathsetmacro{\value}{1};
\foreach \col in {1,...,\row} {
% iterative formula : val = precval * (row-col+1)/col
% (+ 0.5 to bypass rounding errors)
\pgfmathtruncatemacro{\value}{\value*((\row-\col+1)/\col)+0.5};
\global\let\value=\value
% position of each value
\coordinate (pos) at (-\row/2+\col,-\row);
% odd color for odd value and even color for even value
\pgfmathtruncatemacro{\rest}{mod(\value,5)}
\ifnum \rest=0
\node[box=even] (p-\row-\col) at (pos) {\value};
\else
\node[box=odd] (p-\row-\col) at (pos) {\value};
\fi
% for arrows and plus sign
% \ifnum \col<\row
% \node[plus,above=0mm of p-\row-\col]{+};
% \pgfmathtruncatemacro{\prow}{\row-1}
% \pgfmathtruncatemacro{\pcol}{\col-1}
% \draw[link] (p-\prow-\pcol) -- (p-\row-\col);
% \draw[link] ( p-\prow-\col) -- (p-\row-\col);
% \fi
}
}
\begin{pgfonlayer}{background}
% filling and drawing with the same color to enlarge background
\path[draw=back,fill=back,line width=5mm,rounded corners=2.5mm]
( p-0-0.north west) -- ( p-0-0.north east) --
(p-16-16.north east) -- (p-16-16.south east) --
( p-16-0.south west) -- ( p-16-0.north west) --
cycle;
\end{pgfonlayer}
\end{tikzpicture}
Para n=5.
\cite{Polya}
\addcontentsline{toc}{chapter}{Bibliografía}
\bibliographystyle{acm} % estilo de la bibliografía.
\bibliography{prueba} % biblio.bib es el fichero donde está salvada la bibliografía.
\end{document}
我的.bib
文件如下所示:
@book{Polya,
author = "G.Polya",
title = "How to Solve It",
publisher = "Princeton University Press",
year = "1957",
}
导致这个问题的原因是什么?
答案1
不加思索地使用\def
、\let
等\global
会造成生命损失。
不管怎样,他们都在浪费时间,如果你浪费的时间太多,你的生命就完了。
您已覆盖 TeX 的定义,\value
并通过以下方式使此重新定义成为全局的:
\global\let\value=\value
因此,TeX 无法执行任何依赖于\value
文档中这一点之后的操作。引用只是附带损害。
这是一个重现该错误的示例,虽然不是最小的,但至少是更简单的:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\ifnum\value{page}=1 hi\else bye\fi
\begin{tikzpicture}
\foreach \row in {1,...,16} {
\pgfmathsetmacro{\value}{1}
\foreach \col in {1,...,\row} {
\pgfmathtruncatemacro{\value}{\value*((\row-\col+1)/\col)+0.5};
\global\let\value=\value
}
}
\end{tikzpicture}
\ifnum\value{page}=1 hi\else bye\fi
\end{document}
可以通过确保新的宏名不会覆盖现有宏名来解决该问题。在这种情况下,替换\myvalue
即可\value
。
使用\newcommand*\value{1}
而不是\pgfmathsetmacro{\value}{1}
会提供一条信息丰富的错误消息来解释问题。